/ tool-comparisons / Turso vs Cloudflare D1 for Solo Developers
tool-comparisons 10 min read

Turso vs Cloudflare D1 for Solo Developers

Comparing Turso and Cloudflare D1 for solo developers. Two edge SQLite databases, different ecosystems. Features, pricing, pros and cons, and which one to pick.

Hero image for Turso vs Cloudflare D1 for Solo Developers

Quick Comparison

Feature Turso Cloudflare D1
Type Edge-hosted SQLite (libSQL fork) Cloudflare-native SQLite
Free tier 500M reads, 10M writes, 5GB, 100 DBs 5M reads/day, 100K writes/day, 5GB total
Paid entry Developer $4.99/mo, Scaler $24.92/mo Bundled into Workers Paid ($5/mo min)
Read overage $0.80 per billion reads (Scaler) $0.001 per million reads (Workers Paid)
Write overage $0.80 per million writes (Scaler) $1.00 per million writes (Workers Paid)
Max DB size No fixed per-DB cap published 10GB per database, up to 50K databases
Multi-region Yes, embedded replicas (in-process) Yes, global read replication (GA 2024, replication beta 2025)
Platform lock-in None, libSQL is open (16.8K stars) Cloudflare Workers / Pages only
Solo Dev Rating 8/10 8/10

Turso Overview

Turso is libSQL hosted globally with embedded replicas. libSQL is a fork of SQLite with networked replication built in. You write to a primary, you read from local replicas, and if you embed the replica directly in your application process, reads have zero network latency. For read-heavy applications that's a meaningful win.

The pricing is generous. The free tier (500 million row reads, 10 million row writes, 5GB of storage, and up to 100 databases per month, checked May 2026) handles real production traffic, and the Scaler tier at $24.92 per month covers most solo dev SaaS workloads. There is also a $4.99 Developer plan in between with 2.5 billion reads and 25 million writes. The Turso CLI is good. The developer experience is straightforward if you know SQLite.

The key thing about Turso is that it's not locked to any one platform. You can run it from a Vercel function, a Hetzner VPS, a Cloudflare Worker, a Fly.io container, or your laptop. The libSQL client speaks plain SQLite. If Turso disappeared tomorrow, you could self-host libSQL or migrate to plain SQLite without rewriting your queries.

Cloudflare D1 Overview

D1 is Cloudflare's own SQLite-on-the-edge product. It only runs inside the Cloudflare ecosystem. You access it from Workers or Pages Functions through a binding, not a connection string. The query language is SQLite, but the runtime experience is Cloudflare-specific.

The biggest advantage of D1 is integration. If you're already on Workers, D1 is one wrangler.toml binding away. No separate account, no separate billing, no separate auth token. You write to it like you'd write to KV or R2. For people deep in the Cloudflare stack, D1 is the path of least resistance.

D1 went GA in April 2024 and has matured fast. Global read replication arrived in beta during Cloudflare's Developer Week 2025, replicas are created automatically per region and routed to transparently at no extra charge. D1 also offers time travel for point-in-time recovery, and the Workers Paid plan (a $5 per month minimum account charge) includes generous D1 quotas: 25 billion row reads, 50 million row writes, and 5GB of storage per month before any overage. Each database can hold up to 10GB and an account on Workers Paid can run up to 50,000 databases. For most solo dev projects, D1 sits inside that included bundle and is effectively free.

Key Differences

Platform lock-in is the real choice here. D1 only works on Cloudflare's runtime. Turso works anywhere. If you want to move off your hosting provider later, Turso travels with you. D1 doesn't. This isn't theoretical, hosting decisions change as projects grow.

Embedded replicas vs automatic read replicas. Turso's embedded replicas put the entire read copy inside your app process. Latency is zero, because there's no network call. D1's read replicas live across Cloudflare's edge but you still pay one network hop to reach them. For most apps the difference is unnoticeable, but for query-heavy workloads embedded replicas are noticeably faster.

Cost structure. D1 wins on raw cost if you're already on Workers Paid. The $5 per month minimum account charge bundles D1 quotas (25 billion reads and 50 million writes per month) that would land you on a paid Turso tier at standalone pricing. Turso's free tier is fine for hobby projects, but production peace of mind tips into the Developer plan ($4.99) or the Scaler tier ($24.92). The read overage rates are where the two products diverge hard: D1 charges $0.001 per million reads on Workers Paid, while Turso's Scaler tier charges $0.80 per billion (which works out to $0.0008 per million), so they are within rounding distance per read but Turso's free read allowance is far smaller than D1's bundled 25 billion. If you're cost-sensitive and already paying for Workers, D1 usually saves you money.

Schema migration tooling. Neither has great built-in migrations. Turso pairs well with Drizzle Kit or Prisma. D1 has its own wrangler migrations CLI which is functional but barebones. Drizzle has solid D1 support too, which evens the playing field.

Ecosystem maturity. Turso's libSQL is the same fork that several other projects use, which means the surrounding tooling (drizzle, kysely, lots of community examples) is mature. D1 has Cloudflare's polish but a smaller community footprint outside the Workers ecosystem.

By the Numbers (2026)

All figures below were checked on 2026-05-29 against vendor pricing pages, the npm registry, and the GitHub API. Sources are listed at the end.

