Cloudflare Workers Ecosystem Expert (2026 Edition)
English
Orchestration & Integration
Connects and orchestrates with domain skills:
- Edge Backend & APIs:
js-backend-expert(Hono v4 on Workers, V8 isolates),api-design-expert(edge REST & RPC endpoints), andsse-websocket-streaming-expert(Durable Objects WebSockets). - Edge Storage & DBs:
database-orm-expert(Drizzle with D1, Hyperdrive pooling),file-upload-media-expert(R2 presigned URLs), andvector-db-rag-expert(Vectorize & Workers AI). - Frontend & Cloud:
cloud-hosting-expert(custom domains, CDN rules),senior-frontend(Workers Static Assets), andanti-slop(clean edge architecture without node:fs polyfill traps). - Lifecycle & DevOps:
ci-cd-devops-architect(GitHub Actions Wrangler deployments),brainstorming, andzero-to-prod-orchestrator(Phase 4: Backend & APIs).
Description
Expert guide for building full-stack edge applications using the Cloudflare Workers ecosystem. Covers Workers runtime, D1 (SQLite at edge), KV (key-value store), R2 (S3-compatible object storage), Queues (message queues), Durable Objects (stateful edge), Hyperdrive (database connection pooling), Workers AI (inference at edge), and Wrangler CLI for development and deployment.
Trigger Conditions
- Building serverless edge applications on Cloudflare Workers.
- Using D1 as an edge SQLite database.
- Storing files with R2 (S3-compatible, zero egress fees).
- Implementing KV for distributed key-value caching.
- Building stateful applications with Durable Objects.
- Setting up Queues for async job processing at the edge.
- Connecting to external databases via Hyperdrive connection pooling.
- Running AI inference at the edge with Workers AI.
- Deploying with Wrangler CLI and
wrangler.tomlconfiguration. - Using Hono v4 as the web framework on Workers.
What's New in 2026
Cloudflare Workers — Platform Updates
- D1 GA: SQLite at the edge — fully production-ready with point-in-time recovery, read replicas, and up to 10GB databases.
- Queues GA: Reliable message queues for async processing, dead letter queues, and batch consumption.
- Hyperdrive GA: Connection pooling for PostgreSQL, MySQL — eliminates cold connection latency from Workers.
- Workers AI Stable: Run LLM inference (Llama 3, Mistral, embedding models) at the edge with zero cold starts.
- Durable Objects Hibernation: Cost-effective stateful edge — objects hibernate when idle, wake instantly on request.
- Workers Static Assets: Serve static files directly from Workers without separate Pages deployment.
- Node.js Compatibility Mode: Import Node.js built-in modules (
node:crypto,node:buffer,node:streams) directly in Workers.
Core Architecture Patterns
1. Project Setup (Wrangler + Hono)
bash# Create new Workers project with Hono npm create cloudflare@latest my-app -- --framework=hono cd my-app # wrangler.toml configuration
toml# wrangler.toml name = "my-app" compatibility_date = "2026-10-01" compatibility_flags = ["nodejs_compat_v2"] # D1 Database [[d1_databases]] binding = "DB" database_name = "my-app-db" database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # KV Namespace [[kv_namespaces]] binding = "CACHE" id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # R2 Bucket [[r2_buckets]] binding = "STORAGE" bucket_name = "my-app-assets" # Queue Producer [[queues.producers]] queue = "email-queue" binding = "EMAIL_QUEUE" # Queue Consumer [[queues.consumers]] queue = "email-queue" max_batch_size = 10 max_batch_timeout = 30 # Durable Object [[durable_objects.bindings]] name = "RATE_LIMITER" class_name = "RateLimiter" [[migrations]] tag = "v1" new_classes = ["RateLimiter"] # Hyperdrive (PostgreSQL connection pooling) [[hyperdrive]] binding = "HYPERDRIVE" id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # Workers AI [ai] binding = "AI"
2. Hono Application on Workers
typescriptimport { Hono } from 'hono'; import { cors } from 'hono/cors'; import { bearerAuth } from 'hono/bearer-auth'; type Bindings = { DB: D1Database; CACHE: KVNamespace; STORAGE: R2Bucket; EMAIL_QUEUE: Queue; AI: Ai; HYPERDRIVE: Hyperdrive; }; const app = new Hono<{ Bindings: Bindings }>(); app.use('*', cors()); // D1 SQLite query app.get('/api/products', async (c) => { const { results } = await c.env.DB.prepare( 'SELECT id, name, price FROM products WHERE active = 1 ORDER BY created_at DESC LIMIT 50' ).all(); return c.json(results); }); // KV cache-aside pattern app.get('/api/config/:key', async (c) => { const key = c.req.param('key'); const cached = await c.env.CACHE.get(key, 'json'); if (cached) return c.json(cached); const { results } = await c.env.DB.prepare( 'SELECT value FROM config WHERE key = ?' ).bind(key).all(); if (results.length > 0) { await c.env.CACHE.put(key, JSON.stringify(results[0]), { expirationTtl: 3600 }); return c.json(results[0]); } return c.notFound(); }); // R2 file upload app.post('/api/upload', async (c) => { const formData = await c.req.formData(); const file = formData.get('file') as File; const key = `uploads/${Date.now()}-${file.name}`; await c.env.STORAGE.put(key, file.stream(), { httpMetadata: { contentType: file.type }, }); return c.json({ key, url: `/files/${key}` }); }); // Queue producer — send async job app.post('/api/send-email', async (c) => { const body = await c.req.json(); await c.env.EMAIL_QUEUE.send({ to: body.email, subject: body.subject, template: body.template, }); return c.json({ status: 'queued' }); }); // Workers AI — text generation app.post('/api/ai/generate', async (c) => { const { prompt } = await c.req.json(); const response = await c.env.AI.run('@cf/meta/llama-3.1-8b-instruct', { messages: [{ role: 'user', content: prompt }], }); return c.json(response); }); export default app; // Queue consumer handler export default { ...app, async queue(batch: MessageBatch, env: Bindings): Promise<void> { for (const message of batch.messages) { const { to, subject, template } = message.body as EmailJob; await sendEmail(to, subject, template); // your email sending logic message.ack(); } }, };
3. D1 Migrations
bash# Create migration wrangler d1 migrations create my-app-db create_products # Write SQL migration # migrations/0001_create_products.sql
sqlCREATE TABLE products ( id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))), name TEXT NOT NULL, price REAL NOT NULL CHECK(price >= 0), description TEXT DEFAULT '', active INTEGER DEFAULT 1, created_at TEXT DEFAULT (datetime('now')), updated_at TEXT DEFAULT (datetime('now')) ); CREATE INDEX idx_products_active ON products(active); CREATE INDEX idx_products_created ON products(created_at DESC);
bash# Apply migration wrangler d1 migrations apply my-app-db
4. Durable Objects (Stateful Edge)
typescriptexport class RateLimiter implements DurableObject { private requests: number[] = []; private readonly limit = 100; private readonly windowMs = 60_000; constructor(private state: DurableObjectState, private env: Bindings) {} async fetch(request: Request): Promise<Response> { const now = Date.now(); this.requests = this.requests.filter(t => now - t < this.windowMs); if (this.requests.length >= this.limit) { return new Response('Rate limit exceeded', { status: 429 }); } this.requests.push(now); await this.state.storage.put('requests', this.requests); return new Response('OK', { headers: { 'X-RateLimit-Remaining': String(this.limit - this.requests.length), 'X-RateLimit-Limit': String(this.limit), }, }); } }
5. Hyperdrive (External Database Connection)
typescriptimport { Client } from 'pg'; app.get('/api/users', async (c) => { const client = new Client({ connectionString: c.env.HYPERDRIVE.connectionString }); await client.connect(); const { rows } = await client.query('SELECT id, email, name FROM users LIMIT 100'); await client.end(); return c.json(rows); });
Performance Best Practices
- Use D1 for read-heavy workloads — SQLite at edge with automatic read replicas.
- KV for hot cache — Sub-millisecond reads for configuration, feature flags, and session data.
- R2 for assets — Zero egress fees, S3-compatible API.
- Queues for async work — Decouple request handling from background processing.
- Hyperdrive for external DBs — Connection pooling eliminates cold connection latency.
- Workers AI for inference — Run models at edge without managing GPU infrastructure.
- Use
waitUntil()— For fire-and-forget operations (logging, analytics) after response is sent.
Anti-Patterns to Avoid
- Storing large blobs in KV — Use R2 for files >25MB. KV is for small values (<25MB).
- Opening new DB connections per request without Hyperdrive — Cold connections add 50-200ms latency.
- Not using prepared statements with D1 — Always use
.prepare().bind()to prevent SQL injection. - Synchronous heavy computation — Workers have a CPU time limit (10-30ms for free, 30s for paid). Offload to Queues.
- Ignoring
wrangler dev --remote— Use remote mode to test D1, R2, and KV with real data.
Sovereign Execution, Token Efficiency & Invariants
| Dimension | Sovereign Mandate & Deterministic Contract |
|---|---|
| Frontier Model Cascade | Medium / High (GPT-5.6 Sol Medium, Gemini 4 Argon, Claude Sonnet 5.5 High, Grok 4.7 High Fast) |
| Availability Fallback | Gemini 4 Argon/Pro -> Gemini 3.8 Flash; Claude Opus 5.5 -> Claude Opus 4.6 (Zero unhandled missing-model errors) |
| KV-Cache & Token Protocol | Pin static instructions & schemas at prompt prefix (kv-cache-prefix-optimizer); pass surgical CONTEXT_MAP.md slices (<250 tokens/call) during Swarm Fan-Out |
| SaaT CLI & MCP Dispatch | CLI: vibes skill exec cloudflare-workers-expert <audit|eval|verify|generate|blueprint> / MCP: vibes_skill_dispatch, vibes_ast_query, vibes_compile_cache, vibes_optimize_budget, vibes_verify_gate |
| NFR & Anti-Slop Invariants | P99 API Gateway Latency < 85ms, OpenAPI 3.1 / TypeSpec strict schema parity, RFC 9457 Problem Details error contracts, Idempotency-Key enforcement; 100% complete zero-placeholder output verified via node scripts/check-anti-slop.js --strict |
Bahasa Indonesia
Integrasi Orkestrasi
Terhubung dan mengorkestrasi bersama skill domain:
- Backend Edge & API:
js-backend-expert(Hono v4 di Workers, V8 isolates),api-design-expert(endpoint REST & RPC di edge), dansse-websocket-streaming-expert(WebSocket Durable Objects). - Penyimpanan Edge & Database:
database-orm-expert(Drizzle dengan D1, pooling Hyperdrive),file-upload-media-expert(presigned URL R2), danvector-db-rag-expert(Vectorize & Workers AI). - Frontend & Cloud:
cloud-hosting-expert(custom domain, aturan CDN),senior-frontend(Workers Static Assets), dananti-slop(arsitektur edge bersih tanpa jebakan polyfill node:fs). - Siklus Hidup & DevOps:
ci-cd-devops-architect(deployment Wrangler via GitHub Actions),brainstorming, danzero-to-prod-orchestrator(Fase 4: Backend & APIs).
Deskripsi
Panduan ahli untuk membangun aplikasi full-stack edge menggunakan ekosistem Cloudflare Workers. Mencakup runtime Workers, D1 (SQLite di edge), KV (key-value store), R2 (object storage kompatibel S3), Queues (antrean pesan), Durable Objects (stateful edge), Hyperdrive (connection pooling database), Workers AI (inferensi di edge), dan Wrangler CLI untuk pengembangan dan deployment.
Kondisi Pemicu
- Membangun aplikasi edge serverless di Cloudflare Workers.
- Menggunakan D1 sebagai database SQLite di edge.
- Menyimpan file dengan R2 (kompatibel S3, tanpa biaya egress).
- Mengimplementasikan KV untuk caching key-value terdistribusi.
- Membangun aplikasi stateful dengan Durable Objects.
- Menyiapkan Queues untuk pemrosesan job async di edge.
Pola Arsitektur Inti
1. Ekosistem Cloudflare Workers
| Layanan | Fungsi | Analogi |
|---|---|---|
| Workers | Runtime serverless di edge (V8 isolates) | AWS Lambda@Edge |
| D1 | Database SQLite di edge | PlanetScale / Turso |
| KV | Key-value store terdistribusi | Redis (read-heavy) |
| R2 | Object storage (S3-compatible) | AWS S3 (tanpa biaya egress) |
| Queues | Antrean pesan | AWS SQS / BullMQ |
| Durable Objects | State persisten di edge | Stateful actors |
| Hyperdrive | Connection pooling ke DB eksternal | PgBouncer di edge |
| Workers AI | Inferensi model AI di edge | Replicate / Together AI |
2. Praktik Terbaik
- Gunakan D1 untuk workload read-heavy di edge.
- Gunakan KV untuk cache panas (konfigurasi, feature flags, sesi).
- Gunakan R2 untuk aset (tanpa biaya egress, API kompatibel S3).
- Gunakan Queues untuk pekerjaan async (email, notifikasi, pemrosesan gambar).
- Gunakan Hyperdrive untuk koneksi ke database PostgreSQL/MySQL eksternal.
- Gunakan
waitUntil()untuk operasi fire-and-forget (logging, analitik) setelah respons dikirim.
Matriks Eksekusi Berdaulat, Efisiensi Token & Invarian
| Dimensi | Mandat Berdaulat & Kontrak Deterministik |
|---|---|
| Kaskade Model Frontier | Medium / High (GPT-5.6 Sol Medium, Gemini 4 Argon, Claude Sonnet 5.5 High, Grok 4.7 High Fast) |
| Invarian Fallback Ketersediaan | Gemini 4 Argon/Pro -> Gemini 3.8 Flash; Claude Opus 5.5 -> Claude Opus 4.6 (Bebas gagal saat model belum tersedia/kuota penuh) |
| Protokol Hemat Token & KV-Cache | Kunci instruksi & skema statis di prefix awal (kv-cache-prefix-optimizer); kirim potongan CONTEXT_MAP.md (<250 token/panggilan) saat Fan-Out |
| Eksekusi SaaT CLI & MCP | CLI: vibes skill exec cloudflare-workers-expert <audit|eval|verify|generate|blueprint> / MCP: vibes_skill_dispatch, vibes_ast_query, vibes_compile_cache, vibes_optimize_budget, vibes_verify_gate |
| Invarian NFR & Anti-Slop | Latensi P99 API < 85ms, paritas skema ketat OpenAPI 3.1 / TypeSpec, kontrak error RFC 9457 Problem Details, penegakan Idempotency-Key; kode 100% tuntas tanpa placeholder diverifikasi melalui node scripts/check-anti-slop.js --strict |


