# Binding Configuration Reference

## Storage Bindings

```jsonc
{
  "kv_namespaces": [{ "binding": "MY_KV", "id": "..." }],
  "r2_buckets": [{ "binding": "MY_BUCKET", "bucket_name": "my-bucket" }],
  "d1_databases": [{ "binding": "DB", "database_name": "my-db", "database_id": "..." }],
  "durable_objects": { "bindings": [{ "name": "MY_DO", "class_name": "MyDO" }] },
  "vectorize": [{ "binding": "VECTORIZE", "index_name": "my-index" }],
  "queues": { "producers": [{ "binding": "MY_QUEUE", "queue": "my-queue" }] },
}
```

**Create commands:**

```bash
npx wrangler kv namespace create MY_KV
npx wrangler r2 bucket create my-bucket
npx wrangler d1 create my-db
npx wrangler vectorize create my-index --dimensions=768 --metric=cosine
npx wrangler queues create my-queue

# List existing resources
npx wrangler kv namespace list
npx wrangler r2 bucket list
npx wrangler d1 list
npx wrangler vectorize list
npx wrangler queues list
```

## Compute Bindings

```jsonc
{
  "services": [
    {
      "binding": "MY_SERVICE",
      "service": "other-worker",
      "environment": "production", // Optional: target specific env
    },
  ],
  "ai": { "binding": "AI" },
  "browser": { "binding": "BROWSER" },
  "workflows": [{ "binding": "MY_WORKFLOW", "name": "my-workflow" }],
}
```

**Create workflows:**

```bash
npx wrangler workflows create my-workflow
```

## Platform Bindings

```jsonc
{
  "analytics_engine_datasets": [{ "binding": "ANALYTICS" }],
  "mtls_certificates": [{ "binding": "MY_CERT", "certificate_id": "..." }],
  "hyperdrive": [{ "binding": "HYPERDRIVE", "id": "..." }],
  "unsafe": {
    "bindings": [{ "name": "RATE_LIMITER", "type": "ratelimit", "namespace_id": "..." }],
  },
}
```

## Configuration Bindings

```jsonc
{
  "vars": {
    "API_URL": "https://api.example.com",
    "MAX_RETRIES": "3",
  },
  "text_blobs": { "MY_TEXT": "./data/template.html" },
  "data_blobs": { "MY_DATA": "./data/config.bin" },
  "wasm_modules": { "MY_WASM": "./build/module.wasm" },
}
```

**Secrets (never in config):**

```bash
npx wrangler secret put API_KEY
```

## Environment-Specific Configuration

```jsonc
{
  "name": "my-worker",
  "vars": { "ENV": "production" },
  "kv_namespaces": [{ "binding": "CACHE", "id": "prod-kv-id" }],

  "env": {
    "staging": {
      "vars": { "ENV": "staging" },
      "kv_namespaces": [{ "binding": "CACHE", "id": "staging-kv-id" }],
    },
  },
}
```

**Deploy:**

```bash
npx wrangler deploy              # Production
npx wrangler deploy --env staging
```

## Local Development

```jsonc
{
  "kv_namespaces": [
    {
      "binding": "MY_KV",
      "id": "prod-id",
      "preview_id": "dev-id", // Used in wrangler dev
    },
  ],
}
```

**Or use remote:**

```bash
npx wrangler dev --remote  # Uses production bindings
```

## Complete Example

```jsonc
{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "name": "my-app",
  "main": "src/index.ts",
  "compatibility_date": "2025-01-01",

  "vars": { "API_URL": "https://api.example.com" },
  "kv_namespaces": [{ "binding": "CACHE", "id": "abc123" }],
  "r2_buckets": [{ "binding": "ASSETS", "bucket_name": "my-assets" }],
  "d1_databases": [{ "binding": "DB", "database_name": "my-db", "database_id": "xyz789" }],
  "services": [{ "binding": "AUTH", "service": "auth-worker" }],
  "ai": { "binding": "AI" },
}
```

## Binding-Specific Configuration

### Durable Objects with Class Export

```jsonc
{
  "durable_objects": {
    "bindings": [{ "name": "COUNTER", "class_name": "Counter", "script_name": "my-worker" }],
  },
}
```

```typescript
// In same Worker or script_name Worker
export class Counter {
  constructor(
    private state: DurableObjectState,
    private env: Env
  ) {}
  async fetch(request: Request) {
    /* ... */
  }
}
```

### Queue Consumers

```jsonc
{
  "queues": {
    "producers": [{ "binding": "MY_QUEUE", "queue": "my-queue" }],
    "consumers": [{ "queue": "my-queue", "max_batch_size": 10 }],
  },
}
```

Queue consumer handler: `export default { async queue(batch, env) { /* process batch.messages */ } }`

## Key Points

- **64 binding limit** (all types combined)
- **Secrets**: Always use `wrangler secret put`, never commit
- **Types**: Run `npx wrangler types` after config changes
- **Environments**: Use `env` field for staging/production variants
- **Development**: Use `preview_id` or `--remote` flag
- **IDs vs Names**: Some bindings use `id` (KV, D1), others use `name` (R2, Queues)

## See Also

- [Wrangler Configuration](https://developers.cloudflare.com/workers/wrangler/configuration/)
