2.7 KiB
2.7 KiB
Wrangler Setup for D1 and Drizzle
Complete guide to configuring Wrangler for D1 databases with Drizzle ORM.
wrangler.jsonc Configuration
{
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2025-10-11",
// Node.js compatibility (recommended for Drizzle)
"compatibility_flags": ["nodejs_compat"],
// D1 database bindings
"d1_databases": [
{
// Binding name (used as env.DB in code)
"binding": "DB",
// Database name
"database_name": "my-database",
// Production database ID (from wrangler d1 create)
"database_id": "your-production-database-id",
// Local database ID (for development)
"preview_database_id": "local-db",
// Migrations directory (Drizzle generates here)
"migrations_dir": "./migrations"
}
]
}
Environment Variables
Create .env file (never commit):
CLOUDFLARE_ACCOUNT_ID=your-account-id
CLOUDFLARE_DATABASE_ID=your-database-id
CLOUDFLARE_D1_TOKEN=your-api-token
Wrangler Commands
# Create database
wrangler d1 create my-database
# List databases
wrangler d1 list
# Database info
wrangler d1 info my-database
# Apply migrations (local)
wrangler d1 migrations apply my-database --local
# Apply migrations (remote)
wrangler d1 migrations apply my-database --remote
# Execute SQL directly (local)
wrangler d1 execute my-database --local --command="SELECT * FROM users"
# Execute SQL directly (remote)
wrangler d1 execute my-database --remote --command="SELECT * FROM users"
Local vs Remote
Local Development (--local):
- Uses SQLite file in
.wrangler/state/v3/d1/ - Fast, no network latency
- Data persists between
wrangler devsessions - Perfect for development and testing
Remote/Production (--remote):
- Uses actual D1 database in Cloudflare
- Subject to rate limits
- Production data
- Use for staging/production environments
Always test locally first!
Migration Workflow
# 1. Make schema changes in src/db/schema.ts
# 2. Generate migration
npm run db:generate # or: drizzle-kit generate
# 3. Apply to local database
npm run db:migrate:local # or: wrangler d1 migrations apply DB --local
# 4. Test locally
npm run dev
# 5. Deploy code
npm run deploy
# 6. Apply to production database
npm run db:migrate:remote # or: wrangler d1 migrations apply DB --remote
Important Notes
- migrations_dir: Must point to where Drizzle generates migrations (usually
./migrations) - Binding name: Must match in wrangler.jsonc, Env interface, and code
- Local first: Always test migrations locally before remote
- Never commit: Never commit database IDs or API tokens to version control