comparison / 01 — updated may 2026

FirebasevsSupabase

Pick the wrong one and you spend three months migrating away from it instead of shipping. Both are real backends. They are not interchangeable.

primary lang
Firebaseany · SDKs
SupabaseSQL · Postgres
pricing model
Firebasepay-per-op
Supabase$25 flat + usage
lock-in
Firebasehigh · GCP only
Supabaselow · self-hostable
updated
May 2026
verdict.txt — comparisons/firebase-vs-supabase.mdhonest
$cat verdict.txt

Pick Supabase if you'd rather write SQL than learn a new query language. Pick Firebase if you want one vendor, one bill, and you don't mind being inside Google Cloud forever.

scoreboard / at a glance

At a glance

One row per dimension, the values side-by-side. The olive dot marks the clear winner for that dimension when there is one — most rows are a wash, and that’s the point.

Google

Firebase

Backend-as-a-service. Document database, bundled auth, hosting — pay-per-operation.

open source

Supabase

Postgres + auth + storage with a flat tier. Self-hostable end-to-end if you want to be.

DatabaseDifferent data shapes. Pick the one that matches how you think.
Firestore — NoSQL document + Realtime DB
PostgreSQL — relational, full SQL
AuthBoth bundle auth. Both are fine.
Firebase Auth — built in
gotrue — built in
HostingFirebase wins on bundling here. Supabase explicitly stays out of hosting.
Firebase Hosting — static
not included — point at Vercel / Cloudflare
RealtimeBoth work. Firebase's realtime story is older, simpler, more battle-tested.
First-class — Realtime DB + Firestore listeners
Postgres replication subscriptions
StorageFunctionally equivalent for files-of-users use cases.
Cloud Storage — bundled, GCS-backed
Storage — bundled, S3-compatible
Pricing modelA flat tier is easier to budget. Pay-per-op punishes a hot read pattern.
pay-per-operation + bandwidth
flat $25/mo Pro + overage
Free tierFirebase's free tier is more generous on raw capacity; Supabase pauses idle projects.
1GB Firestore · 50k reads/day · 10GB hosting · 10k auth MAU
500MB Postgres · 50k MAU · 1GB storage · paused after 7d idle
Open sourceSelf-host if the bill, the politics, or the lock-in stop being acceptable.
proprietary
Postgres + gotrue, both Apache-2
Primary languageWash. Pick whichever your team already speaks.
any — REST + SDKs in 10+ langs
SQL
Lock-inLock-in matters more than you think the day a vendor changes pricing.
high — Google Cloud only
low — self-hostable, standard Postgres
pricing / three scenarios

Pricing at three scales

Three receipts, three scales. The line items are the same; the prices move. Every number is from the public May 2026 pricing page — we round to the nearest dollar but don’t invent.

hobby.txt — 1k MAU · low traffic · weekend projectmonthly
LINE ITEMFirebaseSupabase
Databasefree · Firestorefreefree · 500MB tierfree
Authfree · 10k MAU includedfreefree · 50k MAU includedfree
Hostingfree · 10GB tierfreeoff-platform · Cloudflarefree
Bandwidthwithin free tierfreewithin free tierfree
TOTAL · monthlyfree/mofree/mo
>Both effectively free at 1k MAU. Supabase pauses the project after 7 days of inactivity — fine for a side project, surprising the first time you hit the URL.
side project.txt — 10k MAU · steady reads · paying customersmonthly
LINE ITEMFirebaseSupabase
DatabaseFirestore reads + writes$9Pro tier · Postgres$25
Auth10k MAU — within freefree10k MAU — within Profree
Hostingstatic + CDNfreeCloudflare Pagesfree
BandwidthBlaze egress$4Pro includedfree
Storage5GB · within freefreePro includedfree
TOTAL · monthly$13/mo$25/mo
>At 10k MAU Firebase is technically cheaper, but the bill drifts with read patterns. Supabase's $25 flat is the same number every month — you'll trade for that predictability.
scale.txt — 100k MAU · realtime features · productionmonthly
LINE ITEMFirebaseSupabase
Databaseheavy Firestore reads$180Pro tier · 8GB Postgres$25
Auth100k MAU — Identity Platform$55100k MAU · usage overage$100
HostingHosting Plus$25Cloudflare Pagesfree
Bandwidthegress + CDN$90Pro 250GB + overage$18
Storage100GB · GCS$26100GB · Pro includedfree
TOTAL · monthly$376/mo$143/mo
>At scale, Firebase's pricing shape — pay per operation — is the variable that bites. Supabase's flat tier + bounded overage is the safer bill once you have predictable load.
features / deep dives

