{"id":46222085,"url":"https://github.com/vertz-dev/vertz","last_synced_at":"2026-05-02T04:04:58.525Z","repository":{"id":336271745,"uuid":"1149000073","full_name":"vertz-dev/vertz","owner":"vertz-dev","description":"The Agent-native TypeScript stack","archived":false,"fork":false,"pushed_at":"2026-04-22T06:09:02.000Z","size":129442,"stargazers_count":43,"open_issues_count":37,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-22T07:03:09.711Z","etag":null,"topics":["claude","framework","llm","typescript"],"latest_commit_sha":null,"homepage":"https://vertz.dev","language":"TypeScript","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/vertz-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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":null,"dco":null,"cla":null}},"created_at":"2026-02-03T15:59:37.000Z","updated_at":"2026-04-22T06:09:06.000Z","dependencies_parsed_at":"2026-04-22T07:04:42.905Z","dependency_job_id":null,"html_url":"https://github.com/vertz-dev/vertz","commit_stats":null,"previous_names":["vertz-dev/vertz"],"tags_count":1610,"template":false,"template_full_name":null,"purl":"pkg:github/vertz-dev/vertz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertz-dev%2Fvertz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertz-dev%2Fvertz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertz-dev%2Fvertz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertz-dev%2Fvertz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vertz-dev","download_url":"https://codeload.github.com/vertz-dev/vertz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertz-dev%2Fvertz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32522253,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T01:12:54.858Z","status":"online","status_checked_at":"2026-05-02T02:00:05.923Z","response_time":132,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["claude","framework","llm","typescript"],"created_at":"2026-03-03T14:02:31.579Z","updated_at":"2026-05-02T04:04:58.425Z","avatar_url":"https://github.com/vertz-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/vertz-dev/vertz\"\u003e\n    \u003cimg src=\"https://avatars.githubusercontent.com/u/254937586?s=200\" alt=\"Vertz\" width=\"120\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eVertz\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA full-stack TypeScript framework.\u003c/strong\u003e\u003cbr /\u003e\n  Database ORM, API server, compiled UI, AI agents, and a custom runtime — one schema drives every layer. If it builds, it works.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/vertz-dev/vertz/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/vertz-dev/vertz/actions/workflows/ci.yml/badge.svg?branch=main\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/vertz-dev/vertz\"\u003e\u003cimg src=\"https://codecov.io/gh/vertz-dev/vertz/branch/main/graph/badge.svg\" alt=\"Coverage\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vertz-dev/vertz/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/vertz-dev/vertz\" alt=\"License\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vertz-dev/vertz\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/vertz-dev/vertz?style=social\" alt=\"Stars\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\nDefine your schema. Get a typed API, a typed SDK, and a typed UI — no glue code, no type duplication, no runtime surprises.\n\n```\nd.table()  →  entity()  →  createServer()  →  query() / form()\n schema        CRUD API       serve it          use it in UI\n```\n\n## See It in Action\n\n**1. Define the schema** — `src/api/schema.ts`\n\nTable and model live together. The model is what you pass around — it carries the table's types everywhere.\n\n```typescript\nimport { d } from '@vertz/db';\n\nexport const todosTable = d.table('todos', {\n  id: d.uuid().primary({ generate: 'uuid' }),\n  title: d.text(),\n  completed: d.boolean().default(false),\n  createdAt: d.timestamp().default('now').readOnly(),\n});\n\nexport const todosModel = d.model(todosTable);\n```\n\n**2. Create the entity** — `src/api/entities/todos.ts`\n\nOne entity = a full CRUD API. Access control is required, not optional.\n\n```typescript\nimport { entity } from '@vertz/server';\nimport { todosModel } from '../schema';\n\nexport const todos = entity('todos', {\n  model: todosModel,\n  access: { list: () =\u003e true, get: () =\u003e true, create: () =\u003e true },\n});\n```\n\n**3. Wire up the database and serve** — `src/api/server.ts`\n\n```typescript\nimport { createDb } from '@vertz/db';\nimport { createServer } from '@vertz/server';\nimport { todosModel } from './schema';\nimport { todos } from './entities/todos';\n\nconst db = createDb({\n  url: process.env.DATABASE_URL!,\n  models: { todos: todosModel },\n});\n\ncreateServer({ entities: [todos], db }).listen(3000);\n// POST /api/todos, GET /api/todos, GET /api/todos/:id — done.\n// OpenAPI spec auto-generated at /api/openapi.json — your API is discoverable by LLMs out of the box.\n```\n\n**4. Use it in the UI — fully typed, zero glue code**\n\n```tsx\nimport { query } from '@vertz/ui';\nimport { api } from './generated/client';\n\nexport function TodoApp() {\n  const todos = query(api.todos.list());\n\n  return (\n    \u003cdiv\u003e\n      \u003cul\u003e\n        {todos.data?.items.map((todo) =\u003e (\n          \u003cli key={todo.id}\u003e{todo.title}\u003c/li\u003e\n        ))}\n      \u003c/ul\u003e\n    \u003c/div\u003e\n  );\n}\n```\n\nChange `d.text()` to `d.integer()` on a column — `tsc` lights up red in your entity, your server, your SDK, and your UI. Across packages, in a single typecheck. That's the point.\n\n## Try It\n\n```bash\nvtzx @vertz/create-vertz-app@latest my-app\ncd my-app\nvtz install\nvtz run dev\n```\n\nOr clone the [entity-todo example](./examples/entity-todo) for a full-stack app with SSR, dark mode, and a shadcn-style theme.\n\n## What You Get\n\n| Layer | What | Package |\n|-------|------|---------|\n| **Schema** | 40+ column types, runtime validation, JSON Schema output | `@vertz/schema` |\n| **Database** | Typed queries, migrations, PostgreSQL + SQLite + D1 | `@vertz/db` |\n| **Server** | Entity CRUD, actions, access control, CORS, env validation | `@vertz/server` |\n| **UI** | Signals, JSX, router, `query()`, `form()`, scoped CSS, SSR | `@vertz/ui` |\n| **Primitives** | Headless a11y components — Dialog, Select, Tabs, Menu, etc. | `@vertz/ui-primitives` |\n| **Tooling** | Dev server, build, codegen, static analysis | `@vertz/cli` |\n| **Deploy** | Cloudflare Workers adapter | `@vertz/cloudflare` |\n| **Testing** | `createTestApp()` with service mocking | `@vertz/testing` |\n| **HTTP** | Type-safe client with retries, streaming, auth strategies | `@vertz/fetch` |\n| **Agents** | AI agents, typed tools, workflows, Cloudflare Workers | `@vertz/agents` |\n| **Terminal UI** | JSX components, prompts, wizards, spinners for CLI apps | `@vertz/tui` |\n\nInstall everything with one dependency:\n\n```bash\nvtz add vertz\n```\n\nThen import what you need: `vertz/server`, `vertz/db`, `vertz/ui`, `vertz/schema`, `vertz/testing`. For AI agents, install `@vertz/agents` separately.\n\n## Custom Endpoints\n\nNeed business logic beyond CRUD? Use `action()`:\n\n```typescript\nimport { action, createServer } from '@vertz/server';\nimport { s } from '@vertz/schema';\n\nconst reports = action('reports', {\n  inject: { todos: todosEntity },\n  actions: {\n    summary: {\n      method: 'GET',\n      path: '/reports/summary',\n      response: s.object({ total: s.integer(), completed: s.integer() }),\n      handler: async (ctx) =\u003e {\n        const all = await ctx.entities.todos.list({});\n        return {\n          total: all.items.length,\n          completed: all.items.filter((t) =\u003e t.completed).length,\n        };\n      },\n    },\n  },\n});\n\ncreateServer({ entities: [todosEntity], actions: [reports] }).listen(3000);\n```\n\nEntities and actions compose. Types flow. The dev server picks up everything automatically.\n\n## Deploy Anywhere\n\n```typescript\napp.listen(3000);                           // Bun, Node\nexport default { fetch: app.handler };      // Cloudflare Workers\nDeno.serve(app.handler);                    // Deno\n```\n\n## Why Vertz?\n\n**The problem:** LLMs write code fast — but they can't run it. They can't see the runtime error. They can't know the DI container will fail until you tell them. Every wrong guess costs tokens, time, and patience.\n\n**The fix:** Move failures to compile time. If the types are right, the code works. One way to do things, so the LLM (and your team) never guesses wrong.\n\nThis isn't a slogan. It's an architectural decision:\n\n- **Functions over decorators** — types flow through functions. Decorators break inference.\n- **One way to do things** — ambiguity is a tax on LLMs and teams alike.\n- **Compile-time over runtime** — if `tsc` says it's good, it runs.\n- **Explicit over implicit** — dependencies are declared, never discovered.\n\n## Built by LLMs\n\nThis entire codebase is written with [Claude Code](https://claude.ai/claude-code). Not scaffolded by AI and finished by hand — written, tested, and iterated by an LLM from first commit to last.\n\nStrict TDD. Design docs before code. Every behavior has a failing test first. Read the [Manifesto](./MANIFESTO.md) and [Vision](./VISION.md) to understand the philosophy.\n\n## Status\n\nPre-release. APIs will change. The architecture and philosophy are stable. We're building in public.\n\n- [Vision](./VISION.md) — the 8 principles behind every decision\n- [Manifesto](./MANIFESTO.md) — what we believe and why\n- [Design docs](./plans/) — how features are planned before they're built\n- [@vinicius_dacal](https://x.com/vinicius_dacal) on X — build-in-public updates\n- [@matheeuspoleza](https://x.com/matheeuspoleza) on X — build-in-public updates\n\n## Contributing\n\nFound a bug? [Open an issue](https://github.com/vertz-dev/vertz/issues) — we appreciate detailed bug reports with reproduction steps.\n\nWe don't accept pull requests. The entire codebase is written by [Claude Code](https://claude.ai/claude-code) — that's how we build vertz. Issues are the best way to contribute.\n\n## License\n\n[MIT](./LICENSE)\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eFull-stack TypeScript framework. Type-safe. LLM-native.\u003c/em\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvertz-dev%2Fvertz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvertz-dev%2Fvertz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvertz-dev%2Fvertz/lists"}