@shaferllc/keel 0.83.5 → 0.83.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -5,10 +5,12 @@ house framework for Node.js — or an app built on it. Humans: this is also a fa
5
5
  orientation. For prose guides see [`docs/`](./docs); for a machine-readable
6
6
  surface, run the [MCP server](#mcp-server-recommended).
7
7
 
8
- > **The fastest path:** connect the Keel MCP server (below) and call
9
- > `keel_overview` first. It returns conventions, the folder map, every doc
10
- > topic, and the generators. Then `keel_search_docs` / `keel_read_doc` for
11
- > depth, `keel_search_api` to find exports, `keel_scaffold` to generate code.
8
+ > **The fastest path:** follow
9
+ > [`docs/from-install-to-deploy.md`](./docs/from-install-to-deploy.md)
10
+ > (create-keeljs local Cloudflare or optional Keel Cloud). To deploy on
11
+ > `*.keeljs.cloud` from MCP, see [`docs/keel-cloud.md`](./docs/keel-cloud.md).
12
+ > For deep lookups, connect the MCP server and call `keel_overview`, then
13
+ > `keel_search_docs` / `keel_search_api`.
12
14
 
13
15
  ---
14
16
 
@@ -167,3 +169,13 @@ Tools: `keel_overview`, `keel_search_docs`, `keel_read_doc`, `keel_search_api`,
167
169
  - [`docs/architecture.md`](./docs/architecture.md) — a request from socket to response
168
170
  - [`docs/container.md`](./docs/container.md) — the DI core everything rests on
169
171
  - [`llms-full.txt`](./llms-full.txt) — every guide in one file, for a fresh context
172
+
173
+ ## Learned User Preferences
174
+
175
+ - Do not reference peer frameworks (Fastify, Laravel, Koa, etc.) in docs, comments, changelogs, or marketing; keep Hono as the only named HTTP foundation.
176
+
177
+ ## Learned Workspace Facts
178
+
179
+ - Keel Cloud (control plane) lives in the sibling `keel-cloud` repo, not inside this framework repo; this package supplies `@shaferllc/keel/gates`, `@shaferllc/keel/hosting`, and MCP `keel_cloud_*` tools that call Cloud’s API.
180
+ - `create-keeljs` plus self-managed Cloudflare and optional Keel Cloud hosting are alternative paths — do not mix both for the same app; see [`docs/from-install-to-deploy.md`](./docs/from-install-to-deploy.md).
181
+ - Cloud MCP tools register when `KEEL_CLOUD_TOKEN` is set (optional `KEEL_CLOUD_URL`, production default `https://app.keeljs.cloud`).
package/README.md CHANGED
@@ -61,19 +61,32 @@ export class HomeController {
61
61
  - **Thin and legible.** The whole framework is a few hundred lines in
62
62
  `src/core/`. No magic you can't read.
63
63
 
64
- ## Two repos: the framework and your app
64
+ ## Two pieces: the framework and your app
65
65
 
66
- Keel is distributed the same way most frameworks are a **library** you install,
67
- plus an **app** that depends on it:
66
+ Keel is a **library** you install. New apps come from the generator (templates
67
+ ship inside the package so they cannot lag the framework):
68
+
69
+ ```bash
70
+ npm create keeljs@latest my-app
71
+ cd my-app && npm install && npm run dev
72
+ ```
73
+
74
+ End-to-end (local → Cloudflare or optional Keel Cloud):
75
+ [From install to deploy](./docs/from-install-to-deploy.md).
76
+
77
+ **Deploy on `*.keeljs.cloud` from your IDE** (same `keel-mcp` + a Cloud token):
78
+ [Keel Cloud — deploy from MCP](./docs/keel-cloud.md).
68
79
 
69
80
  | Repo | Role |
70
81
  |------|------|
71
82
  | [`shaferllc/keel`](https://github.com/shaferllc/keel) (this repo) | The framework. Published as `@shaferllc/keel`. |
72
- | [`shaferllc/keel-app`](https://github.com/shaferllc/keel-app) | The starter appclone it to build something. Gets core updates via `npm update`. |
83
+ | Your app (via `create-keeljs`) | Routes, models, viewsdepends on `@shaferllc/keel`. |
73
84
 
74
85
  ## Install in your app
75
86
 
76
87
  ```bash
88
+ npm create keeljs@latest my-app
89
+ # or, into an existing project:
77
90
  npm install @shaferllc/keel
78
91
  ```
79
92
 
@@ -81,24 +94,20 @@ npm install @shaferllc/keel
81
94
  import { Application, Router, config } from "@shaferllc/keel/core";
82
95
  ```
83
96
 
84
- Or clone the [starter app](https://github.com/shaferllc/keel-app) and start
85
- from a working skeleton.
86
-
87
97
  ## Hack on the framework itself
88
98
 
89
99
  ```bash
90
100
  git clone https://github.com/shaferllc/keel.git
91
101
  cd keel
92
102
  npm install
93
- npm test # 740 tests
94
- npm run typecheck # src + tests
95
- npm run build # compile the package to dist/
96
- npm run verify:release # build from what's committed — what a consumer's install runs
103
+ npm test
104
+ npm run typecheck
105
+ npm run build
106
+ npm run verify:release
97
107
  ```
98
108
 
99
- This repo is **the framework, and only the framework** — there is no app in it. To
100
- run one, clone the [starter app](https://github.com/shaferllc/keel-app) and point it
101
- at your checkout (`"@shaferllc/keel": "file:../keel"`).
109
+ Point a generated kit at your checkout with
110
+ `"@shaferllc/keel": "file:../keel"` while developing.
102
111
 
103
112
  ## The console
104
113
 
@@ -124,13 +133,16 @@ ships a machine-readable surface that stays generated-in-sync, never stale:
124
133
 
125
134
  - **An MCP server.** `keel-mcp` exposes Keel's docs, its full public API (380+
126
135
  exports), the generators, and its conventions to any [MCP](https://modelcontextprotocol.io)
127
- client. Connect it in Claude Code:
136
+ client and with `KEEL_CLOUD_TOKEN`, **deploys sites to `*.keeljs.cloud`**
137
+ (`create_site` → preview → publish). See [Keel Cloud](./docs/keel-cloud.md).
138
+ Connect it in Claude Code:
128
139
  ```bash
129
140
  claude mcp add keel -- npx -y keel-mcp
141
+ # Cloud: add -e KEEL_CLOUD_TOKEN=… -e KEEL_CLOUD_URL=https://app.keeljs.cloud
130
142
  ```
131
143
  Tools: `keel_overview`, `keel_search_docs`, `keel_read_doc`, `keel_search_api`,
132
- `keel_list_generators`, `keel_scaffold`. Resources: `keel://overview`,
133
- `keel://llms-full`, `keel://docs/<slug>`.
144
+ `keel_list_generators`, `keel_scaffold`, plus `keel_cloud_*` when a token is set.
145
+ Resources: `keel://overview`, `keel://llms-full`, `keel://docs/<slug>`.
134
146
  - **[`AGENTS.md`](./AGENTS.md).** The agent playbook — the one import rule, the
135
147
  folder map, the container/provider model, a "how to add X" table, and the
136
148
  guardrails. `CLAUDE.md` points to it.
@@ -192,7 +204,10 @@ See [docs/architecture.md](./docs/architecture.md) for the full picture.
192
204
 
193
205
  | Guide | What it covers |
194
206
  |-------|----------------|
195
- | [Getting Started](./docs/getting-started.md) | Install, run, first route and controller |
207
+ | [Getting Started](./docs/getting-started.md) | First route, controller, view, config |
208
+ | [From install to deploy](./docs/from-install-to-deploy.md) | create-keeljs → local → Cloudflare or Keel Cloud |
209
+ | [Keel Cloud](./docs/keel-cloud.md) | Deploy `*.keeljs.cloud` from `keel-mcp` (create → preview → publish) |
210
+ | [Starter kits](./docs/starter-kits.md) | Presets (`minimal` / `api` / `app` / `saas`) |
196
211
  | [The Service Container](./docs/container.md) | Binding and resolving services, DI |
197
212
  | [Service Providers](./docs/providers.md) | Plugin system: register/boot lifecycle, options |
198
213
  | [Configuration](./docs/configuration.md) | `config/*.ts`, dot-notation, `env()` |
@@ -190,14 +190,15 @@ export async function createServer() {
190
190
  ? [
191
191
  "",
192
192
  "## Keel Cloud (token detected)",
193
- "Cloud tools are enabled. Token binds to the user's first team.",
193
+ "Cloud tools are enabled deploy to *.keeljs.cloud from this MCP server.",
194
+ "Guide: keel_read_doc { slug: \"keel-cloud\" }",
194
195
  "Typical loop:",
195
196
  "1. keel_cloud_create_site { name, preset }",
196
197
  "2. Edit files at the returned storage_path (real Keel app)",
197
- "3. keel_cloud_preview { site_id }",
198
- "4. keel_cloud_publish { site_id, confirm: true } after user approval",
199
- "Also: me, billing(+checkout/portal), list/get/delete/restore sites,",
200
- "secrets (list/set/delete), custom domain (set/clear), deploys, export(+sql).",
198
+ "3. keel_cloud_preview { site_id } → preview-{slug}.keeljs.cloud",
199
+ "4. keel_cloud_publish { site_id, confirm: true } {slug}.keeljs.cloud",
200
+ "Also: secrets, custom domains (Pro), billing, export(+sql), delete/restore.",
201
+ "Token binds to the user's first team.",
201
202
  ]
202
203
  : []),
203
204
  ].join("\n");
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shaferllc/keel",
3
- "version": "0.83.5",
3
+ "version": "0.83.7",
4
4
  "description": "The house framework for Node.js — a service container, providers, routing, JSX views, and a code-generating console.",
5
5
  "repo": "https://github.com/shaferllc/keel",
6
6
  "generated": "run `npm run build:ai` to regenerate",
@@ -159,6 +159,13 @@
159
159
  "path": "docs/factories.md",
160
160
  "example": "docs/examples/factories.ts"
161
161
  },
162
+ {
163
+ "slug": "from-install-to-deploy",
164
+ "title": "From install to deploy",
165
+ "summary": "One path from zero to a live Keel app — locally, on Cloudflare yourself, or on Keel Cloud with an AI agent.",
166
+ "path": "docs/from-install-to-deploy.md",
167
+ "example": null
168
+ },
162
169
  {
163
170
  "slug": "gates",
164
171
  "title": "Gates",
@@ -229,6 +236,13 @@
229
236
  "path": "docs/inertia.md",
230
237
  "example": "docs/examples/inertia.ts"
231
238
  },
239
+ {
240
+ "slug": "keel-cloud",
241
+ "title": "Keel Cloud (deploy from MCP)",
242
+ "summary": "Keel Cloud hosts your Keel apps on .keeljs.cloud — preview and production Workers, D1, secrets vault, and full export (git + SQL).",
243
+ "path": "docs/keel-cloud.md",
244
+ "example": null
245
+ },
232
246
  {
233
247
  "slug": "locks",
234
248
  "title": "Locks",
package/docs/ai.md CHANGED
@@ -5,8 +5,11 @@ AI-facing surface: an MCP server, machine-readable docs (`llms.txt` /
5
5
  `llms-full.txt`), an agent playbook (`AGENTS.md`), and code generators an agent
6
6
  can drive directly.
7
7
 
8
- If you only read one thing: point your agent at the [MCP server](#the-mcp-server)
9
- and have it call `keel_overview` first.
8
+ If you only read one thing: follow
9
+ [From install to deploy](./from-install-to-deploy.md). To **deploy on
10
+ `*.keeljs.cloud` from your IDE**, see [Keel Cloud (deploy from MCP)](./keel-cloud.md).
11
+ Then point your agent at the [MCP server](#the-mcp-server) and call
12
+ `keel_overview` first.
10
13
 
11
14
  ## Why this exists
12
15
 
@@ -62,8 +65,12 @@ package, so it always matches your installed version.
62
65
  | `keel_scaffold` | Generate a controller/provider/middleware/factory/seeder/job/notification/transformer stub. Returns code + target path — it does **not** write to disk. |
63
66
 
64
67
  When `KEEL_CLOUD_TOKEN` (and optional `KEEL_CLOUD_URL`) is set, Cloud tools are
65
- also registered. Create a token at `/tokens` on the control plane — the plaintext
66
- looks like `keel_<selector>.<verifier>`.
68
+ also registered **create, preview, and publish sites on `*.keeljs.cloud`** from
69
+ the same MCP server. Step-by-step:
70
+ **[Keel Cloud (deploy from MCP)](./keel-cloud.md)**.
71
+
72
+ Create a token at `/tokens` on [app.keeljs.cloud](https://app.keeljs.cloud) — the
73
+ plaintext looks like `keel_<selector>.<verifier>`.
67
74
 
68
75
  | Tool | What it does |
69
76
  |------|--------------|
@@ -113,11 +120,13 @@ minting a token if you need a different team context.
113
120
 
114
121
  ### A typical Keel Cloud loop
115
122
 
123
+ Full walkthrough: [Keel Cloud (deploy from MCP)](./keel-cloud.md).
124
+
116
125
  1. `keel_cloud_create_site { name: "Acme", preset: "app" }`
117
126
  2. Edit the returned `storage_path` (real Keel app + git)
118
127
  3. `keel_cloud_set_secret` for env the Worker needs
119
- 4. `keel_cloud_preview { site_id }`
120
- 5. `keel_cloud_publish { site_id, confirm: true }` after the user approves
128
+ 4. `keel_cloud_preview { site_id }` → `preview-{slug}.keeljs.cloud`
129
+ 5. `keel_cloud_publish { site_id, confirm: true }` `{slug}.keeljs.cloud`
121
130
  6. Optional Pro: `keel_cloud_set_custom_domain { hostname, attach: true }`
122
131
  7. Escape hatch anytime: `keel_cloud_export` + `keel_cloud_export_sql`
123
132
 
package/docs/changelog.md CHANGED
@@ -4,6 +4,26 @@ All notable changes to Keel are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project aims to
5
5
  adhere to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.83.7] — 2026-07-13
8
+
9
+ ### Documentation
10
+
11
+ - **[Keel Cloud (deploy from MCP)](./docs/keel-cloud.md)** — advertise and walk
12
+ through creating / previewing / publishing sites on `*.keeljs.cloud` from
13
+ `keel-mcp`. Linked from the install guide, AI guide, README, and MCP overview.
14
+
15
+ [0.83.7]: https://github.com/shaferllc/keel/releases/tag/v0.83.7
16
+
17
+ ## [0.83.6] — 2026-07-13
18
+
19
+ ### Documentation
20
+
21
+ - **[From install to deploy](./docs/from-install-to-deploy.md)** — end-to-end
22
+ guide: `create-keeljs` → local dev → Cloudflare self-deploy → optional Keel
23
+ Cloud + MCP. Getting Started and the README now lead with the generator.
24
+
25
+ [0.83.6]: https://github.com/shaferllc/keel/releases/tag/v0.83.6
26
+
7
27
  ## [0.83.5] — 2026-07-13
8
28
 
9
29
  ### Added
@@ -0,0 +1,157 @@
1
+ # From install to deploy
2
+
3
+ One path from zero to a live Keel app — locally, on Cloudflare yourself, or on
4
+ **Keel Cloud** with an AI agent. Pick the track that matches how you want to
5
+ ship; everything else is optional.
6
+
7
+ ```text
8
+ create-keeljs → npm run dev → (optional MCP) → deploy
9
+
10
+ Keel Cloud (optional)
11
+ ```
12
+
13
+ ## Requirements
14
+
15
+ - Node.js **≥ 22**
16
+ - npm
17
+ - For self-hosted edge deploys: a [Cloudflare](https://dash.cloudflare.com) account
18
+ and [Wrangler](https://developers.cloudflare.com/workers/wrangler/) (ships with
19
+ the kits as a devDependency)
20
+ - For Keel Cloud: an invite / allowlisted email at [app.keeljs.cloud](https://app.keeljs.cloud)
21
+ during private alpha
22
+
23
+ ## 1. Create an app
24
+
25
+ ```bash
26
+ npm create keeljs@latest my-app # full-stack "app" preset (default)
27
+ # npm create keeljs@latest my-api -- --preset api
28
+ # npm create keeljs@latest my-saas -- --preset saas
29
+ # npm create keeljs@latest bare -- --preset minimal
30
+ cd my-app
31
+ npm install
32
+ cp .env.example .env # if the kit didn't already
33
+ ```
34
+
35
+ | Preset | Use when |
36
+ |--------|----------|
37
+ | `minimal` | Hello-world / learning — routes, a view, Tailwind. No database. |
38
+ | `api` | JSON API — models, migrations, token auth, OpenAPI, tests. |
39
+ | `app` *(default)* | Product with views, sessions, register/login, password reset, 2FA. |
40
+ | `saas` | Multi-tenant product — teams, roles, invitations, billing. |
41
+
42
+ Templates live **inside** `@shaferllc/keel`, so the kit version matches the
43
+ framework version you just installed. Details: [Starter kits](./starter-kits.md).
44
+
45
+ ## 2. Run it locally
46
+
47
+ ```bash
48
+ npm run migrate # if the preset has a database (api / app / saas)
49
+ npm run dev # http://localhost:3000 — Node + local SQLite
50
+ ```
51
+
52
+ Useful next commands:
53
+
54
+ ```bash
55
+ npm run keel -- routes # what is mounted
56
+ npm run keel -- make:controller Post # scaffold, then wire a route
57
+ npm test
58
+ npm run typecheck
59
+ ```
60
+
61
+ Local tip: `DB_CONNECTION` defaults to a SQLite file. Switching drivers later is
62
+ config only — see [Database](./database.md) and [Starter kits](./starter-kits.md).
63
+
64
+ For a guided first hour inside the codebase (routes, controllers, views, config),
65
+ read [Getting Started](./getting-started.md).
66
+
67
+ ## 3. Optional — AI agents (local)
68
+
69
+ Keel is designed to be written with an agent. Point Cursor / Claude Code at the
70
+ MCP server that ships with the package:
71
+
72
+ ```json
73
+ {
74
+ "mcpServers": {
75
+ "keel": {
76
+ "command": "npx",
77
+ "args": ["-y", "keel-mcp"]
78
+ }
79
+ }
80
+ }
81
+ ```
82
+
83
+ Then have the agent call `keel_overview` first. It can search docs, look up the
84
+ public API, and scaffold controllers/jobs/… without inventing imports.
85
+
86
+ Full map: [Building with AI](./ai.md).
87
+
88
+ ## 4. Deploy yourself (Cloudflare Workers)
89
+
90
+ Every kit includes `wrangler.jsonc`, a `worker.ts` entry, and `npm run deploy`.
91
+ You own the Cloudflare account and the hostname.
92
+
93
+ ```bash
94
+ # one-time
95
+ npx wrangler login
96
+ npx wrangler d1 create my-app # paste database_id into wrangler.jsonc
97
+
98
+ # ship
99
+ npm run deploy # css:build + wrangler deploy
100
+ ```
101
+
102
+ Migrations against remote D1 use the HTTP driver from your laptop / CI — the
103
+ binding only exists inside the Worker. Set Cloudflare API credentials as
104
+ documented in [Database](./database.md) (D1 HTTP) and your kit’s README.
105
+
106
+ Edge preview without deploying:
107
+
108
+ ```bash
109
+ npm run dev:edge # wrangler + local D1
110
+ ```
111
+
112
+ Hosting helpers (hostname utils, SQL dump, secrets encryption) live in
113
+ [`@shaferllc/keel/hosting`](./hosting.md) if you build your own control plane.
114
+
115
+ ## 5. Optional — Keel Cloud (`*.keeljs.cloud`)
116
+
117
+ Ship without owning a Cloudflare account: **Keel Cloud** creates the site,
118
+ runs preview/production Workers on `*.keeljs.cloud`, vaults secrets, and lets
119
+ you export git + SQL anytime — driven from the **same `keel-mcp`** you already
120
+ use for docs.
121
+
122
+ **Dedicated guide:** [Keel Cloud (deploy from MCP)](./keel-cloud.md).
123
+
124
+ Quick path:
125
+
126
+ 1. Sign up at [app.keeljs.cloud](https://app.keeljs.cloud) → mint a token at `/tokens`
127
+ 2. Add `KEEL_CLOUD_TOKEN` (+ `KEEL_CLOUD_URL`) to your MCP config
128
+ 3. Agent: `keel_cloud_create_site` → edit `storage_path` → `keel_cloud_preview` →
129
+ `keel_cloud_publish { confirm: true }`
130
+
131
+ Use Cloud when you want the platform to own deploys and hostnames. Skip it when
132
+ you already have Cloudflare / your own pipeline (§4). Don’t mix Cloud and
133
+ self-host for the same app.
134
+
135
+ ## Which path should I pick?
136
+
137
+ | Goal | Path |
138
+ |------|------|
139
+ | Learn Keel / ship a side project on your CF account | §§1–4 |
140
+ | Build with an agent in your IDE, deploy yourself | §§1–4 + §3 |
141
+ | Let the platform host preview/prod on `*.keeljs.cloud` via MCP | [Keel Cloud](./keel-cloud.md) |
142
+ | Multi-tenant SaaS with billing | Preset `saas`, then §4 or §5 |
143
+
144
+ Cloud **create_site** scaffolds a kit the same way `create-keeljs` does — you do
145
+ not need both for the same app. Use `create-keeljs` for apps you own end-to-end;
146
+ use Cloud when you want hosted preview/publish under `*.keeljs.cloud`.
147
+
148
+ ## Where next
149
+
150
+ - [Keel Cloud (deploy from MCP)](./keel-cloud.md) — create / preview / publish
151
+ on `*.keeljs.cloud` from `keel-mcp`
152
+ - [Getting Started](./getting-started.md) — first route, controller, view
153
+ - [Starter kits](./starter-kits.md) — presets and the Node/edge seam
154
+ - [Building with AI](./ai.md) — MCP tools (local + Cloud)
155
+ - [Hosting](./hosting.md) — Cloudflare / dump / secrets primitives
156
+ - [Accounts](./accounts.md) · [Teams](./teams.md) · [Billing](./billing.md) — what
157
+ `app` / `saas` already mount
@@ -15,32 +15,20 @@ Keel targets modern Node and web-standard APIs, so a current runtime matters —
15
15
 
16
16
  ## Install
17
17
 
18
- Keel ships as two repos: the **framework** (`@shaferllc/keel`, published to
19
- npm) and a **starter app** (`shaferllc/keel-app`) you build on. Which path you
20
- take depends on whether you're starting fresh or bolting Keel onto something
21
- that already exists. See [Architecture](./architecture.md#two-repos-library-and-starter)
22
- for why it's split this way.
23
-
24
- ### From the starter (recommended)
25
-
26
- The fastest route to a running app is the starter — a working skeleton with the
27
- folders, config, and scripts already wired:
18
+ The fastest path to a running app is the generator it copies a curated kit
19
+ from the same `@shaferllc/keel` version you install, so the template cannot lag
20
+ the framework:
28
21
 
29
22
  ```bash
30
- git clone https://github.com/shaferllc/keel-app.git my-app
23
+ npm create keeljs@latest my-app
31
24
  cd my-app
32
25
  npm install
26
+ npm run dev # http://localhost:3000
33
27
  ```
34
28
 
35
- The starter depends on `@shaferllc/keel`, so you pick up framework updates with
36
- an ordinary `npm update @shaferllc/keel` your app code in `app/` stays put.
37
-
38
- A fresh checkout ships with a working `.env`. To start from the template
39
- instead:
40
-
41
- ```bash
42
- cp .env.example .env
43
- ```
29
+ For the full journey (presets, Cloudflare deploy, optional Keel Cloud + MCP),
30
+ see **[From install to deploy](./from-install-to-deploy.md)**. Kit details:
31
+ [Starter kits](./starter-kits.md).
44
32
 
45
33
  ### Into an existing app
46
34
 
@@ -57,22 +45,24 @@ import { Application, Router, config } from "@shaferllc/keel/core";
57
45
  ```
58
46
 
59
47
  You supply the four convention folders yourself — `app/`, `config/`, `routes/`,
60
- `bootstrap/` — plus an entry that calls `createApplication()`. The starter's
48
+ `bootstrap/` — plus an entry that calls `createApplication()`. A generated kit’s
61
49
  `bootstrap/app.ts` is the reference; copy it and trim to taste.
62
50
 
63
51
  ### Hacking on the framework itself
64
52
 
65
- To work on Keel proper, clone the framework repo — it carries an example app you
66
- can run directly:
53
+ To work on Keel proper, clone the framework repo:
67
54
 
68
55
  ```bash
69
56
  git clone https://github.com/shaferllc/keel.git
70
57
  cd keel
71
58
  npm install
72
- npm run dev # example app on http://localhost:3000
73
- npm run build # compile the package to dist/
59
+ npm test
60
+ npm run typecheck
74
61
  ```
75
62
 
63
+ Generate a disposable app against your checkout with
64
+ `npm create keeljs@latest …` and point its dependency at `file:../keel`.
65
+
76
66
  ## Run the server
77
67
 
78
68
  ```bash
@@ -267,9 +257,10 @@ unsure what's mounted. [The Console](./console.md) lists every command.
267
257
  ## Where to go next
268
258
 
269
259
  You now have the shape of a Keel app: routes point at controllers, controllers
270
- render views and read config, and the console scaffolds the pieces. The deep
271
- guides pick up from here:
260
+ render views and read config, and the console scaffolds the pieces.
272
261
 
262
+ - **[From install to deploy](./from-install-to-deploy.md)** — presets, Cloudflare,
263
+ optional Keel Cloud + MCP
273
264
  - [Architecture](./architecture.md) — how boot, the container, and the request
274
265
  lifecycle fit together
275
266
  - [The Service Container](./container.md) — how dependency injection works
@@ -284,6 +275,7 @@ guides pick up from here:
284
275
  the active-record layer on top of it
285
276
  - [Configuration](./configuration.md) and [The Console](./console.md) — settings
286
277
  and commands
278
+ - [Building with AI](./ai.md) — MCP docs + Cloud tools
287
279
 
288
280
  When something isn't documented, open the source — the whole framework is a few
289
281
  hundred readable lines in `src/core/`, and [Built on Hono](./hono.md) explains