Supabase vs Neon vs PlanetScale
TL;DR
Supabase for solo founders and small teams — you get PostgreSQL, auth, storage, and edge functions in one dashboard. Neon for teams that want pure serverless PostgreSQL with branching and minimal lock-in. PlanetScale for MySQL teams that need horizontal scaling. If you're starting fresh: Supabase or Neon, full stop.
Quick Comparison
| Feature | Supabase | Neon | PlanetScale |
|---|---|---|---|
| Database | PostgreSQL | PostgreSQL | MySQL (Vitess) |
| Free tier | 500MB + 50k rows | 0.5GB storage | Scaled back (hobby $0) |
| Paid starts at | $25/mo | $19/mo | $39/mo |
| Branching | ✅ (schema-level) | ✅ (git-like) | ✅ (best-in-class) |
| Auth built-in | ✅ | ❌ | ❌ |
| Storage built-in | ✅ | ❌ | ❌ |
| Edge/serverless | ✅ Edge Functions | ✅ Serverless | ✅ |
| Row-level security | ✅ Built-in RLS | Postgres RLS | ❌ (not Postgres) |
| Realtime | ✅ Built-in | ❌ | ❌ |
| Lock-in | Medium (ecosystem) | Low (pure Postgres) | Medium (MySQL+Vitess) |
Supabase: The Full-Stack Postgres Platform
Supabase isn't just a database — it's auth, storage, edge functions, realtime, and database in one. The free tier is generous enough for side projects.
// Supabase client — one client for everything
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);
// Auth
const { data: { user } } = await supabase.auth.signInWithOAuth({ provider: 'github' });
// Database query with RLS automatically enforced
const { data: posts } = await supabase
.from('posts')
.select('*, author(*)')
.eq('published', true)
.order('created_at', { ascending: false });
// File upload
const { data } = await supabase.storage
.from('avatars')
.upload(`${user.id}/avatar.png`, file);
// Realtime subscription
supabase
.channel('posts')
.on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'posts' }, (payload) => {
console.log('New post:', payload.new);
})
.subscribe();
When Supabase Wins
- Solo founders and small teams who want one dashboard for everything
- Apps that need auth + database + storage tightly integrated
- Products that use Supabase's Row Level Security for multi-tenancy
- Teams coming from Firebase who want PostgreSQL power
- Projects where speed of development > infrastructure control
Supabase Limitations
- Free tier projects pause after 1 week of inactivity (not ideal for demos)
- Supabase ecosystem lock-in — if you use Supabase Auth + RLS + Realtime, migrating is painful
- Less control over PostgreSQL configuration vs raw Neon
- Edge Functions are Deno (not Node.js) — some npm packages don't work
Neon: Pure Serverless PostgreSQL
Neon focuses on one thing: serverless PostgreSQL with git-like branching. No auth, no storage, no extras. Just Postgres.
// Neon with Drizzle — no vendor lock-in in query code
import { drizzle } from 'drizzle-orm/neon-http';
import { neon } from '@neondatabase/serverless';
const sql = neon(process.env.DATABASE_URL!);
const db = drizzle(sql);
// Standard Drizzle/Prisma queries — database-agnostic
const users = await db.select().from(usersTable).where(eq(usersTable.active, true));
Neon Branching in Practice
Neon's killer feature: instant database branches. Every feature branch can have its own database state.
# Create a branch for a feature — instant, copy-on-write
neon branches create --name feature/new-billing-model --parent main
# Run migrations on branch without touching production
DATABASE_URL=$(neon connection-string feature/new-billing-model)
npx prisma migrate deploy
# Test in CI against the branch
# Merge PR → merge database branch → deploy to production
This is genuinely transformative for teams with complex migrations. No more "staging database is out of sync with production."
When Neon Wins
- Teams who want pure PostgreSQL with no lock-in
- Projects already using separate auth (Clerk, Auth.js) and storage (Cloudflare R2)
- Migration-heavy development where database branching pays off
- Edge-deployed apps (Neon's serverless driver works in Cloudflare Workers, Vercel Edge)
- Developers who want to self-host later — Neon is standard Postgres
Neon Limitations
- No auth, storage, or realtime built-in — you assemble these separately
- Free tier is smaller than Supabase (0.5GB vs Supabase's 500MB + auth + storage)
- Compute autoscales to zero — cold starts when inactive (50-200ms)
PlanetScale: MySQL with Supercharged Branching
PlanetScale builds on Vitess (the MySQL clustering tech behind YouTube and GitHub). Their non-blocking schema changes and database branching are the best in class.
The Key Differentiator: Non-Blocking Migrations
-- Regular MySQL: ALTER TABLE locks the entire table
-- On a large table, this can take hours and block all queries
ALTER TABLE users ADD COLUMN subscription_tier VARCHAR(20);
-- PlanetScale: deploy requests handle this transparently
-- Schema changes are applied without locking
-- Works with tables of billions of rows
When PlanetScale Wins
- Teams with MySQL experience (Rails, Laravel backgrounds)
- Apps that will need to scale to millions of rows with schema changes
- Products that need deploy request workflow for schema review
- Companies that had schema migration problems in the past
PlanetScale Limitations
- MySQL, not PostgreSQL — many boilerplates are Prisma + Postgres; need to swap
- Prisma had issues with PlanetScale's lack of foreign key enforcement (improving)
- Free tier has been scaled back significantly since 2024 — hobby plan is now paid
- Row Level Security doesn't exist (Postgres-specific feature)
Which Boilerplates Use What
| Boilerplate | Database | Notes |
|---|---|---|
| ShipFast | Supabase or MongoDB | Supabase version most popular |
| Supastarter | Supabase | RLS-based multi-tenancy |
| Makerkit | Supabase | Supabase-first, Postgres option |
| T3 Stack | PostgreSQL (any) | Usually Neon or Supabase Postgres |
| Epic Stack | SQLite + Fly / PostgreSQL | Starts SQLite, scales to Postgres |
Decision Framework
Need auth + storage + realtime in one platform?
→ Supabase
Want pure Postgres with git-like branching and no ecosystem lock-in?
→ Neon
MySQL team or need schema changes on tables with billions of rows?
→ PlanetScale
Starting small, want the simplest setup?
→ Supabase (most batteries included) or Neon (simplest pricing)
Compare boilerplates by database provider on StarterPick.
Check out this boilerplate
View Supabase on StarterPick →