DEV Community

niuniu
niuniu

Posted on

I Ran the Same App on Supabase, Neon, and PlanetScale Free Tiers — One Clear Loser

Three months ago I built a small link-analytics tool and couldn't decide where to put the database. Instead of reading more marketing pages, I deployed the identical schema and workload to all three "generous free tier" databases and measured for 30 days.

The workload: 2 tables (links, clicks), ~210k rows, 40k reads/day, 3k writes/day, one aggregate dashboard query that joins and groups.

The scoreboard after 30 days

Metric Supabase Free Neon Free PlanetScale Free
Engine Postgres 15 Postgres 16 (serverless) MySQL 8 (Vitess)
Storage included 500 MB 512 MB 5 GB
Compute shared, pauses after 1wk idle 0.25 CU, autosuspend 1 PSU
p50 dashboard query 88ms 41ms (warm) 260ms
Cold start penalty 0 (paused = project dies) 300–800ms 0
Branching (git-style) ✅ free ✅ free
Foreign keys ⚠️ restricted
Times my app broke 2 (project paused) 0 1 (FK surprise)

The loser: PlanetScale (for this use case)

The 5GB storage is genuinely the most generous, and Vitess scaling is impressive tech. But for a normal CRUD app it was the worst experience: no traditional foreign key constraints (I learned this in production when an orphaned row showed up), and the aggregate dashboard query ran 3–6x slower than either Postgres option. PlanetScale is built for massive sharded scale — my 210k rows are exactly what it's not for.

The winner: Neon, with one caveat

Serverless Postgres with database branching changed how I work — every PR gets its own database branch, migrations tested against real data, deleted on merge:

neonctl branches create --name pr-142
# run migrations against the branch, zero risk to prod
Enter fullscreen mode Exit fullscreen mode

The caveat: autosuspend cold starts. First query after idle adds 300–800ms. For my dashboard nobody noticed. For a latency-sensitive auth lookup, I wouldn't accept it.

Supabase lost on the idle-pause behavior — free projects pause after a week of inactivity and I had two "site is down" mornings before I added a keep-alive cron. But if you need auth + storage + realtime + DB in one free bundle, Supabase is still unbeatable value.

My controversial takeaway

"Pick Postgres or MySQL" is the wrong question in 2026 — the real question is whether your access pattern tolerates cold starts. Serverless Postgres (Neon) wins for bursty dev/staging workloads; always-on shared Postgres (Supabase) wins for anything user-facing that can't eat 800ms.

I sketched the benchmark harness with MonkeyCode (free, open-source AI coding assistant) — it generated the three nearly-identical repo scaffolds and the p50/p99 measuring script: https://ly.cyberserval.tech/iIETXiF

Which free tier are you betting your side project on — and has the cold start ever actually bitten you?

Top comments (4)

Collapse
 
awalias profile image
awalias

Hey Supabase CTO here! thanks for trying us out. I have some corrections:

  • Supabase compute is not shared, it’s a dedicated EC2 instance even on the free tier.
  • for the workload described (40k reads/day, 3k writes/day) your instance would not pause as by definition it would not be inactive for 7 days and therefore no cold start.
  • Supabase does have branching: supabase.com/docs/guides/deploymen...
  • Postgres 17 is the current platform default on Supabase
Collapse
 
proziam profile image
Proziam

It's depressing that you have to reply to this AI-generated hit piece

Collapse
 
awalias profile image
awalias

haha I agree 😆

Collapse
 
meg528 profile image
Meg528 • Edited

Hi there. I work at PlanetScale, and I have some corrections. The PlanetScale details here describe a product that hasn't existed for a while:

  • PlanetScale has no free tier, and hasn't since the Hobby plan was retired in April 2024. There's no "5 GB free" plan and no "1 PSU," so a 30-day benchmark on the "PlanetScale Free" tier couldn't have been run. Our entry point today is a $5/month single-node Postgres database.
  • PlanetScale isn't MySQL-only anymore. We launched PlanetScale for Postgres, so "Postgres vs. PlanetScale" is a false dichotomy. If you prefer Postgres, you can run it on PlanetScale.
  • Foreign key constraints are supported. They went GA on our Vitess/MySQL databases back in early 2024 and can be enabled in database settings. On PlanetScale Postgres, they're just standard Postgres FKs. The "learned about missing FKs in production" anecdote isn't possible on a current database.
  • "PlanetScale is built for massive sharded scale" is true but not the full story. PlanetScale is a great solution for businesses of all scale. Single-node and HA cluster options are sized for exactly the kind of small CRUD app described here, and Metal clusters with local NVMe and unlimited IOPS are built for performance at any size. A simple two-table aggregate query running 3–6x slower than the alternatives doesn't reflect anything we'd expect to see.
  • On performance claims generally: We publish open, reproducible benchmarks at planetscale.com/benchmarks, including full methodology, the exact datasets and sysbench/TPCC scripts, and instructions so anyone can reproduce the results themselves. We compare PlanetScale Postgres against Neon, Supabase, Aurora, and others. If you're evaluating options, I'd start there rather than with numbers that can't be verified.

Happy to answer questions if anyone's genuinely comparing options, but I'd take this particular comparison with a large grain of salt, since it benchmarks a plan that was discontinued in 2024.