| name | cloudflare-workers |
| description | Deploy and manage Cloudflare Workers, KV namespaces, D1 databases, R2 buckets, and Durable Objects via the wrangler CLI. Trigger: when deploying to Cloudflare, using wrangler, deploying Workers, managing KV namespaces, D1 databases, R2 buckets, Durable Objects, Cloudflare queues |
| version | 1 |
| argument-hint | [deploy|dev|tail|kv|d1|r2|secret|rollback] |
| allowed-tools | ["bash","read","write","edit","glob","grep"] |
Cloudflare Workers Deployment
You are now operating in Cloudflare Workers deployment mode using the wrangler CLI.
Prerequisites
npm install -g wrangler
wrangler login
export CLOUDFLARE_API_TOKEN="your-token-here"
wrangler whoami
Project Structure
my-worker/
├── wrangler.toml # Configuration file
├── src/
│ └── index.ts # Worker entrypoint
└── package.json
Minimal wrangler.toml
name = "my-worker"
main = "src/index.ts"
compatibility_date = "2024-01-01"
[[kv_namespaces]]
binding = "MY_KV"
id = "abc123def456"
[[d1_databases]]
binding = "DB"
database_name = "my-database"
database_id = "abc123"
[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "my-bucket"
Local Development
wrangler dev
wrangler dev --remote
wrangler dev --port 8787
wrangler dev --watch
Deployment
wrangler deploy
wrangler deploy --dry-run
wrangler deploy --env staging
wrangler deploy --env production
wrangler deploy 2>&1 | tee deploy.log
grep "Deployed" deploy.log
Multi-Environment Configuration
name = "my-worker"
main = "src/index.ts"
compatibility_date = "2024-01-01"
[env.staging]
name = "my-worker-staging"
vars = { ENVIRONMENT = "staging" }
[env.production]
name = "my-worker-production"
vars = { ENVIRONMENT = "production" }
Monitoring: Live Log Tailing
wrangler tail
wrangler tail --format json
wrangler tail --env production --format json
wrangler tail --status error
wrangler tail --sampling-rate 0.1
Version Management and Rollback
wrangler versions list
wrangler versions list --json
wrangler versions view <version-id>
wrangler versions upload
wrangler versions deploy <version-id>
wrangler versions deploy <version-id> --percentage 10
wrangler rollback
Secrets Management
wrangler secret put DATABASE_URL
wrangler secret put DATABASE_URL --env production
wrangler secret list
wrangler secret delete DATABASE_URL
KV Namespace Operations
wrangler kv namespace create MY_NAMESPACE
wrangler kv namespace list
wrangler kv key put mykey "myvalue" --namespace-id <namespace-id>
wrangler kv key get mykey --namespace-id <namespace-id>
wrangler kv key list --namespace-id <namespace-id> --prefix "user:"
wrangler kv key delete mykey --namespace-id <namespace-id>
wrangler kv bulk put data.json --namespace-id <namespace-id>
KV is eventually consistent (~60s). Best for: config, feature flags, cached reads.
D1 Database Operations
wrangler d1 create my-database
wrangler d1 list
wrangler d1 execute my-database --command "SELECT * FROM users LIMIT 10;"
wrangler d1 execute my-database --remote --command "SELECT COUNT(*) FROM users;"
wrangler d1 execute my-database --remote --file ./schema.sql
wrangler d1 migrations apply my-database --remote
wrangler d1 migrations list my-database
D1 is strongly consistent SQLite. Best for: structured data, relational queries.
R2 Bucket Operations
wrangler r2 bucket create my-bucket
wrangler r2 bucket list
wrangler r2 object put my-bucket/path/to/file.txt --file ./local-file.txt
wrangler r2 object get my-bucket/path/to/file.txt --file ./downloaded.txt
wrangler r2 object delete my-bucket/path/to/file.txt
R2 has zero egress fees. Best for: files, media, backups.
Queues Operations
wrangler queues create my-queue
wrangler queues list
wrangler queues send my-queue '{"event": "test", "data": {}}'
Worker Deletion
wrangler delete
wrangler delete --env staging
Deployment Patterns
Pattern 1: Standard Deploy and Verify
wrangler deploy --env production
wrangler tail --env production --format json &
TAIL_PID=$!
sleep 10
kill $TAIL_PID
Pattern 2: Multi-Environment Pipeline
wrangler deploy --env staging
curl -f https://my-worker-staging.workers.dev/health
wrangler deploy --env production
curl -f https://my-worker-production.workers.dev/health
Pattern 3: Blue-Green with Traffic Splitting
wrangler versions upload
NEW_VERSION=$(wrangler versions list --json | jq -r '.[0].id')
wrangler versions deploy "$NEW_VERSION" --percentage 10
wrangler tail --format json | jq 'select(.outcome == "exception")'
wrangler versions deploy "$NEW_VERSION" --percentage 100
wrangler rollback
Cloudflare Storage Binding Reference
| Binding | Best For | Consistency | Notes |
|---|
| KV | Config, feature flags, cached reads | Eventually (~60s) | $0.50/M reads, $5/M writes |
| R2 | Files, media, backups | Strong | Zero egress, $0.015/GB-month |
| D1 | Structured SQL data | Strong (SQLite) | $0.001/M reads |
| Durable Objects | Real-time, WebSockets, per-entity state | Strong (single-threaded) | $0.15/M requests |
| Queues | Background jobs, async processing | At-least-once | $0.40/M after 1M free |
| Workers AI | LLM inference, embeddings | N/A | Per-token billing |
Free Tier Limits
- 100,000 requests/day
- 10ms CPU time per invocation
- KV: 100k reads/day, 1k writes/day, 1 GB storage
- D1: 5M rows read/day, 100k rows written/day, 5 GB storage
- R2: 10 GB storage, 1M Class A ops, 10M Class B ops
Safety Rules
- Never commit
CLOUDFLARE_API_TOKEN to source control — use environment variables or wrangler secret put.
- Always deploy to staging before production.
- Always tail logs after deployment to verify no errors.
- Use
--dry-run to validate the deployment bundle before pushing to production.
- Use
wrangler rollback immediately if errors spike after deployment.
- D1 migrations with
--remote modify live production data — test locally first.