There is no directly comparable price across five databases that charge for different things (compute, a fixed plan or rows): on a medium workload, Cloudflare D1 comes to $17.25 a month, Neon $18.28, Turso $24.92 and Supabase $25, but each one's limits change the decision.
1. The entry plans of five databases#
The most talked-about managed databases of 2026 do not charge for the same thing: Neon for compute and storage, Supabase for a plan, PlanetScale for cluster size, and Turso and Cloudflare D1 for rows read and written. The table gathers each one's free plan, paid entry and billing model, according to its official page read on October 17, 2026.
| Provider | Engine | Free plan | Paid entry | How it charges |
|---|---|---|---|---|
| Neon | PostgreSQL | Yes, permanent: 100 CU-h and 1 GB per project | No fixed fee: $0.106 per CU-hour (Launch) | By use: compute per hour and $0.35 per GB-month |
| Supabase | PostgreSQL | Yes: 500 MB and pauses after 1 week | From $25 a month (Pro) | Plan plus compute, disk and egress |
| PlanetScale | PostgreSQL and Vitess (MySQL-compatible) | No | From $5 a month (single-node Postgres, PS-5) | By cluster size |
| Turso | SQLite-compatible | Yes: 5 GB and 500 million reads | $4.99 a month (Developer) | Plan plus rows read and written and storage |
| Cloudflare D1 | SQLite | Yes, with daily caps: 5 million reads and 100,000 writes | $5 a month minimum (Workers Paid) | Rows read and written plus storage |
PlanetScale no longer offers a free plan: its documentation states that all databases require a paid subscription, with single-node Postgres from $5 a month. All figures are in US dollars and exclude taxes.
Go deeperSupabase pricing in 2026: Free and Pro plans and what it really costs
Documentation: Neon: pricing ↗ · Supabase: pricing and plans ↗ · PlanetScale: pricing ↗ · PlanetScale: plans ↗ · Turso: pricing ↗
2. Restore, branches and limits#
Beyond price, point-in-time restore and the number of branches or databases make the difference in daily work. The table summarizes what each provider publishes.
| Provider | Point-in-time restore | Branches or databases |
|---|---|---|
| Neon | 6 hours (Free), up to 7 days (Launch), up to 30 days (Scale) | 10 branches per project (Free and Launch), 25 (Scale); extra at $1.50 per branch-month |
| Supabase | Daily 7-day backups on Pro; point-in-time recovery as a $100 a month add-on | 2 active projects on Free |
| Turso | From 1 day (Free) to 90 days (Pro) | 100 databases on Free; unlimited on paid plans |
| Cloudflare D1 | Time Travel: 7 days (Free) and 30 days (Paid) | Databases follow Workers limits |
Documentation: Cloudflare: D1 pricing ↗ · Cloudflare: D1 Time Travel ↗
3. Three calculated workloads#
To compare different billing models, the code calculates the monthly cost of three workloads on four of the five databases. PlanetScale is left out because it charges by cluster size and its price depends on a configuration that cannot be reduced to rows. For Neon an average compute usage is assumed (0.2 CU on the first two workloads and 0.4 CU on the third, 730 hours a month); scale to zero would lower it.
TURSO = { # plan: (base, GB incl., reads incl. (M), writes incl. (M), USD/GB, USD per 1,000 M reads, USD per M writes)
"Free": (0.00, 5, 500, 10, None, None, None),
"Developer": (4.99, 9, 2_500, 25, 0.75, 1.00, 1.00),
"Scaler": (24.92, 24, 100_000, 100, 0.50, 0.80, 0.80),
"Pro": (416.58, 50, 250_000, 250, 0.45, 0.75, 0.75),
}
def turso(gb, reads, writes):
best = None
for plan, (base, gb_inc, lec_inc, esc_inc, r_gb, r_lec, r_esc) in TURSO.items():
if r_gb is None:
if gb > gb_inc or reads > lec_inc or writes > esc_inc:
continue
total = base
else:
total = base + max(0, gb - gb_inc) * r_gb + max(0, reads - lec_inc) / 1_000 * r_lec + max(0, writes - esc_inc) * r_esc
if best is None or total < best[1]:
best = (plan, total)
return best[1]
def d1(gb, reads, writes): # Workers Paid: $5 minimum; 25,000 M reads and 50 M writes included
return 5 + max(0, gb - 5) * 0.75 + max(0, reads - 25_000) * 0.001 + max(0, writes - 50) * 1.00
def supabase(gb): # Pro: $25, 8 GB included, Micro compute covered by the credit
return 25 + max(0, gb - 8) * 0.125
def neon(gb, cu_promedio): # Launch: $0.106 per CU-hour (730 h a month) and $0.35 per GB-month
return 0.106 * cu_promedio * 730 + 0.35 * gb
workloads = [("Small", 2, 200, 5, 0.2), ("Medium", 8, 4_000, 60, 0.2), ("Read-heavy", 10, 20_000, 20, 0.4)]
for name, gb, reads, writes, cu in workloads:
print(f"{name}: D1 {d1(gb, reads, writes):.2f} | Turso {turso(gb, reads, writes):.2f} | Supabase {supabase(gb):.2f} | Neon {neon(gb, cu):.2f}")| Workload | Cloudflare D1 | Turso (best plan) | Supabase Pro | Neon Launch |
|---|---|---|---|---|
| Small (2 GB · 200 M reads · 5 M writes) | $5 | $0 | $25 | $16.18 |
| Medium (8 GB · 4,000 M reads · 60 M writes) | $17.25 | $24.92 | $25 | $18.28 |
| Read-heavy (10 GB · 20,000 M reads · 20 M writes) | $8.75 | $23.24 | $25.25 | $34.45 |
The pattern is clear. With small workloads, Turso Free costs nothing and Cloudflare D1 starts at $5. On the medium workload, D1 ($17.25) and Neon ($18.28) come in below Supabase's $25, with Turso at $24.92. On the read-heavy one, D1 ($8.75) and Turso ($23.24) stay below, while Neon rises to $34.45 because its compute weighs more than rows; D1 dominates when reads are many because it charges $0.001 per million rows read. But D1 and Turso are SQLite and require a data model different from PostgreSQL; also check D1's per-database limits on its page.
Go deeperTurso vs Supabase: pricing, billing model and which to choose
Documentation: Cloudflare: Workers pricing ↗
4. Which to choose for your need#
There is no overall winner; the table turns each need into a criterion and a candidate.
| If you need… | Look first at | Usually fits |
|---|---|---|
| PostgreSQL with extensions, authentication and functions included | The engine and what comes included | Supabase or Neon |
| Pay only for what you use, with scale to zero | Compute per hour and idle time | Neon |
| Many small databases or very high reads per row | The price per million rows | Turso or Cloudflare D1 |
| Run the database next to code on Cloudflare Workers | The Workers integration | Cloudflare D1 |
| MySQL (Vitess) or PostgreSQL in a high-availability cluster | Cluster size and high availability | PlanetScale |
Before deciding, estimate your rows read and written per month, the size of your data and whether your application needs PostgreSQL extensions. Those three facts eliminate half the options.
5. What these prices do not include#
The figures in this guide are those of each provider's base plan. Several items are billed separately and can move the bill.
- Egress: Neon includes 500 GB per project on Launch and then charges $0.10 per GB; Supabase includes 250 GB on Pro.
- Extra branches: Neon charges $1.50 per branch-month above those included.
- Backups and recovery: on Supabase, point-in-time recovery is a $100 a month add-on per 7 days of retention.
- Support and security: SSO, priority support and compliance usually cost more on higher plans.
6. Keep your numbers current#
Managed database plans change often: PlanetScale withdrew its free plan and Supabase, Neon and Turso adjust quotas. The figures are those on the official pages on October 17, 2026.
- Note the date you read each rate.
- Measure your real rows read and written and the size of your data for a month.
- Compare more options in Codifly's database comparator.
Sources and scope
Documentation checked on October 17, 2026. Examples and decision criteria are editorial proposals; adapt them to your application's contract and validate them in an authorized test environment.