home / skills / majesticlabs-dev / majestic-marketplace / cloudflare-worker

cloudflare-worker skill

/plugins/majestic-engineer/skills/cloudflare-worker

npx playbooks add skill majesticlabs-dev/majestic-marketplace --skill cloudflare-worker

Review the files below or copy the command above to add this skill to your agents.

Files (6)
SKILL.md
4.8 KB
---
name: cloudflare-worker
description: Build edge-first TypeScript applications on Cloudflare Workers. Covers Workers API, Hono framework, KV/D1/R2 storage, Durable Objects, Queues, and testing patterns. Use when creating serverless workers, edge functions, or Cloudflare-deployed services.
allowed-tools: Read, Write, Edit, MultiEdit, Grep, Glob, Bash, WebSearch, WebFetch
---

# 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

| Storage | Use Case | Consistency | Latency |
|---------|----------|-------------|---------|
| **KV** | Config, flags, cached data | Eventually consistent | ~10ms |
| **D1** | Relational data, transactions | Strong (single region) | ~30-50ms |
| **R2** | Files, images, large objects | Strong | ~50-100ms |
| **Durable Objects** | Real-time state, WebSockets | Strong (per-object) | ~50ms |
| **Queues** | Async processing, batching | At-least-once | Async |

## 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

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

See [resources/setup.md](resources/setup.md) for full configuration with all bindings.

### Basic Hono App

```typescript
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 [resources/hono.md](resources/hono.md) for route organization and middleware patterns.

## Storage Quick Reference

### KV (Key-Value)

```typescript
await env.CACHE.get('key', 'json');
await env.CACHE.put('key', value, { expirationTtl: 3600 });
await env.CACHE.delete('key');
```

### D1 (SQLite)

```typescript
const user = await env.DB.prepare('SELECT * FROM users WHERE id = ?')
  .bind(id).first();
```

### R2 (Object Storage)

```typescript
await env.STORAGE.put('path/file.json', JSON.stringify(data));
const object = await env.STORAGE.get('path/file.json');
```

See [resources/storage.md](resources/storage.md) for caching patterns, migrations, and queries.

## Durable Objects

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

```typescript
// 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 [resources/durable-objects.md](resources/durable-objects.md) for full patterns including WebSocket Hibernation.

## Queues

```typescript
// 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 [resources/queues-testing.md](resources/queues-testing.md) for consumer patterns and testing setup.

## CLI Commands

```bash
# 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't | Do Instead |
|-------|------------|
| Service Worker format | ES modules |
| `await` cache writes | `waitUntil` for non-blocking |
| Large KV values (>25MB) | R2 for files |
| `server.accept()` for WebSockets | `ctx.acceptWebSocket()` (Hibernation API) |
| Block on analytics/logging | `waitUntil` for background tasks |
| Assume KV immediate consistency | D1 or DOs for consistency-critical |

## Resources

- [Cloudflare Workers Docs](https://developers.cloudflare.com/workers/)
- [Hono Documentation](https://hono.dev/docs/getting-started/cloudflare-workers)
- [D1 Documentation](https://developers.cloudflare.com/d1/)
- [Durable Objects Guide](https://developers.cloudflare.com/durable-objects/)