[Worker Name]
An edge API on Cloudflare Workers. Hono in front, D1 for state, KV for sessions.
Source of truth
Wrangler-driven. wrangler deploy from local pushes the worker. The deployed version is canonical. Preview deployments via wrangler versions deploy per branch.
Tech stack
TypeScript on Cloudflare Workers runtime (V8 isolates, not Node). Hono 4 for routing (small, fast, edge-native). D1 for SQL at the edge (SQLite-compatible). KV for sessions + cache. R2 for object storage. Durable Objects only when you need strict consistency (chat rooms, counters, locks). Wrangler for dev + deploy.
Deploy
wrangler deploy for production. wrangler versions deploy for previews. Routes assigned via wrangler.toml (yourdomain.com/api/*).
File map
src/index.tsHono app, route mounting, env typingsrc/routes/route modulessrc/middleware/auth, CORS, request IDsrc/db/D1 query helpers + migrations (migrations/0001_init.sqletc)src/durable-objects/DO classes (if used)wrangler.tomlbindings (D1, KV, R2, DOs), routes, envworker-configuration.d.tsauto-generated Env types
.env / wrangler bindings
D1_DBCloudflare D1 database bindingSESSIONSKV namespace binding for sessionsR2_BUCKET(if needed)JWT_SECRETset viawrangler secret put JWT_SECRETSTRIPE_SECRETif relevant, also viawrangler secret put
Hard rules
- Runtime is V8 isolate, NOT Node.
fs,cryptoNode module, rawBufferdo not exist. Use Web APIs. - D1 queries via prepared statements only (
.prepare().bind(...).all()). String concat is SQL injection. - KV reads are eventually consistent globally. Don't use KV for anything that needs read-your-writes.
- Secrets via
wrangler secret put. Never inwrangler.toml(committed file). - CPU limit on Workers: 50ms paid, 10ms free tier. Heavy work goes to a separate Worker or Queue.
- Migrations applied with
wrangler d1 migrations apply DB_NAME.
Recent significant changes
- 2026-05-04: Scaffolded. Locked: Hono over itty-router (more batteries), D1 over Postgres-via-fetch (latency), KV for sessions (sub-ms reads at the edge).
Next session: start here
npm create cloudflare@latestif starting fresh, or clone this CLAUDE.md into existing project.wrangler d1 create your-db. Updatewrangler.tomlwith returned ID.wrangler d1 migrations create your-db init. Write schema.wrangler devto test locally.wrangler deployonce you have a route to deploy.