# Cloudflare Bindings Skill Reference Expert guidance on Cloudflare Workers Bindings - the runtime APIs that connect Workers to Cloudflare platform resources. ## What Are Bindings? Bindings are how Workers access Cloudflare resources (storage, compute, services) via the `env` object. They're configured in `wrangler.jsonc`, type-safe via TypeScript, and zero-overhead at runtime. ## Reading Order 1. **This file** - Binding catalog and selection guide 2. **[api.md](api.md)** - TypeScript types and env access patterns 3. **[configuration.md](configuration.md)** - Complete wrangler.jsonc examples 4. **[patterns.md](patterns.md)** - Best practices and common patterns 5. **[gotchas.md](gotchas.md)** - Critical pitfalls and troubleshooting ## Binding Catalog ### Storage Bindings | Binding | Use Case | Access Pattern | |---------|----------|----------------| | **KV** | Key-value cache, CDN-backed reads | `env.MY_KV.get(key)` | | **R2** | Object storage (S3-compatible) | `env.MY_BUCKET.get(key)` | | **D1** | SQL database (SQLite) | `env.DB.prepare(sql).all()` | | **Durable Objects** | Coordination, real-time state | `env.MY_DO.get(id)` | | **Vectorize** | Vector embeddings search | `env.VECTORIZE.query(vector)` | | **Queues** | Async message processing | `env.MY_QUEUE.send(msg)` | ### Compute Bindings | Binding | Use Case | Access Pattern | |---------|----------|----------------| | **Service** | Worker-to-Worker RPC | `env.MY_SERVICE.fetch(req)` | | **Workers AI** | LLM inference | `env.AI.run(model, input)` | | **Browser Rendering** | Headless Chrome | `env.BROWSER.fetch(url)` | ### Platform Bindings | Binding | Use Case | Access Pattern | |---------|----------|----------------| | **Analytics Engine** | Custom metrics | `env.ANALYTICS.writeDataPoint(data)` | | **mTLS** | Client certificates | `env.MY_CERT` (string) | | **Hyperdrive** | Database pooling | `env.HYPERDRIVE.connectionString` | | **Rate Limiting** | Request throttling | `env.RATE_LIMITER.limit(id)` | | **Workflows** | Long-running workflows | `env.MY_WORKFLOW.create()` | ### Configuration Bindings | Binding | Use Case | Access Pattern | |---------|----------|----------------| | **Environment Variables** | Non-sensitive config | `env.API_URL` (string) | | **Secrets** | Sensitive values | `env.API_KEY` (string) | | **Text/Data Blobs** | Static files | `env.MY_BLOB` (string) | | **WASM** | WebAssembly modules | `env.MY_WASM` (WebAssembly.Module) | ## Quick Selection Guide **Need persistent storage?** - Key-value < 25MB → **KV** - Files/objects → **R2** - Relational data → **D1** - Real-time coordination → **Durable Objects** **Need AI/compute?** - LLM inference → **Workers AI** - Scraping/PDFs → **Browser Rendering** - Call another Worker → **Service binding** **Need async processing?** - Background jobs → **Queues** **Need config?** - Public values → **Environment Variables** - Secrets → **Secrets** (never commit) ## Quick Start 1. **Add binding to wrangler.jsonc:** ```jsonc { "kv_namespaces": [ { "binding": "MY_KV", "id": "your-kv-id" } ] } ``` 2. **Generate types:** ```bash npx wrangler types ``` 3. **Access in Worker:** ```typescript export default { async fetch(request, env, ctx) { await env.MY_KV.put('key', 'value'); return new Response('OK'); } } ``` ## Type Safety Bindings are fully typed via `wrangler types`. See [api.md](api.md) for details. ## Limits - 64 bindings max per Worker (all types combined) - See [gotchas.md](gotchas.md) for per-binding limits ## Key Concepts **Zero-overhead access:** Bindings compiled into Worker, no network calls to access **Type-safe:** Full TypeScript support via `wrangler types` **Per-environment:** Different IDs for dev/staging/production **Secrets vs Vars:** Secrets encrypted at rest, never in config files ## See Also - [Cloudflare Docs: Bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/) - [Wrangler Configuration](https://developers.cloudflare.com/workers/wrangler/configuration/)