A real service container, service providers, expressive routing, JSX views, and a code-generating console — on a modern TypeScript stack that runs on Node and the edge.
$ npm install @shaferllc/keelProductive ergonomics on a modern TypeScript stack — small enough to read in an afternoon.
bind · singleton · instance · make. Every service resolves through one registry — the structure that keeps apps testable.
A register() → boot() lifecycle wires your app together in one place, in predictable order.
Closures or [Controller, method] tuples resolved from the container, with full dependency injection.
Type-safe Hono JSX with layouts. view(Page, props) renders in one call — the same code on Node and the edge.
keel serve, keel routes, and make:controller / provider / middleware generators, living in your app.
No hard Node dependency, so a Keel app deploys to Cloudflare Workers. This page is one.
No magic you can't read. The whole framework is a few hundred lines.
// routes/web.ts router.get("/", [HomeController, "index"]); // resolved from the container — full dependency injection export class HomeController { index(c: Ctx) { return c.json({ app: config("app.name") }); } welcome(c: Ctx) { return view(WelcomePage, { name: config("app.name") }); } }
Keel is built to be written with an AI agent — the machine-facing surface is generated from the same source as these docs, so it never drifts.
Exposes the guides, the full public API surface (380+ exports), the make:* generators, and Keel's conventions to any MCP client.
Every guide, indexed at /llms.txt and inlined at /llms-full.txt — served from this domain, always current.
Conventions an agent can follow without hallucinating. Start at Building Keel apps with AI.
# one line, in your app directory $ curl -fsSL https://keeljs.com/install.sh | bash # or with Cursor + Claude Code config too $ curl -fsSL https://keeljs.com/install.sh | bash -s -- --all ⚓ wrote .mcp.json — your agent now knows Keel
$ curl -fsSL https://keeljs.com/install.sh | bashDistributed like any real framework — a library you install, plus an app that builds on it.
A working app with routing, views, config, and a console — ready to build on.
# start from the official starter $ git clone https://github.com/shaferllc/keel-app my-app $ cd my-app && npm install $ npm run dev ⚓ my-app listening on http://localhost:3000