Skip to content
Back to skills

Cloudflare Worker

ASecurity

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.

  • 666 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added February 8, 2026
devopstypescriptbashsqlnodenodejsterraformtestingapidatabasedevops

Works with

  • cli
  • api

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill cloudflare-worker --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cloudflare Worker?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cloudflare Worker
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-cloudflare-worker/badge)](https://www.skillsdirectory.com/skills/majiayu000-cloudflare-worker)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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: 'user@example.com' } });

// 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/)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.