Feature by feature

One row per feature, both tools described in plain language, the honest tradeoff at the bottom. Most rows have legitimate uses for both — the goal is to surface the differences that matter, not to declare a winner on every line.

01

Auth

user accounts, OAuth, sessions
Firebase

Firebase Auth ships with email, phone, anonymous, and 10+ OAuth providers. The client SDK handles refresh tokens, redirect flows, and persistence; you wire your security rules off the resulting JWT.

Supabase

Supabase Auth (gotrue) is a thin wrapper around Postgres roles + JWTs. Same OAuth providers, same email/phone/anon flows, but the resulting user is a row in auth.users you can JOIN against.

Honest tradeoff

Both are fine. Firebase Auth feels more polished out of the box; Supabase Auth feels more powerful the moment you want to JOIN a user against your own tables.

02

Realtime

subscribe to changes
Firebase

Realtime is Firebase's home turf. The Realtime DB and Firestore both expose listener APIs that survive reconnects, batch updates client-side, and have been doing this since 2012. For chat, presence, and collaborative cursors it's still the path of least resistance.

Supabase

Supabase Realtime broadcasts Postgres logical replication events. It works — and the same mental model applies to your existing tables — but for high-fanout collaborative use cases you may end up reaching for a dedicated layer (Pusher, Ably, PartyKit) anyway.

Honest tradeoff

Firebase wins for chat-shaped problems. Supabase wins when 'realtime' means 'this table changed and three components need to know.'

03

File storage

user-uploaded blobs
Firebase

Cloud Storage on Firebase is GCS under the hood. Resumable uploads, signed URLs, security rules, image transforms via the Extensions marketplace.

Supabase

Supabase Storage is S3-compatible (or you can self-host with MinIO). Resumable uploads, signed URLs, RLS-style policies on buckets, image transforms via a built-in renderer.

Honest tradeoff

Functionally interchangeable for the 90% case. The difference is which object-storage SDK ecosystem you'd rather inherit if you ever migrate.

04

Querying & data shape

the part that defines your app
Firebase

Firestore is a document database with a deliberately limited query language: equality, range on one field, composite indexes for everything else. You design around access patterns. Joins are something you do in the client.

Supabase

Postgres is Postgres. Joins, transactions, window functions, JSON columns when you need them, full-text search, extensions for vector / geospatial / time-series.

Honest tradeoff

If your data is genuinely tree-shaped and you read more than you write, Firestore's constraints are a feature. If you have any relational shape at all — and most B2B SaaS does — Postgres pays for itself the first time you write a 3-table JOIN.

05

Local-first dev

what does the inner loop look like
Firebase

The Firebase Emulator Suite runs Firestore, Auth, Functions, and Hosting locally. It's complete enough that real CI test suites run against it, though it's a heavier process than most local DBs.

Supabase

Supabase ships a CLI that spins up the entire stack — Postgres, gotrue, storage, studio — as Docker containers. supabase start is a single command and you get a real Postgres you can psql into.

Honest tradeoff

Both have credible local stories. Supabase's wins on familiarity (Postgres is Postgres); Firebase's wins on completeness (it covers Functions and Hosting too).

06

Migrations

schema changes, in production
Firebase

Firestore is schema-less, so 'migrations' means writing a one-off script that walks every document and rewrites it. There is no native migration tool. You version your data shape in your application code.

Supabase

Supabase uses standard SQL migrations, versioned in a supabase/migrations folder, applied by the CLI. Rollbacks are real. supabase db diff writes the migration for you.

Honest tradeoff

If you've never run a migration in anger, Firestore's looseness feels like freedom. The third time you have to backfill a denormalized field across 2M documents, you'll wish for SQL.

07

Backups

the part nobody thinks about
Firebase

Firestore supports scheduled exports to Cloud Storage. Restoring from one is a project, not a button. Point-in-time recovery is available but is an extra-cost feature.

Supabase

Supabase Pro takes daily backups for 7 days, with point-in-time recovery on the higher tiers. Backups are standard pg_dump artifacts you can restore anywhere Postgres runs.

