Cloudflare names almost no customers, and the most detailed public production story is about outgrowing D1. D1 is built on Durable Objects; use the real primitive.
Don't use it when
- One database per tenant at scale: each Worker needs a binding per database (redeploy to add one), migrations run once per database through a rate-limited API (10,000 databases ≈ 42–83 minutes, and going over locks every API call for 5 minutes), and each database is capped at 10 GB.
Pricing
$5 a month covers 50M reads, 2M writes and 2 GB.
Provisioning
Official Pulumi package · Official Terraform provider
Use instead
Durable Objects for per-tenant SQLite; Neon for a normal database.
Alternatives
- Cloudflare Durable Objects Per-tenant SQLite: unlimited objects, addressed by name, each migrating its own schema on first use.
- Neon (serverless Postgres) A normal database with row-level security.
Where it fits
- A database: Don't.
A thin business case and no tooling to migrate thousands of databases. For per-tenant SQLite, use the primitive D1 is built on; for a normal database, use Postgres.
Instead: Cloudflare Durable Objects or Neon (serverless Postgres)
Last reviewed by Nicolas Dao