cloudflare-worker-builder
jezweb/claude-skills
Scaffold and deploy Cloudflare Workers with Hono routing, Vite, and Static Assets.
What is cloudflare-worker-builder?
Generates a production-ready Cloudflare Worker project with Hono web framework, Vite dev server, and static asset serving. Use this when building API backends, SPAs, or full-stack apps on Cloudflare's edge platform, or when configuring D1 databases, R2 storage, KV caches, and queue bindings.
- Scaffold a new Worker project with TypeScript, Hono routing, and Vite dev server
- Configure and bind Cloudflare resources (D1, R2, KV, Queues) via wrangler.jsonc
- Set up static asset serving with SPA fallback and API route priority
- Deploy to Cloudflare Workers with a single command
- Troubleshoot common issues: export syntax, route conflicts, HMR, and deployment failures
How to install cloudflare-worker-builder
npx skills add https://github.com/jezweb/claude-skills --skill cloudflare-worker-builder- Node.js and npm installed
- Cloudflare account with Workers enabled
- Wrangler CLI (installed via npm create cloudflare)
- Basic familiarity with TypeScript and HTTP APIs
How to use cloudflare-worker-builder
- 1.Run npm create cloudflare to initialize a new Worker project
- 2.Answer questions about your app type, data storage, and auth needs
- 3.Copy and customize asset files (wrangler.jsonc, vite.config.ts, src/index.ts) from the skill
- 4.Add bindings to wrangler.jsonc for D1, R2, KV, or Queues as needed
- 5.Run npm run dev to test locally at http://localhost:8787
- 6.Run wrangler deploy to push to production
Use cases
- Build a REST API backend with database and file storage on Cloudflare Workers
- Create a full-stack SPA with Hono routing and static asset serving
- Set up a serverless todo app with D1 database and KV caching
- Configure scheduled/cron jobs alongside HTTP handlers
- Deploy a landing page or documentation site with worker-first routing
- Full-stack developers building on Cloudflare Workers
- Backend engineers deploying APIs to edge infrastructure
- Teams migrating from traditional servers to serverless
- Developers needing rapid scaffolding with best-practice patterns
cloudflare-worker-builder FAQ
Use `export default app` directly. Do not use `export default { fetch: app.fetch }` unless you also need scheduled handlers, as it causes 'Cannot read properties of undefined' errors.
The SPA fallback is intercepting API requests. Add `"run_worker_first": ["/api/*"]` to the assets config in wrangler.jsonc to prioritize worker routes over static fallback.
No. Wrangler 4.45+ auto-provisions resources on first deploy if you specify explicit names in wrangler.jsonc bindings.
Switch to the explicit export pattern `export default { fetch: app.fetch, scheduled: async (event, env, ctx) => { ... } }` and add a `[triggers.crons]` section to wrangler.jsonc.
It integrates Cloudflare's build tooling with Vite, enabling HMR during local dev and proper bundling for Workers. Always set the `main` field in wrangler.jsonc for the plugin to work.
Full instructions (SKILL.md)
Source of truth, from jezweb/claude-skills.
name: cloudflare-worker-builder description: "Scaffold and deploy Cloudflare Workers with Hono routing, Vite plugin, and Static Assets. Describe project, scaffold structure, configure bindings, deploy. Use whenever the user wants to create a Worker project, set up Hono on Cloudflare, configure D1 / R2 / KV / Queues bindings, or troubleshoot Worker export syntax, API route conflicts, HMR issues, or deployment failures." compatibility: claude-code-only
Cloudflare Worker Builder
Scaffold a working Cloudflare Worker project from a brief description. Produces a deployable project with Hono routing, Vite dev server, and Static Assets.
Workflow
Step 1: Understand the Project
Ask about the project to choose the right bindings and structure:
- What does the app do? (API only, SPA + API, landing page)
- What data storage? (D1 database, R2 files, KV cache, none)
- Auth needed? (Clerk, better-auth, none)
- Custom domain or workers.dev subdomain?
A brief like "todo app with database" is enough to proceed.
Step 2: Scaffold the Project
npm create cloudflare@latest my-worker -- --type hello-world --ts --git --deploy false --framework none
cd my-worker
npm install hono
npm install -D @cloudflare/vite-plugin vite
Copy and customise the asset files from this skill's assets/ directory:
wrangler.jsonc— Worker configurationvite.config.ts— Vite + Cloudflare pluginsrc/index.ts— Hono app with Static Assets fallbackpackage.json— Scripts and dependenciestsconfig.json— TypeScript configpublic/index.html— SPA entry point
Step 3: Configure Bindings
Add bindings to wrangler.jsonc based on project needs. Wrangler 4.45+ auto-provisions resources on first deploy — always specify explicit names:
{
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2025-11-11",
"assets": {
"directory": "./public/",
"binding": "ASSETS",
"not_found_handling": "single-page-application",
"run_worker_first": ["/api/*"]
},
// Add as needed:
"d1_databases": [{ "binding": "DB", "database_name": "my-app-db" }],
"r2_buckets": [{ "binding": "STORAGE", "bucket_name": "my-app-files" }],
"kv_namespaces": [{ "binding": "CACHE", "title": "my-app-cache" }]
}
Step 4: Deploy
npm run dev # Local dev at http://localhost:8787
wrangler deploy # Production deploy
Critical Patterns
Export Syntax
// CORRECT — use this pattern
export default app
// WRONG — causes "Cannot read properties of undefined"
export default { fetch: app.fetch }
Source: honojs/hono #3955
Static Assets + API Routes
Without run_worker_first, SPA fallback intercepts API routes and returns index.html instead of JSON:
"assets": {
"not_found_handling": "single-page-application",
"run_worker_first": ["/api/*"] // CRITICAL
}
Source: workers-sdk #8879
Vite Config
import { defineConfig } from 'vite'
import { cloudflare } from '@cloudflare/vite-plugin'
export default defineConfig({ plugins: [cloudflare()] })
Always set the main field in wrangler.jsonc — the Vite plugin needs it.
Scheduled/Cron Handlers
When adding cron triggers, switch to explicit export:
export default {
fetch: app.fetch,
scheduled: async (event, env, ctx) => { /* ... */ }
}
Reference Files
Read these for detailed troubleshooting:
references/common-issues.md— 10 documented issues with sources and fixesreferences/architecture.md— Route priority, caching, Workers RPCreferences/deployment.md— CI/CD, auto-provisioning, gradual rollouts
Related skills
More from jezweb/claude-skills and the wider catalog.

