Database Configuration
Start with a development database, inspect your data, and prepare a separate production database.
Web Cloudflare uses D1, accessed through the DB binding. Start with a local development database, then provision remote D1 for production.
Before You Start
Install dependencies at the repository root. Use a new development database for first setup. If this is an existing customized database, read Updating Your Project before applying migrations.
Local D1
pnpm muse:init --yes --app cloudflare
pnpm db:seed:d1
pnpm dev:cfLocal D1 comes from Wrangler's DB binding. No DATABASE_URL or Postgres service is needed. To create remote resources, set names/IDs, and apply remote migrations, follow Cloudflare Deployment.
Check Your Result
- Initialization and the matching seed command complete without database errors.
- The development user can sign in and saved account changes remain after refresh.
- Workers data remains in the local D1 database, separate from remote production data.
Common Problems
| Problem | Fix |
|---|---|
| D1 binding missing | Check DB in Workers Wrangler config; adding DATABASE_URL does not fix D1 |
| Old production data exists | Back up and design incremental migrations; do not replay the fresh-install baseline |
When You Add Tables
The schema is packages/db/src/schema-d1.ts. Generate the matching database migrations. Shared queries in packages/db/src/queries/ receive db first; application wrappers bind the driver. Components must not access the database directly.
D1 rejects interactive transaction() calls. Use the supported batch() path and test atomicity and failures.