mcpField
C
cloudflare-worker

cloudflare-worker

github.com/majesticlabs-devDevelopment5067 installsUpdated 7w ago
Repository

About cloudflare-worker

A skill for developers building TypeScript applications on Cloudflare Workers. It provides patterns for request handling, storage selection, Durable Objects, and queues.

Key features

  1. 01TypeScript Worker development patterns
  2. 02KV, D1, and R2 storage guidance
  3. 03Durable Objects usage patterns
  4. 04Queue producer and consumer patterns
  5. 05Project structure and Hono examples

Use cases

  1. 01Choosing storage for Worker data
  2. 02Structuring a TypeScript Worker project
  3. 03Implementing real-time coordination
  4. 04Processing tasks asynchronously

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/majesticlabs-dev/majestic-marketplace --skill cloudflare-worker

After installing, type/cloudflare-workerin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
durable-objects.md
hono.md
queues-testing.md
setup.md
storage.md

Details

From the project README

Cloudflare Workers

Development patterns for TypeScript Workers.

Related skills (majestic-devops):

  • wrangler-coder: CLI deployment, secrets, testing, multi-environment
  • cloudflare-coder: Infrastructure provisioning with Terraform/OpenTofu

Core Principles

Edge-First Thinking
  • Stateless by default: Workers don't persist state between requests
  • Global distribution: Code runs in 300+ data centers worldwide
  • Cold start optimized: V8 isolates start in milliseconds
  • Request/response model: Each invocation handles one request
Storage Selection
StorageUse CaseConsistencyLatency
KVConfig, flags, cached dataEventually consistent~10ms
D1Relational data, transactionsStrong (single region)~30-50ms
R2Files, images, large objectsStrong~50-100ms
Durable ObjectsReal-time state, WebSocketsStrong (per-object)~50ms
QueuesAsync processing, batchingAt-least-onceAsync

Project Structure

my-worker/
├── src/
│   ├── index.ts          # Entry point
│   ├── routes/           # Route handlers
│   ├── services/         # Business logic
│   └── types.ts          # Type definitions
├── test/
├── wrangler.toml         # Cloudflare config
├── package.json
└── tsconfig.json

Quick Start

Minimal wrangler.toml
name = "my-worker"
main = "src/index.ts"
compatibility_date = "2024-12-01"
compatibility_flags = ["nodejs_compat"]

See references/setup.md for full configuration with all bindings.

Basic Hono App
import { Hono } from 'hono';
import { Env } from './types';

const app = new Hono<{ Bindings: Env }>();

app.get('/', (c) => c.json({ status: 'ok' }));
app.onError((err, c) => c.json({ error: 'Internal Error' }, 500));
app.notFound((c) => c.json({ error: 'Not Found' }, 404));

export default app;

See references/hono.md for route organization and middleware patterns.

Storage Quick Reference

KV (Key-Value)
await env.CACHE.get('key', 'json');
await env.CACHE.put('key', value, { expirationTtl: 3600 });
await env.CACHE.delete('key');
D1 (SQLite)
const user = await env.DB.prepare('SELECT * FROM users WHERE id = ?')
  .bind(id).first();
R2 (Object Storage)
await env.STORAGE.put('path/file.json', JSON.stringify(data));
const object = await env.STORAGE.get('path/file.json');

See references/storage.md for caching patterns, migrations, and queries.

Durable Objects

Use for: real-time coordination, WebSockets, rate limiting, distributed locks.

// Get DO stub
const id = c.env.COUNTER.idFromName('my-counter');
const stub = c.env.COUNTER.get(id);
const response = await stub.fetch(new Request('http://do/increment'));

See references/durable-objects.md for full patterns including WebSocket Hibernation.

Queues

// Producer
await env.QUEUE.send({ type: 'email', payload: { to: '[email protected]' } });

// Consumer (add to default export)
async queue(batch: MessageBatch, env: Env) {
  for (const msg of batch.messages) {
    try { await process(msg.body); msg.ack(); }
    catch { msg.retry(); }
  }
}

See references/queues-testing.md for consumer patterns and testing setup.

CLI Commands

# Development
wrangler dev                    # Start local server
wrangler dev --remote           # Dev with remote bindings

# Deploy
wrangler deploy

# D1
wrangler d1 migrations apply my-database

# Secrets
wrangler secret put API_KEY

# Logs
wrangler tail

Anti-Patterns

Don'tDo Instead
Service Worker formatES modules
await cache writeswaitUntil for non-blocking
Large KV values (>25MB)R2 for files
server.accept() for WebSocketsctx.acceptWebSocket() (Hibernation API)
Block on analytics/loggingwaitUntil for background tasks
Assume KV immediate consistencyD1 or DOs for consistency-critical

Resources

Comments

Markdown supported