Honest tradeoff

Supabase's backups are friendlier because the underlying format is portable. Firebase's exports work, but 'restore' is closer to 'rebuild.'

08

Scaling story

what happens at 1M users
Firebase

Firestore scales horizontally without operator intervention — that's the headline feature. It will absorb a Hacker News spike without notice. The bill, however, scales with it.

Supabase

Postgres on Supabase scales vertically (CPU/RAM) until you hit read-replica territory. That's a lot of headroom on modern hardware, but it's a cliff you have to plan for, not absorb.

Honest tradeoff

Firebase trades dollars for elasticity. Supabase trades operator attention for a flatter bill. Neither is wrong; the right answer depends on whether your traffic is spiky or steady.

verdict / pick one

When to pick which

pick / firebase

Pick Firebase if…

  • You want one vendor, one bill, one console.
  • Your product is realtime-first — chat, presence, collaborative cursors.
  • Your team is mobile-heavy and the SDK ergonomics matter.
  • You're inside Google Cloud already and the lock-in is a non-issue.
  • Your data is genuinely document-shaped and writes are rare.
pick / supabase

Pick Supabase if…

  • You'd rather write SQL than learn a query DSL.
  • Your data has any relational shape at all — users, teams, billing, anything with foreign keys.
  • Predictable monthly billing matters more than absorbing spikes.
  • Self-hosting is a credible exit, even if you never use it.
  • You want the option of using your existing Postgres tooling — pg_dump, Hasura, dbt, whatever.
gotchas / observed

Gotchas, both directions

Common pitfalls visible in public docs and community discussion. None of these will stop you shipping; all of them will cost you an afternoon if you don’t know about them.

  • Firebase / pricing

    A loop that forgets to cache reads is a four-figure invoice

    Firestore charges per read. A naive useEffectthat re-subscribes on every render, or a list view that doesn’t paginate, can quietly burn through the Blaze tier in a long weekend. Set a budget alert before you write any code that reads.

  • Supabase / cold-start

    Free-tier projects pause after 7 days of idle

    The first request after the pause incurs a multi-second cold start as the Postgres instance wakes up. Fine for personal projects, surprising for a demo link you sent a customer.

  • Firebase / migration

    Schema-less means schema-everywhere

    Without enforced types at the database layer, every consumer of your data has to defensively coerce. Three apps in, that's a lot of duplicated parsing. TypeScript helps. Discipline helps more.

  • Supabase / connections

    The pooler URL is not the same as the direct URL

    Serverless functions must use the pgbouncer (pooler) URL or you'll exhaust the 200-connection limit on the first viral moment. The Supabase docs are clear about this; people miss it anyway.

  • Firebase / lock-in

    There is no migration off Firestore that isn't a rewrite

    The data model, the security rules, the listener API — none of them have an equivalent elsewhere. Plan for the lock-in up front; don't discover it three years in.

  • Supabase / RLS

    Row-level security policies fail open if you forget them

    A new table with no RLS enabled is publicly readable through the anon key. Not a bug, a posture — but turn RLS on by default in your migrations or you'll ship a leak.

migration / observed patterns

Migrating between them

Editorial framing only — we have not migrated either way ourselves. What follows is the pattern visible in public post-mortems, GitHub issue threads, and conference talks. Take it as observed-pattern, not lived experience.

Firebase ━▶ Supabase

A common pattern: teams migrate when their Firestore bill crosses the line where a $25 flat tier looks attractive, or when they want SQL for a feature they keep deferring. The mechanics are tedious but well-trodden — write a one-off Node script that walks Firestore, flattens documents into Postgres tables, and replays auth users into gotrue using the admin API.

The painful part is the application code, not the data. Listener APIs, security rules, and the document-vs-row mental model all have to be rewritten. Most observed migrations spend three or four weeks on the application layer for every week spent on the data layer. Plan accordingly; don't promise a one-sprint port.

Supabase ━▶ Firebase

Less common in public discussion, but it does happen — usually when a team commits hard to realtime-first features and decides Firestore's listener API is the path of least resistance. The data path is the harder direction here: relational schemas don't translate to documents without a redesign, and foreign keys become application-level invariants.

Auth is the easier piece — gotrue users export cleanly, and Firebase Auth's import API accepts the bcrypt hashes. Storage is a bucket-to-bucket copy. The schema redesign is the project; the rest is a weekend.