AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
A production-grade CRUD framework for TypeScript
Translation pending
Developer toolsTypeScript · JavaScriptGitHub @kavo-labsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
🚀 The fastest way to build CRUD APIs in TypeScript. Works with your favorite JavaScript framework and ORM, featuring filtering, sorting, pagination, and OpenAPI support.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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.Read the full 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.