AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
🚀 The fastest way to build CRUD APIs in TypeScript. Works with your favorite JavaScript framework and ORM, featuring filtering, sorting, pagination, and OpenAPI support.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Turn models into APIs.
Define an entity once and get a complete REST and
GraphQL CRUD API with filtering, sorting, pagination, and generated routes.
Define an entity once, add one decorator, and Kavo generates the rest: create,
read, update, delete, filtering, sorting, pagination, nested includes, and
field selection — no hand-written controller methods.檢視完整 README ↗Define an entity once, add one decorator, and Kavo generates the rest: create, read, update, delete, filtering, sorting, pagination, nested includes, and field selection — no hand-written controller methods.
npm install @kavo/core @kavo/nest @kavo/typeorm
@kavo/nest expects @nestjs/common, @nestjs/core, reflect-metadata, and
rxjs as peers, and @kavo/typeorm expects typeorm — a Nest app already has
the first four. Kavo needs Node 22+, an ESM app, and emitDecoratorMetadata;
see Requirements and
Peer dependencies for
the exact versions.
@Kavo(Book)
@Controller("books")
export class BooksController {}
That's a full CRUD API. See kavo.js.org/getting-started for the full walkthrough, including NestJS wiring and a soft-delete example.
Built with Claude Code, and shipped with skills so your agent moves just as
fast. extensions has ready-made skills for the whole surface —
@Kavo(), global config, the query grammar, schemas, errors, soft delete,
Swagger, the GraphQL and MCP bindings, and per-ORM wiring for each supported
adapter — published as a plugin via this repo's own marketplace:
npx skills add kavo-labs/kavo
Fewer tokens, ship faster.
@kavo/core holds all contracts, the type system, and the
request engine, with zero runtime dependencies. Everything else is a
swappable adapter or binding on top of it: pick the ORM(s) you store data
with, and the framework or protocol binding(s) you expose it through.
Frameworks — generate routes/handlers from an entity + @Kavo config:
| Package | Role |
|---|---|
@kavo/nest | NestJS binding — the @Kavo decorator and route generation |
@kavo/next | Next.js App Router binding — registry-driven catch-all routing |
ORMs — adapters that feed the engine from your data layer:
| Package | Role |
|---|---|
@kavo/typeorm | TypeORM adapter |
@kavo/prisma | Prisma adapter |
@kavo/mongoose | Mongoose adapter |
@kavo/mikroorm | MikroORM adapter |
Protocols — host-framework-agnostic bindings for non-REST surfaces:
| Package | Role |
|---|---|
@kavo/graphql | Host-agnostic GraphQL schema binding |
@kavo/mcp | Host-agnostic MCP binding — entities as MCP tools |
Realtime — transports for pushing changes to clients:
| Package | Role |
|---|---|
@kavo/sse | Plain HTTP text/event-stream transport, usable from @kavo/nest with no extra peer dependency |
Bug reports, issues, and pull requests are welcome.
CONTRIBUTING.md covers getting a working checkout, the
pnpm check gate every change has to pass, and the architectural invariants a
PR needs to respect.