{"id":47594407,"url":"https://github.com/tina4stack/tina4-ruby","last_synced_at":"2026-04-25T11:04:12.286Z","repository":{"id":344457025,"uuid":"1181558653","full_name":"tina4stack/tina4-ruby","owner":"tina4stack","description":"Tina4 Ruby","archived":false,"fork":false,"pushed_at":"2026-04-02T07:32:26.000Z","size":1358,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"v3","last_synced_at":"2026-04-02T07:39:09.675Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tina4stack.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-14T09:59:55.000Z","updated_at":"2026-04-02T07:32:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"6c750267-fe53-45c2-944d-46d39bf188b1","html_url":"https://github.com/tina4stack/tina4-ruby","commit_stats":null,"previous_names":["tina4stack/tina4-ruby"],"tags_count":80,"template":false,"template_full_name":null,"purl":"pkg:github/tina4stack/tina4-ruby","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tina4stack%2Ftina4-ruby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tina4stack%2Ftina4-ruby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tina4stack%2Ftina4-ruby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tina4stack%2Ftina4-ruby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tina4stack","download_url":"https://codeload.github.com/tina4stack/tina4-ruby/tar.gz/refs/heads/v3","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tina4stack%2Ftina4-ruby/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31485516,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-01T17:54:28.985Z","updated_at":"2026-04-25T11:04:12.271Z","avatar_url":"https://github.com/tina4stack.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://tina4.com/logo.svg\" alt=\"Tina4\" width=\"200\"\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eTina4 Ruby\u003c/h1\u003e\n\u003ch3 align=\"center\"\u003eTINA4 — The Intelligent Native Application 4ramework\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\u003cem\u003eSimple. Fast. Human. \u0026nbsp;|\u0026nbsp; Built for AI. Built for you.\u003c/em\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e55 built-in features. Zero runtime dependencies. One require, everything works.\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://rubygems.org/gems/tina4ruby\"\u003e\u003cimg src=\"https://img.shields.io/gem/v/tina4ruby?color=7b1fa2\u0026label=RubyGems\" alt=\"RubyGems\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/tests-2%2C508%20passing-brightgreen\" alt=\"Tests\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/features-55-blue\" alt=\"Features\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/dependencies-0-brightgreen\" alt=\"Zero Deps\"\u003e\n  \u003ca href=\"https://tina4.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs-tina4.com-7b1fa2\" alt=\"Docs\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Quick Start\n\n```bash\n# With the Tina4 CLI (recommended — enables SCSS + live reload)\ncargo install tina4    # or grab a binary from https://github.com/tina4stack/tina4/releases\ntina4 init ruby ./my-app\ncd my-app \u0026\u0026 tina4 serve\n\n# Without the Tina4 CLI\ngem install tina4ruby\ntina4ruby init my-app\ncd my-app \u0026\u0026 tina4ruby serve\n```\n\nOpen http://localhost:7147\n\n---\n\n## Code Examples\n\n```ruby\nTina4.get \"/api/hello\" do |request, response|\n  response.call({ message: \"Hello from Tina4!\" }, Tina4::HTTP_OK)\nend\n\nclass User \u003c Tina4::ORM\n  integer_field :id, primary_key: true, auto_increment: true\n  string_field :name\n  string_field :email\nend\n\ndb = Tina4::Database.new(\"sqlite://app.db\")\n```\n\n---\n\n## What's Included\n\n| Category | Features |\n|----------|----------|\n| **Core HTTP** (7) | Router with path params (`{id:int}`, `{p:path}`), Server, Request/Response, Middleware pipeline, Static file serving, CORS |\n| **Database** (6) | SQLite, PostgreSQL, MySQL, MSSQL, Firebird — unified adapter, connection pooling, query cache, transactions, race-safe ID generation, SQL dialect translation |\n| **ORM** (7) | Active Record with typed fields, relationships (`has_one`/`has_many`/`belongs_to`), soft delete, QueryBuilder + MongoDB support, Auto-CRUD generator, migrations with rollback |\n| **Auth \u0026 Security** (5) | JWT (HS256/RS256), password hashing (PBKDF2-SHA256), API key validation, rate limiting, CSRF form tokens |\n| **Templating** (3) | Frond engine (Twig/Jinja2-compatible, pre-compiled 2.8× faster), SCSS auto-compilation, built-in CSS (~24 KB) |\n| **API \u0026 Integration** (5) | HTTP client (zero-dep), GraphQL with ORM auto-schema + GraphiQL IDE, WSDL/SOAP with auto WSDL, WebSocket (RFC 6455) + Redis backplane, MCP server (24 dev tools) |\n| **Background** (3) | Job queue (File/RabbitMQ/Kafka/MongoDB) with priority, delay, retry, dead letters — service runner — event system (on/emit/once/off) |\n| **Data \u0026 Storage** (4) | Session (File/Redis/Valkey/MongoDB/DB), response cache (LRU, TTL), seeder + 50+ fake data generators, messenger (SMTP/IMAP) |\n| **Developer Tools** (7) | Dev dashboard (11 tabs), dev toolbar, error overlay (Catppuccin Mocha), dev mailbox, hot reload + CSS hot-reload, code metrics (complexity, coupling, maintainability), AI context installer (7 tools) |\n| **Utilities** (7) | DI container (transient + singleton), HtmlElement builder, inline testing (`@tests` decorator), i18n (6 languages), Swagger/OpenAPI auto-generation, CLI scaffolding (`generate model/route/migration/middleware`), structured logging |\n\n**2,508 tests. Zero runtime dependencies. Full parity across Python, PHP, Ruby, and Node.js.**\n\n---\n\n## CLI Reference\n\n```bash\ntina4ruby serve [--port PORT]\ntina4ruby migrate\ntina4ruby seed\ntina4ruby ai [--all]\ntina4ruby generate model \u003cname\u003e\n```\n\n---\n\n## Performance\n\nBenchmarked with `wrk` — 5,000 requests, 50 concurrent, median of 3 runs:\n\n| Framework | JSON req/s | Deps | Features |\n|-----------|-----------|------|----------|\n| **Tina4 Ruby** | **10,243** | 0 | 55 |\n| Sinatra | 9,548 | 5+ | ~4 |\n\nTina4 Ruby outperforms Sinatra while delivering **55 features vs ~4** — with zero runtime dependencies.\n\n**Across all 4 Tina4 implementations:**\n\n| | Python | PHP | Ruby | Node.js |\n|---|--------|-----|------|---------|\n| **JSON req/s** | 6,508 | 29,293 | 10,243 | 84,771 |\n| **Dependencies** | 0 | 0 | 0 | 0 |\n| **Features** | 55 | 55 | 55 | 55 |\n\n---\n\n## Cross-Framework Parity\n\nTina4 ships identical features across four languages — same architecture, same conventions, same 55 features:\n\n| | Python | PHP | Ruby | Node.js |\n|---|--------|-----|------|---------|\n| **Package** | `tina4-python` | `tina4stack/tina4php` | `tina4ruby` | `@tina4/core` |\n| **Tests (v3.11.12)** | 2,281 | 2,073 | 2,508 | 2,897 |\n| **Default port** | 7146 | 7145 | 7147 | 7148 |\n\n**~9,700 tests** across all 4 frameworks. See [tina4.com](https://tina4.com).\n\n---\n\n## Documentation\n\nFull guides, API reference, and examples at **[tina4.com](https://tina4.com)**.\n\n## License\n\nMIT (c) 2007-2026 Tina4 Stack\nhttps://opensource.org/licenses/MIT\n\n---\n\n## Our Sponsors\n\n**Sponsored with 🩵 by Code Infinity**\n\n[\u003cimg src=\"https://codeinfinity.co.za/wp-content/uploads/2025/09/c8e-logo-github.png\" alt=\"Code Infinity\" width=\"100\"\u003e](https://codeinfinity.co.za/about-open-source-policy?utm_source=github\u0026utm_medium=website\u0026utm_campaign=opensource_campaign\u0026utm_id=opensource)\n\n*Supporting open source communities • Innovate • Code • Empower*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftina4stack%2Ftina4-ruby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftina4stack%2Ftina4-ruby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftina4stack%2Ftina4-ruby/lists"}