Versions and adoption

  • libSQL latest server release: libsql-server-v0.24.32 (published 2025-02-14). The libSQL repo sits at about 16,788 GitHub stars and 497 forks.
  • The newer in-process Turso rewrite (tursodatabase/turso) is at roughly 18,998 stars, signaling an active second engine generation.
  • @libsql/client (the JS/TS driver) latest version is 0.17.3, with about 1,040,148 npm downloads in the week of 2026-05-22 to 2026-05-28.
  • Wrangler (D1's required CLI, part of cloudflare/workers-sdk, about 4,104 stars) latest version is 4.95.0, with about 20,330,035 npm downloads in the same week. Wrangler's download count covers all of Workers, not D1 alone, so treat it as ecosystem scale rather than D1 usage.
  • Drizzle ORM, which both products lean on for migrations and typed queries, pulled about 9,716,882 npm downloads that week.

Turso pricing tiers (turso.tech/pricing)

  • Free: $0, 100 databases, 5GB storage, 500 million row reads/month, 10 million row writes/month, 3GB syncs, 1-day point-in-time restore.
  • Developer: $4.99/month, unlimited databases, 9GB storage (+$0.75/GB), 2.5 billion reads (+$1/billion), 25 million writes (+$1/million), 10-day restore.
  • Scaler: $24.92/month, 24GB storage (+$0.50/GB), 100 billion reads (+$0.80/billion), 100 million writes (+$0.80/million), 30-day restore.
  • Pro: $416.58/month, 50GB storage, 250 billion reads, 250 million writes, 90-day restore, plus SSO, BYOK, HIPAA, and SOC2.

Cloudflare D1 limits (developers.cloudflare.com/d1/platform/pricing)

  • Workers Free: 5 million row reads/day, 100,000 row writes/day, 5GB total storage.
  • Workers Paid: $5/month minimum account charge. Included monthly: 25 billion row reads, 50 million row writes, 5GB storage. Overage: $0.001 per million reads, $1.00 per million writes, $0.75 per GB-month.
  • Per-database cap: 10GB. Account database cap on Workers Paid: 50,000.

When to Choose Turso

  • You want flexibility about where your app runs
  • Embedded replicas for zero-latency reads matter
  • You're hosting outside Cloudflare (Vercel, Fly.io, Hetzner, your laptop)
  • You want libSQL features as they ship (vector search, sync)
  • You're worried about lock-in to a single cloud

When to Choose Cloudflare D1

  • You're already all-in on Cloudflare Workers or Pages
  • You want the cheapest possible database for a serverless app
  • You want one bill, one account, one wrangler.toml binding
  • You like time-travel point-in-time recovery built in
  • You don't expect to leave the Cloudflare ecosystem

The Verdict

For solo developers, this comes down to one question: are you committed to Cloudflare's runtime?

If yes, D1 is the right call. It's cheaper inside the Cloudflare bundle, the integration is seamless, and you don't need a second account. Workers Paid at $5/mo with D1 included is one of the best deals in serverless.

If no, Turso. Embedded replicas are genuinely faster for read-heavy workloads, libSQL works anywhere, and you keep the option to change platforms without rewriting your database layer. The lock-in cost of D1 is invisible until the day you want to leave Cloudflare and discover your data is stuck inside a binding.

My default recommendation for new solo projects in 2026 is Turso, mostly because the optionality matters more than the few dollars saved. But if you've already picked Workers as your runtime and you're sure you're staying, D1 is the cleaner choice.

Real Cost at Solo-Dev Scale

Pick a workload that looks like a real solo SaaS rather than a benchmark: 200 million row reads per month, 5 million row writes per month, and 2GB of stored data. Run that number through each product's published rates (checked 2026-05-29).

Cloudflare D1 on Workers Paid. The $5 per month minimum account charge is the floor. 200 million reads is well under the 25 billion included, so $0 in read overage. 5 million writes is under the 50 million included, so $0 in write overage. 2GB is under the 5GB included, so $0 in storage. Total: $5/month, and that $5 also pays for your Workers compute.

Turso Free. 200 million reads is under the 500 million free allowance, 5 million writes is under the 10 million free allowance, and 2GB is under the 5GB free allowance. Total: $0/month. The catch is the 1-day point-in-time restore and no contractual support, which is why production teams usually move up a tier.

Turso Developer. If you want the 10-day restore window and 2.5 billion reads of headroom, that is $4.99/month flat at this workload (everything stays inside the included quotas). Total: $4.99/month.

So at this scale all three options land between $0 and $5 per month, and the real tiebreaker is not the bill, it is whether the $5 you owe Cloudflare is also buying your runtime. If you are on Workers anyway, D1 is free in the sense that you already paid. If you host elsewhere, Turso's free or $4.99 tier covers the same workload without forcing you onto a runtime.

Where the gap opens is heavy read traffic on a non-Cloudflare host. At, say, 30 billion reads per month, D1 on Workers Paid charges $0.001 per million on the 5 billion above its 25 billion allowance, which is about $5 of overage on top of the $5 base, so roughly $10/month. Turso's Scaler tier ($24.92) includes 100 billion reads, so the same 30 billion sits inside the plan with no overage. The crossover point depends entirely on your read volume and where your app runs, so plug your own numbers into the rates in the table above before committing.

Sources

All sources checked on 2026-05-29.

Built by Kevin

Like this? You'll like what I'm building too.

Two ways to support and get more of this work.

Desktop App

HEARTH

A privacy-first Life OS for your desktop. Journal, tasks, and notes that stay on your machine. Coming soon, direct download from this site.

Read more
Digital Products

MY TOOLKITS

Receipts-first toolkits for shipping after hours, building Claude agents, publishing on Amazon, and more. The exact methods I used, not theory.

Browse on Whop