Turso vs Cloudflare D1
Choose Turso when you need thousands of mostly-idle databases, deployment inside your own cloud, or microsecond local reads at the edge. Choose Cloudflare D1 when you already run on Workers and want zero-ops SQLite with global read replication and no egress charges.
Turso rebuilt SQLite in Rust as libSQL and runs a platform where a single server manages millions of databases, loading them on demand and suspending them when idle — a shape built for per-tenant and per-agent fleets, optionally in the customer's own cloud. Cloudflare D1 is a managed serverless SQLite database reached from Workers or over an HTTP API, with read-only replicas placed globally and billing that stops when queries stop. The binding constraints differ: Turso is priced around fleet storage and sync volume, D1 is bounded by a 10 GB per-database ceiling that cannot be raised and by single-threaded execution inside each database.
Ideal For: Per-tenant or per-agent database fleets, local-first reads on VMs/VPS/mobile, and teams that must deploy inside their own cloud.
Ideal For: Applications already on Workers that want zero-ops SQLite, global read replicas, and billing that stops when traffic stops.
Interactive Constraint Matcher
Calibrate your operational trade-offs below. Sliders automatically normalize to 100% to reflect strict zero-sum engineering tradeoffs.
Portable fleet you can host yourself vs platform-managed serverless with hard per-database caps
What a large fleet of mostly-idle databases costs, and how write volume is priced
How far back you can restore, and whether recovery is throttled
Where each design stops scaling, and what the operator has to remember
Based on your allocated weights, Turso offers superior durability. Cloudflare D1 remains applicable for alternative secondary constraints.
| Evaluation Pillar / Focus | Turso (Qualitative Assessment) | Cloudflare D1 (Qualitative Assessment) |
|---|---|---|
Deployment Topology & Architectural Control Portable fleet you can host yourself vs platform-managed serverless with hard per-database caps Baseline Weight:30% Can it run outside the vendor, and what is the single-database ceiling?:Structural difference | TursoRecommended Turso rebuilt SQLite in Rust as libSQL and runs a platform where one server manages millions of databases, loading them on demand and suspending them when idle; databases can run on Turso Cloud or in the customer's own cloud (BYOC). Embedded replicas put a local read replica inside the application, so reads resolve from a local file. | Cloudflare D1Conditional D1 is reachable both from Workers and over an HTTP API, and global read replication places read-only replicas across regions to cut read latency — so it is not Workers-only. But query execution and result serialization run inside the Workers platform CPU and memory limits, and each database is capped at 10 GB on the paid plan, a limit Cloudflare states cannot be further increased. |
Cost Model & Idle Economics What a large fleet of mostly-idle databases costs, and how write volume is priced Baseline Weight:25% Many idle databases vs sustained write throughput:Cost asymmetry | TursoRecommended Idle databases cost only storage, so a large fleet of mostly-idle databases stays cheap; point-in-time restore and database branching add no usage cost, and per-unit overage rates drop as you scale. Paid tiers start at $4.99/month (Developer) with unlimited databases. | Cloudflare D1Conditional D1 bills only on rows read, rows written and storage — there is no charge for idle compute and no data transfer or egress charge, and the paid plan includes 25 billion rows read per month. But writes are priced at $1.00 per million rows against $0.001 per million rows read, a roughly thousand-fold gap that makes write-heavy workloads expensive. |
Recovery & Durability Envelope How far back you can restore, and whether recovery is throttled Baseline Weight:25% Retention depth and restore throughput:Plan-dependent | TursoRecommended Point-in-time restore depth scales with the plan — 1 day on Free, 3-day retention on Developer, 14-day on Scaler and 30-day on Pro — and restoring deleted databases is retained 10, 30 or 90 days. Restore operations are not billed as usage, so practising recovery does not raise the bill. | Cloudflare D1Conditional D1 includes built-in disaster recovery and 30 days of Time Travel point-in-time recovery on the paid plan (7 days on Free), which is deeper than Turso's lower tiers. The constraint is throughput: at most 10 Time Travel restore operations per 10 minutes per database, which throttles fleet-wide recovery. |
Per-Database Concurrency & Operational Friction Where each design stops scaling, and what the operator has to remember Baseline Weight:20% Single-database throughput ceiling and known footguns:Documented limits | TursoConditional Embedded replicas serve reads locally in microseconds and guarantee read-your-writes, but they cannot be used at all in serverless environments without a filesystem, and opening the local database while the replica is syncing can corrupt it. Sync volume is billed at 4 kB page-frame granularity, so a 1-byte row write counts as a 4 kB write. | Cloudflare D1Conditional Each D1 database is inherently single-threaded and processes queries one at a time, so throughput tracks query duration — about 1,000 queries per second at 1 ms, about 10 per second at 100 ms. Additional ceilings: 1,000 queries per Worker invocation on the paid plan (50 on Free), 30 seconds maximum query duration, 2 MB maximum row or BLOB size, and 100 columns per table. |
When You Should NOT Adopt Either System
Every architectural choice introduces structural compromises. If your team matches these trigger conditions, adoption will create engineering debt rather than leverage.