> wrangler
the Cloudflare CLI — develop, deploy, and manage Workers, Pages, and their storage bindings
// setup & auth
7 commandsLog in to Cloudflare with OAuth
$ wrangler loginLog in on a headless server or authenticate CI
$ wrangler login --browser falseCheck which account you're authenticated as
$ wrangler whoamiVerify authentication in a CI script
$ wrangler whoami --jsonScaffold a new Worker project
$ wrangler init <name> -yImport an existing dashboard Worker for local dev
$ wrangler init <name> --from-dash <worker-name>Generate TypeScript types for your bindings
$ wrangler types// local dev
9 commandsStart the local dev server
$ wrangler devDevelop against real production resources
$ wrangler dev --remoteTest a cron trigger locally
$ wrangler dev --test-scheduledRun dev against a specific config or environment
$ wrangler dev -c ./wrangler.staging.jsoncDevelop a Pages app locally with bindings
$ wrangler pages dev ./dist --kv CACHE --d1 DB --r2 BUCKET --binding API_URL=http://localhost:3000 --live-reloadSeed and query your local D1 database
$ wrangler d1 execute <name> --local --file=./schema.sqlApply D1 migrations locally, then to remote
$ wrangler d1 migrations apply <name> --localReuse local storage state across commands
$ wrangler dev --persist-to ./.wrangler-stateDry-run a deploy to validate config and bundle
$ wrangler deploy --dry-run --outdir ./dist// deploy & domains
11 commandsDeploy a Worker to Cloudflare
$ wrangler deployDeploy a Worker to a specific environment
$ wrangler deploy --env productionDeploy using a specific config file
$ wrangler deploy -c wrangler.staging.jsoncDry-run a deploy to inspect the bundle
$ wrangler deploy --dry-run --outdir distDeploy a Worker behind a custom domain
$ wrangler deploy --domain api.example.comDeploy a Worker on a route pattern
$ wrangler deploy --route "example.com/api/*"Serve a static site or SPA with Workers Assets
$ wrangler deploy --assets ./distPin the runtime compatibility date on deploy
$ wrangler deploy --compatibility-date 2025-01-01Attach or override cron triggers on deploy
$ wrangler deploy --triggers "*/5 * * * *"Deploy a Pages project to production
$ wrangler pages deploy ./dist --project-name my-siteDeploy a Pages preview from a branch
$ wrangler pages deploy ./dist --project-name my-site --branch preview// versions & rollback
7 commandsList recent versions and inspect one
$ wrangler versions listUpload a new version without routing traffic to it
$ wrangler versions upload --message "fix checkout bug"Gradually roll out a new version to a percentage of traffic
$ wrangler versions deploy <new-version-id>@10 <old-version-id>@90Promote a staged version to 100% of traffic
$ wrangler versions deploy <version-id>@100 -yRoll back to a previous version after a bad deploy
$ wrangler rollback --message "revert bad deploy"Check which version is currently live in production
$ wrangler deployments statusUpload and deploy a version to a specific environment
$ wrangler versions upload -e production --message "release v2"// cloudflare pages
10 commandsCreate a new Pages project
$ wrangler pages project create my-appDeploy build output to production
$ wrangler pages deploy ./dist --project-name my-appDeploy a preview to a branch
$ wrangler pages deploy ./dist --project-name my-app --branch feature-loginDeploy from CI with commit metadata
$ wrangler pages deploy ./dist --project-name my-app --branch "$GITHUB_REF_NAME" --commit-hash "$GITHUB_SHA" --commit-message "$(git log -1 --pretty=%s)" --commit-dirty=trueDevelop the full app locally with Functions
$ wrangler pages dev ./distBind KV, D1, and R2 in local dev
$ wrangler pages dev ./dist --kv CACHE --d1 DB --r2 UPLOADSSet compatibility date and nodejs_compat for dev
$ wrangler pages dev ./dist --compatibility-date 2024-09-23 --compatibility-flag nodejs_compatSet and list production secrets
$ wrangler pages secret put DATABASE_URL --project-name my-appBulk-upload secrets from a file
$ wrangler pages secret bulk ./secrets.json --project-name my-appTail production logs and list deployments
$ wrangler pages deployment tail --project-name my-app// secrets & env vars
8 commandsSet a production secret interactively
$ wrangler secret put API_KEYSet a secret for a specific environment
$ wrangler secret put API_KEY --env productionSet a secret non-interactively from CI
$ echo -n "$SECRET_VALUE" | wrangler secret put API_KEY --env productionBulk-upload many secrets from a file
$ wrangler secret bulk .envList which secrets a Worker has
$ wrangler secret list --format prettyDelete a stale secret
$ wrangler secret delete OLD_TOKEN --env productionLoad secrets for local dev without deploying them
$ echo "API_KEY=local-dev-value" >> .dev.varsManage secrets for a specific config file
$ wrangler secret put DATABASE_URL -c ./workers/api/wrangler.jsonc --env production// kv
10 commandsCreate a KV namespace and wire it into config
$ wrangler kv namespace create SESSIONSCreate a preview namespace for local dev
$ wrangler kv namespace create SESSIONS --previewList namespaces to recover a lost id
$ wrangler kv namespace listWrite a single key/value pair
$ wrangler kv key put KEY VALUE --binding=SESSIONSCache a value with a TTL or expiration
$ wrangler kv key put "cache:home" "$(cat page.html)" --binding=CACHE --ttl 3600Read a value back to the terminal
$ wrangler kv key get KEY --binding=SESSIONS --textList keys by prefix
$ wrangler kv key list --binding=SESSIONS --prefix "user:"Seed the local KV store that dev uses
$ wrangler kv key put KEY VALUE --binding=CACHE --localBulk upload many pairs from a JSON file
$ wrangler kv bulk put ./data.json --binding=CACHEWrite to a specific environment's namespace
$ wrangler kv key put FEATURE_X on --binding=CONFIG --env production// r2
10 commandsCreate an R2 Bucket and Bind It to a Worker
$ wrangler r2 bucket create my-bucketList Your Buckets and Inspect One
$ wrangler r2 bucket listUpload a Local File to a Bucket
$ wrangler r2 object put my-bucket/images/logo.png --file=./logo.png --content-type=image/png --remoteDownload an Object or Stream It to Stdout
$ wrangler r2 object get my-bucket/images/logo.png --file=./logo.png --remoteDelete an Object from a Bucket
$ wrangler r2 object delete my-bucket/images/logo.png --remoteServe a Bucket Publicly Over a Custom Domain
$ wrangler r2 bucket dev-url enable my-bucketAllow Browser Uploads by Setting a CORS Policy
$ wrangler r2 bucket cors set my-bucket --file=./cors.jsonAuto-Expire Old Objects with a Lifecycle Rule
$ wrangler r2 bucket lifecycle add my-bucketTrigger a Queue When Objects Change
$ wrangler r2 bucket notification create my-bucket --event-type object-create --queue my-queueDevelop Against Local vs. Remote R2 Storage
$ wrangler dev// d1 & hyperdrive
11 commandsCreate a D1 database and grab its binding
$ wrangler d1 create <name>Run a one-off SQL query against local or remote
$ wrangler d1 execute <database> --command "SELECT * FROM users LIMIT 5" --localLoad a schema or seed SQL file into D1
$ wrangler d1 execute <database> --file ./schema.sql --remoteCreate a new versioned migration
$ wrangler d1 migrations create <database> "add_users_table"Apply migrations to the remote database
$ wrangler d1 migrations apply <database> --localCheck which migrations are still pending
$ wrangler d1 migrations list <database> --remoteBack up or export a D1 database to a .sql file
$ wrangler d1 export <name> --remote --output ./backup.sqlRestore a database to a point in time
$ wrangler d1 time-travel info <database>Inspect D1 databases and their size
$ wrangler d1 listCreate a Hyperdrive config for Postgres
$ wrangler hyperdrive create <name> --connection-string="postgres://user:[email protected]:5432/postgres"Tune Hyperdrive caching or rotate its credentials
$ wrangler hyperdrive list// queues & cron
6 commandsCreate a Queue for a Producer Worker
$ wrangler queues create <name>Attach a Consumer Worker to a Queue
$ wrangler queues consumer add <queue-name> <script-name>Schedule a Worker with a Cron Trigger
$ # wrangler.jsonc: "triggers": { "crons": ["0 */6 * * *"] }Test a Cron Handler Locally
$ wrangler dev --test-scheduledPause and Purge a Queue During an Incident
$ wrangler queues pause-delivery <name>Inspect a Queue's Backlog and Consumers
$ wrangler queues list// logs & debug
6 commandsTail Live Production Logs
$ wrangler tailWatch Only Errored Invocations
$ wrangler tail my-worker --status errorTail the Right Worker in a Multi-Environment Setup
$ wrangler tail -e productionIsolate One Request While Reproducing a Bug
$ wrangler tail --status error --method POST --search "checkout"Capture Structured Logs and Pipe to jq
$ wrangler tail --format json | jq 'select(.outcome=="exception")'Check What Version Is Live and Review History
$ wrangler deployments status