| name | wrangler |
| description | Runs Cloudflare Wrangler v4+: wrangler.jsonc, deploy/dev, KV/R2/D1/Vectorize/Hyperdrive/Queues/Workflows/Pages, secrets, types, and tail. Use when editing wrangler config, bindings, or any wrangler command. Not for Cloudflare Agents SDK application code (building-ai-agent-on-cloudflare) or Vercel/Netlify CLIs. Never trust baked-in flag knowledge โ fetch developers.cloudflare.com/workers/wrangler first. |
| version | 1.0.1 |
Wrangler CLI
Your knowledge of Wrangler CLI flags, config fields, and subcommands may be outdated. Prefer retrieval over pre-training for any Wrangler task. Fetch the latest docs before writing or reviewing commands and config.
When to Use
Load this skill whenever you need to:
- Create, deploy, or manage Cloudflare Workers (
wrangler init, wrangler deploy, wrangler dev)
- Edit
wrangler.jsonc or wrangler.toml configuration files
- Provision or manage bindings: KV, R2, D1, Vectorize, Hyperdrive, Workers AI, Queues, Workflows, Pipelines, Containers, Secrets Store, Durable Objects
- Debug Worker deployment, local dev, or type generation issues
- Run migrations, manage secrets, or tail logs
- Set up Cloudflare Pages projects
Trigger keywords: wrangler, cloudflare workers, wrangler.jsonc, wrangler.toml, worker deploy, kv namespace, r2 bucket, d1 database, vectorize, hyperdrive, workers ai, cloudflare pages, durable objects, wrangler tail, wrangler types.
Prerequisites
- Node.js installed (LTS recommended).
- Wrangler v4.x+ installed locally or as a dev dependency.
- Cloudflare account authenticated via
wrangler login or CLOUDFLARE_API_TOKEN env var.
- On Windows (PowerShell), use
npx wrangler or ensure wrangler is in PATH. Line continuations differ: use backtick ` in PowerShell instead of \.
Procedure
1. Verify Installation
wrangler --version
If not installed:
npm install -D wrangler@latest
2. Retrieve Latest Docs Before Writing Commands
Before writing or reviewing Wrangler commands and config, fetch the latest information. Do not rely on baked-in knowledge for CLI flags, config fields, or binding shapes.
| Source | How to retrieve | Use for |
|---|
| Wrangler docs | https://developers.cloudflare.com/workers/wrangler/ | CLI commands, flags, config reference |
| Wrangler config schema | node_modules/wrangler/config-schema.json | Config fields, binding shapes, allowed values |
| Cloudflare docs | Search tool or https://developers.cloudflare.com/workers/ | API reference, compatibility dates/flags |
3. Initialize a New Worker
npx wrangler init my-worker
npx create-cloudflare@latest my-app
4. Configure wrangler.jsonc
Prefer JSON config (wrangler.jsonc) over TOML. Newer features are JSON-only.
Minimal config:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2026-03-18"
}
Full config with bindings:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2026-03-18",
"compatibility_flags": ["nodejs_compat_v2"],
"vars": {
"ENVIRONMENT": "production"
},
"kv_namespaces": [
{ "binding": "KV", "id": "<KV_NAMESPACE_ID>" }
],
"r2_buckets": [
{ "binding": "BUCKET",
5. Generate TypeScript Types After Config Changes
wrangler types
wrangler types ./src/env.d.ts
wrangler types --check
6. Local Development
wrangler dev
wrangler dev --env staging
wrangler dev --local
wrangler dev --remote
wrangler dev --port 8787
wrangler dev --live-reload
wrangler dev --test-scheduled
Remote bindings for local dev โ use remote: true in binding config to connect to real resources while running locally:
{
"r2_buckets": [
{ "binding": "BUCKET", "bucket_name": "my-bucket", "remote": true }
],
"ai": { "binding": "AI", "remote": true },
"vectorize": [
{ "binding": "INDEX", "index_name": "my-index", "remote": true }
]
}
Recommended remote bindings: AI (required), Vectorize, Browser Rendering, mTLS, Images.
Local secrets โ create .dev.vars for local development secrets:
API_KEY=local-dev-key
DATABASE_URL=postgres://localhost:5432/dev
7. Deploy
wrangler deploy
wrangler deploy --env staging
wrangler deploy --dry-run
wrangler deploy --keep-vars
wrangler deploy --minify
8. Manage Secrets
wrangler secret put API_KEY
echo "secret-value" | wrangler secret put API_KEY
wrangler secret list
wrangler secret delete API_KEY
wrangler secret bulk secrets.json
9. Versions and Rollback
wrangler versions list
wrangler versions view <VERSION_ID>
wrangler rollback
wrangler rollback <VERSION_ID>
10. KV (Key-Value Store)
Manage namespaces:
wrangler kv namespace create MY_KV
wrangler kv namespace list
wrangler kv namespace delete --namespace-id <ID>
Manage keys:
wrangler kv key put --namespace-id <ID> "key" "value"
wrangler kv key put --namespace-id <ID> "key" "value" --expiration-ttl 3600
wrangler kv key get --namespace-id <ID> "key"
wrangler kv key list --namespace-id <ID>
wrangler kv key delete --namespace-id <ID> "key"
wrangler kv bulk put --namespace-id <ID> data.json
Config binding:
{
"kv_namespaces": [
{ "binding": "CACHE", "id": "<NAMESPACE_ID>" }
]
}
11. R2 (Object Storage)
Manage buckets:
wrangler r2 bucket create my-bucket
wrangler r2 bucket create my-bucket --location wnam
wrangler r2 bucket list
wrangler r2 bucket info my-bucket
wrangler r2 bucket delete my-bucket
Manage objects:
wrangler r2 object put my-bucket/path/file.txt --file ./local-file.txt
wrangler r2 object get my-bucket/path/file.txt
wrangler r2 object delete my-bucket/path/file.txt
Config binding:
{
"r2_buckets": [
{ "binding": "ASSETS", "bucket_name": "my-bucket" }
]
}
12. D1 (SQL Database)
Manage databases:
wrangler d1 create my-database
wrangler d1 create my-database --location wnam
wrangler d1 list
wrangler d1 info my-database
wrangler d1 delete my-database
Execute SQL:
wrangler d1 execute my-database --remote --command "SELECT * FROM users"
wrangler d1 execute my-database --remote --file ./schema.sql
wrangler d1 execute my-database --local --command "SELECT * FROM users"
Migrations:
wrangler d1 migrations create my-database create_users_table
wrangler d1 migrations list my-database --local
wrangler d1 migrations apply my-database --local
wrangler d1 migrations apply my-database --remote
Export/Backup:
wrangler d1 export my-database --remote --output backup.sql
wrangler d1 export my-database --remote --output schema.sql --no-data
Config binding:
{
"d1_databases": [
{
"binding": "DB",
"database_name": "my-database",
"database_id": "<DATABASE_ID>",
"migrations_dir": "./migrations"
}
]
}
13. Vectorize (Vector Database)
Manage indexes:
wrangler vectorize create my-index --dimensions 768 --metric cosine
wrangler vectorize create my-index --preset @cf/baai/bge-base-en-v1.5
wrangler vectorize list
wrangler vectorize get my-index
wrangler vectorize delete my-index
Manage vectors:
wrangler vectorize insert my-index --file vectors.ndjson
wrangler vectorize query my-index --vector "[0.1, 0.2, ...]" --top-k 10
Config binding:
{
"vectorize": [
{ "binding": "SEARCH_INDEX", "index_name": "my-index" }
]
}
14. Hyperdrive (Database Accelerator)
Manage configs:
wrangler hyperdrive create my-hyperdrive --connection-string "postgres://user:pass@host:5432/database"
wrangler hyperdrive list
wrangler hyperdrive get <HYPERDRIVE_ID>
wrangler hyperdrive update <HYPERDRIVE_ID> --origin-password "new-password"
wrangler hyperdrive delete <HYPERDRIVE_ID>
Config binding:
{
"compatibility_flags": ["nodejs_compat_v2"],
"hyperdrive": [
{ "binding": "HYPERDRIVE", "id": "<HYPERDRIVE_ID>" }
]
}
15. Workers AI
wrangler ai models
wrangler ai finetune list
Config binding:
{
"ai": { "binding": "AI" }
}
HARD RULE: Workers AI always runs remotely and incurs usage charges even in local dev. Never assume local simulation for AI bindings.
16. Queues
Manage queues:
wrangler queues create my-queue
wrangler queues list
wrangler queues delete my-queue
wrangler queues consumer add my-queue my-worker
wrangler queues consumer remove my-queue my-worker
Config binding:
{
"queues": {
"producers": [
{ "binding": "MY_QUEUE", "queue": "my-queue" }
],
"consumers": [
{
"queue": "my-queue",
"max_batch_size": 10,
"max_batch_timeout": 30
}
]
}
}
17. Containers
Build and push images:
wrangler containers build -t my-app:latest .
wrangler containers build -t my-app:latest . --push
wrangler containers push my-app:latest
Manage containers:
wrangler containers list
wrangler containers info <CONTAINER_ID>
wrangler containers delete <CONTAINER_ID>
Manage images:
wrangler containers images list
wrangler containers images delete my-app:latest
Manage external registries:
wrangler containers registries list
wrangler containers registries configure <DOMAIN> --public-credential <AWS_ACCESS_KEY_ID>
wrangler containers registries delete <DOMAIN>
18. Workflows
Manage workflows:
wrangler workflows list
wrangler workflows describe my-workflow
wrangler workflows trigger my-workflow
wrangler workflows trigger my-workflow --params '{"key": "value"}'
wrangler workflows delete my-workflow
Manage workflow instances:
wrangler workflows instances list my-workflow
wrangler workflows instances describe my-workflow <INSTANCE_ID>
wrangler workflows instances terminate my-workflow <INSTANCE_ID>
Config binding:
{
"workflows": [
{
"binding": "MY_WORKFLOW",
"name": "my-workflow",
"class_name": "MyWorkflow"
}
]
}
19. Pipelines
Manage pipelines:
wrangler pipelines create my-pipeline --r2 my-bucket
wrangler pipelines list
wrangler pipelines show my-pipeline
wrangler pipelines update my-pipeline --batch-max-mb 100
wrangler pipelines delete my-pipeline
Config binding:
{
"pipelines": [
{ "binding": "MY_PIPELINE", "pipeline": "my-pipeline" }
]
}
20. Secrets Store
Manage stores:
wrangler secrets-store store create my-store
wrangler secrets-store store list
wrangler secrets-store store delete <STORE_ID>
Manage secrets in store:
wrangler secrets-store secret put <STORE_ID> my-secret
wrangler secrets-store secret list <STORE_ID>
wrangler secrets-store secret get <STORE_ID> my-secret
wrangler secrets-store secret delete <STORE_ID> my-secret
Config binding:
{
"secrets_store_secrets": [
{
"binding": "MY_SECRET",
"store_id": "<STORE_ID>",
"secret_name": "my-secret"
}
]
}
21. Pages (Frontend Deployment)
wrangler pages project create my-site
wrangler pages deploy ./dist
wrangler pages deploy ./dist --branch main
wrangler pages deployment list --project-name my-site
22. Observability
Tail logs:
wrangler tail
wrangler tail my-worker
wrangler tail --status error
wrangler tail --search "error"
wrangler tail --format json
Config logging:
{
"observability": {
"enabled": true,
"head_sampling_rate": 1
}
}
23. Testing with Vitest
npm install -D @cloudflare/vitest-pool-workers vitest
vitest.config.ts:
import { defineWorkersConfig } from "@cloudflare/vitest-pool-workers/config";
export default defineWorkersConfig({
test: {
poolOptions: {
workers: {
wrangler: { configPath: "./wrangler.jsonc" },
},
},
},
});
Test scheduled events:
wrangler dev --test-scheduled
curl http://localhost:8787/__scheduled
Pitfalls
| Issue | Solution |
|---|
command not found: wrangler | Install: npm install -D wrangler |
| Auth errors | Run wrangler login or set CLOUDFLARE_API_TOKEN |
| Config validation errors | Run wrangler check before deploy |
| Type errors after config change | Run wrangler types to regenerate bindings |
| Local storage not persisting | Check .wrangler/state directory exists and is writable |
| Binding undefined in Worker | Verify binding name in code matches config binding field exactly |
| Workers AI charges in local dev | AI always runs remotely; there is no local simulation |
compatibility_date too old | Update to a date within 30 days of today; check compatibility dates docs |
| TOML config missing newer features | Switch to wrangler.jsonc; newer features are JSON-only |
| Secrets committed to config | Use .dev.vars for local secrets; use wrangler secret put for production |
| PowerShell line continuation errors | Use backtick ` instead of \ for multi-line commands on Windows |
| Binding name mismatch | The binding field in config must match the property accessed on env in code |
HARD RULES:
- Never commit real secrets to
wrangler.jsonc, .dev.vars, or any tracked file. Use wrangler secret put for production and .dev.vars (gitignored) for local dev.
- Always run
wrangler types after changing any binding in config. Stale types cause silent runtime errors.
- Always run
wrangler deploy --dry-run before major deploys to validate without pushing.
- Workers AI is always remote โ it incurs charges even during
wrangler dev. Never assume local simulation.
- Prefer retrieval over pre-training โ Wrangler CLI flags and config fields change frequently. Fetch docs before writing commands.
- Use
wrangler.jsonc over wrangler.toml โ newer features are JSON-only.
- Never delete resources (KV namespaces, R2 buckets, D1 databases, Vectorize indexes) without explicit user confirmation. Data loss is irreversible.
Verification
Check Wrangler Version
wrangler --version
Check Auth Status
wrangler whoami
Validate Config
wrangler check
Verify Types Are Current
wrangler types --check
Dry-Run Deploy
wrangler deploy --dry-run
Verify Local Dev Server
wrangler dev --port 8787
curl http://localhost:8787/
Verify Bindings Are Accessible
Check that generated types include your bindings:
wrangler types
Verify KV Namespace
wrangler kv namespace list
Verify D1 Migration Status
wrangler d1 migrations list my-database --local
Best Practices
- Version control
wrangler.jsonc โ treat as source of truth for Worker config.
- Use automatic provisioning โ omit resource IDs for auto-creation on deploy where supported.
- Run
wrangler types in CI โ add to build step to catch binding mismatches early.
- Use environments โ separate staging/production with
env.staging, env.production.
- Set
compatibility_date โ update quarterly to get new runtime features.
- Use
.dev.vars for local secrets โ never commit secrets to config.
- Test locally first โ
wrangler dev with local bindings before deploying.
- Use
--dry-run before major deploys โ validate changes without deployment.
Quick Reference: Core Commands
| Task | Command |
|---|
| Start local dev server | wrangler dev |
| Deploy to Cloudflare | wrangler deploy |
| Deploy dry run | wrangler deploy --dry-run |
| Generate TypeScript types | wrangler types |
| Validate configuration | wrangler check |
| View live logs | wrangler tail |
| Delete Worker | wrangler delete |
| Auth status | wrangler whoami |