color-palette
Generate accessible 11-shade colour palettes and Tailwind themes from a single brand hex.

d1-drizzle-schema
Generate Drizzle ORM schemas for Cloudflare D1 with correct D1-specific patterns and migrations.

d1-migration
Cloudflare D1 migration workflow: generate with Drizzle, inspect SQL for gotchas, apply to local and remote, fix stuck migrations, handle partial failures. Use when running migrations, fixing migration errors, or setting up D1 schemas.

db-seed
Generate database seed scripts with realistic sample data. Reads Drizzle schemas or SQL migrations, respects foreign key ordering, produces idempotent TypeScript or SQL seed files. Handles D1 batch limits, unique constraints, and domain-appropriate data. Use when populating dev/demo/test databases. Triggers: 'seed database', 'seed data', 'sample data', 'populate database', 'db seed', 'test data', 'demo data', 'generate fixtures'.

deep-research
Deep research and discovery before building something new. Explores local projects for reusable code, researches competitors, reads forums and reviews, analyses plugin ecosystems, investigates technical options, and produces a comprehensive research brief. Three depths: focused (30 min), wide (1-2 hours), deep (3-6 hours). Triggers: 'research this', 'discovery', 'explore the space', 'what should I build', 'competitive analysis', 'before I start building', 'research before coding'. Not for cited fact-checking research reports (a separate harness does those); this is pre-build product discovery.

design-loop
Autonomous multi-page site builder using a baton-passing loop. Each iteration reads a task from .design/next-prompt.md, generates a page in HTML/Tailwind, integrates it into the site, verifies visually, then writes the next task to keep the loop alive. Use whenever the user asks to build an entire site autonomously, build all pages of a site, generate multiple pages in sequence, or run a 'design loop' / 'baton loop' / 'autonomous site build' — even if they say 'just keep going' or 'build the next page' or 'next page' mid-flow.