Wrangler
Website: https://developers.cloudflare.com/workers/wrangler/ CLI Tool: wrangler Authentication: Cloudflare account
Description
Wrangler is the official CLI tool for Cloudflare Workers, Pages, R2, KV, D1, and other Cloudflare developer products. Build, test, and deploy serverless applications on Cloudflare's global network. Essential for edge computing and serverless deployments.
Commands
Authentication
Login
wrangler login
wrangler login --scopes-list
Authenticate with Cloudflare account.
Logout
wrangler logout
Remove authentication credentials.
Whoami
wrangler whoami
Display current user and account info.
Workers
Create Worker
wrangler init
wrangler init my-worker
wrangler init my-worker --type javascript
wrangler init my-worker --type typescript
Create new Workers project.
Develop Locally
wrangler dev
wrangler dev --local
wrangler dev --remote
wrangler dev --port 8787
Start local development server.
Publish Worker
wrangler publish
wrangler deploy
wrangler publish --name my-worker
wrangler publish --env production
Deploy Worker to Cloudflare.
List Workers
wrangler deployments list
List deployed Workers.
Delete Worker
wrangler delete
wrangler delete --name my-worker
Delete Worker from Cloudflare.
Tail Logs
wrangler tail
wrangler tail --format pretty
wrangler tail --format json
Stream real-time Worker logs.
KV (Key-Value Storage)
Create KV Namespace
wrangler kv:namespace create <name>
wrangler kv:namespace create MY_KV
wrangler kv:namespace create MY_KV --preview
Create KV namespace.
List KV Namespaces
wrangler kv:namespace list
List all KV namespaces.
Delete KV Namespace
wrangler kv:namespace delete --namespace-id <id>
Delete KV namespace.
Put KV Value
wrangler kv:key put <key> <value> --namespace-id <id>
wrangler kv:key put "mykey" "myvalue" --namespace-id abc123
wrangler kv:key put "config" '{"enabled":true}' --namespace-id abc123
Store key-value pair.
Get KV Value
wrangler kv:key get <key> --namespace-id <id>
wrangler kv:key get "mykey" --namespace-id abc123
Retrieve value by key.
List KV Keys
wrangler kv:key list --namespace-id <id>
wrangler kv:key list --namespace-id abc123 --prefix "user:"
List keys in namespace.
Delete KV Key
wrangler kv:key delete <key> --namespace-id <id>
Delete key-value pair.
Bulk Operations
wrangler kv:bulk put <file> --namespace-id <id>
wrangler kv:bulk delete <file> --namespace-id <id>
Bulk upload/delete from JSON file.
R2 (Object Storage)
Create R2 Bucket
wrangler r2 bucket create <name>
wrangler r2 bucket create my-bucket
Create R2 storage bucket.
List R2 Buckets
wrangler r2 bucket list
List all R2 buckets.
Delete R2 Bucket
wrangler r2 bucket delete <name>
Delete R2 bucket.
Upload to R2
wrangler r2 object put <bucket>/<key> --file <path>
wrangler r2 object put my-bucket/image.jpg --file ./image.jpg
Upload file to R2 bucket.
Download from R2
wrangler r2 object get <bucket>/<key> --file <path>
wrangler r2 object get my-bucket/image.jpg --file ./downloaded.jpg
Download file from R2 bucket.
List R2 Objects
wrangler r2 object list <bucket>
wrangler r2 object list my-bucket --prefix folder/
List objects in R2 bucket.
Delete from R2
wrangler r2 object delete <bucket>/<key>
Delete object from R2 bucket.
D1 (SQL Database)
Create D1 Database
wrangler d1 create <name>
wrangler d1 create my-database
Create D1 database.
List D1 Databases
wrangler d1 list
List all D1 databases.
Execute SQL
wrangler d1 execute <database> --command "SELECT * FROM users"
wrangler d1 execute my-db --file schema.sql
Run SQL queries against D1 database.
Delete D1 Database
wrangler d1 delete <name>
Delete D1 database.
Pages
Create Pages Project
wrangler pages project create <name>
wrangler pages project create my-site
Create Pages project.
Deploy to Pages
wrangler pages deploy <directory>
wrangler pages deploy ./dist
wrangler pages deploy ./build --project-name my-site
Deploy static site to Pages.
List Pages Projects
wrangler pages project list
List all Pages projects.
List Pages Deployments
wrangler pages deployment list
List deployments for Pages project.
Tail Pages Logs
wrangler pages deployment tail
Stream Pages function logs.
Queues
Create Queue
wrangler queues create <name>
wrangler queues create my-queue
Create message queue.
List Queues
wrangler queues list
List all queues.
Delete Queue
wrangler queues delete <name>
Delete queue.
Durable Objects
Create Durable Object
# Defined in wrangler.toml
[durable_objects]
bindings = [
{ name = "MY_OBJECT", class_name = "MyObject" }
]
Configure Durable Objects in wrangler.toml.
Migrate Durable Objects
wrangler deployments list
Manage DO migrations through deployments.
Environment Variables
Add Secret
wrangler secret put <name>
wrangler secret put API_KEY
# Enter value when prompted
Add encrypted environment variable.
List Secrets
wrangler secret list
List secret names (not values).
Delete Secret
wrangler secret delete <name>
Remove secret.
Configuration
Generate Types
wrangler types
Generate TypeScript types from wrangler.toml.
Validate Config
wrangler publish --dry-run
Test configuration without deploying.
Versions
Version Info
wrangler version
wrangler --version
Show Wrangler version.
Update Wrangler
npm update -g wrangler
Update Wrangler to latest version.
Examples
Create and Deploy Worker
# Create new Worker
wrangler init my-worker
cd my-worker
# Develop locally
wrangler dev
# Deploy to Cloudflare
wrangler deploy
# View logs
wrangler tail
Worker with KV Storage
# Create KV namespace
wrangler kv:namespace create MY_KV
# Add binding to wrangler.toml
# Put value
wrangler kv:key put "user:123" '{"name":"Alice"}' --namespace-id abc123
# Get value
wrangler kv:key get "user:123" --namespace-id abc123
# Deploy Worker
wrangler deploy
R2 File Storage
# Create bucket
wrangler r2 bucket create my-uploads
# Upload file
wrangler r2 object put my-uploads/avatar.jpg --file ./avatar.jpg
# List files
wrangler r2 object list my-uploads
# Download file
wrangler r2 object get my-uploads/avatar.jpg --file ./downloaded.jpg
D1 Database Setup
# Create database
wrangler d1 create my-app-db
# Create schema
wrangler d1 execute my-app-db --file schema.sql
# Run query
wrangler d1 execute my-app-db --command "SELECT * FROM users"
# Add binding to wrangler.toml
# Then deploy Worker
wrangler deploy
Pages Deployment
# Build your site
npm run build
# Deploy to Pages
wrangler pages deploy ./dist --project-name my-site
# Deploy with custom branch
wrangler pages deploy ./dist --branch production
# View deployments
wrangler pages deployment list
Environment Management
# Add production secret
wrangler secret put API_KEY --env production
# Deploy to different environments
wrangler deploy --env staging
wrangler deploy --env production
# Tail logs for specific env
wrangler tail --env production
Local Development
# Start dev server
wrangler dev
# With remote resources
wrangler dev --remote
# Custom port
wrangler dev --port 3000
# Enable inspector
wrangler dev --inspect
Queue Operations
# Create queue
wrangler queues create email-queue
# Add binding to wrangler.toml
# Deploy Worker that produces/consumes messages
wrangler deploy
# Monitor queue
wrangler tail
TypeScript Support
# Initialize with TypeScript
wrangler init my-worker --type typescript
# Generate types
wrangler types
# Develop with types
wrangler dev
Secrets Management
# Add secrets
wrangler secret put DATABASE_URL
wrangler secret put API_KEY
# List secret names
wrangler secret list
# Delete secret
wrangler secret delete OLD_KEY
Multi-Environment Setup
# wrangler.toml
name = "my-worker"
main = "src/index.ts"
[env.staging]
vars = { ENVIRONMENT = "staging" }
[env.production]
vars = { ENVIRONMENT = "production" }
routes = [{ pattern = "example.com/*", zone_name = "example.com" }]
# Deploy to staging
wrangler deploy --env staging
# Deploy to production
wrangler deploy --env production
CI/CD Integration
# GitHub Actions
- name: Deploy to Cloudflare Workers
run: wrangler deploy
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
Notes
- Workers: Serverless JavaScript/TypeScript on Cloudflare edge
- Pages: Static site hosting with functions
- KV: Global key-value data storage
- R2: S3-compatible object storage
- D1: SQLite at the edge
- Durable Objects: Stateful serverless objects
- Queues: Message queues for async processing
- Bindings: Connect Workers to resources
- Environments: Staging, production configs
- Routes: Map Workers to URL patterns
- Custom Domains: Use your own domains
- Analytics: Built-in analytics dashboard
- Tail: Real-time log streaming
- Miniflare: Local development simulator
- wrangler.toml: Configuration file
- Secrets: Encrypted environment variables
- Compatibility Dates: Version pinning
- Module Workers: ESM module format
- Service Workers: Classic format
- TypeScript: Full TypeScript support
- Source Maps: Debugging support
- Dev Server: Local development environment
- Remote Dev: Test against real resources
- Pricing: Generous free tier
- Global Network: 300+ cities worldwide
- Cold Starts: Near-zero cold starts
- Best Practices:
- Use wrangler.toml for configuration
- Test with
wrangler devfirst - Use environments for staging/prod
- Store secrets securely
- Use KV for global state
- Use R2 for large files
- Use D1 for relational data
- Use Durable Objects for consistency
- Monitor with tail logs
- Set up CI/CD for deployments
- Use TypeScript for type safety
- Version your compatibility date
- Keep wrangler updated
- Use bindings instead of fetch
Comments (0)
Add a Comment
No comments yet. Be the first to comment!