Supabase gives you a Postgres database with SQL, joins and row level security, plus auth, storage and realtime. Firebase centres on Firestore, a NoSQL document store with offline sync and security rules, inside Google Cloud. Choose Supabase for relational data and predictable plans; choose Firebase for mobile-first apps that need offline sync and Google services.
| Supabase Free | Firebase Spark | |
|---|---|---|
| Database | 500 MB Postgres | 1 GiB Firestore, 50K reads and 20K writes a day |
| Auth users | 50,000 MAU | 50K MAU (50 for SAML/OIDC) |
| File storage | 1 GB | 5 GB stored, 1 GB/day download |
| Server code | Edge Functions | Cloud Functions need the Blaze plan |
| Catch | Paused after 1 week idle; 2 active projects | Daily caps; upgrade means pay-as-you-go |
Updated
Most comparisons online were written before either pricing page changed. This one quotes both pricing pages as they stood in October 2026, lets you test your expected usage against each free tier, and shows the same three jobs (sign up, read your own rows, listen for changes) in both SDKs so you can judge the code, not just the feature list.
Enter your expected monthly active users, database size, file storage and daily reads to see whether each free tier covers them, using the October 2026 limits above.
Supabase Free: no daily read cap; 5 GB of egress is the related limit. Projects pause after a week idle; Pro is $25 a month.
Firebase Spark: going over means moving to Blaze, which bills usage past the same free amounts.
| Feature | Supabase | Firebase |
|---|---|---|
| Database | Postgres (SQL, joins, extensions) | Firestore (NoSQL documents); Data Connect for SQL |
| Access rules | Row level security policies in SQL | Security rules language on document paths |
| Auth | Built in; 50K MAU free | Email, OAuth providers, anonymous; 50K MAU free |
| Realtime | Postgres changes, broadcast, presence | onSnapshot listeners with offline cache |
| Server code | Edge Functions | Cloud Functions (Blaze plan only) |
| Hosting | Not a web host | Firebase Hosting, 10 GB stored free |
| Open source | Yes, self-hostable | No; local emulators only |
Figures from supabase.com/pricing and firebase.google.com/pricing. Prices change, so check both pages before you commit.
| Supabase Pro | Firebase Blaze | |
|---|---|---|
| Base price | $25 a month | No base fee, pay as you go |
| Database | 8 GB per project included | Firestore billed per read, write and GiB after free quotas |
| Auth | 100,000 MAU, then $0.00325 per MAU | 50K MAU free, then Google Cloud pricing |
| Storage | 100 GB, then $0.0213 per GB | 5 GB free, then $0.026 per GB stored |
| Egress / download | 250 GB, then $0.09 per GB | $0.12 per GB downloaded from Storage after free tier |
With a row level security policy on todos, the select only returns rows owned by the signed-in user.
import { createClient } from "@supabase/supabase-js";
const supabase = createClient(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY);
await supabase.auth.signUp({ email: "[email protected]", password: "a-long-passphrase" });
const { data: todos, error } = await supabase
.from("todos")
.select("id, title, done")
.order("id");Enable row level security, then allow signed-in users to select only their own rows.
alter table public.todos enable row level security;
create policy "Owners read their todos"
on public.todos for select
to authenticated
using ( (select auth.uid()) = user_id );The modular SDK; onSnapshot fires immediately with current data and again on every change.
import { initializeApp } from "firebase/app";
import { getAuth, createUserWithEmailAndPassword } from "firebase/auth";
import { getFirestore, doc, onSnapshot } from "firebase/firestore";
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const db = getFirestore(app);
const { user } = await createUserWithEmailAndPassword(auth, "[email protected]", "a-long-passphrase");
const stop = onSnapshot(doc(db, "users", user.uid), (snap) => {
console.log(snap.data());
});Each user can read and write only the document whose id matches their uid.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
Postgres stores rows in tables with foreign keys, so a query can join users, orders and products in one round trip. Firestore stores JSON-like documents in collections, and you shape the data around the screens that read it, often duplicating fields.
Neither is better in the abstract. Dashboards, marketplaces and anything with reporting lean towards Postgres. Chat, feeds and offline-first mobile apps fit documents well.
Supabase uses Postgres policies. A rule like (select auth.uid()) = user_id is attached to the table and applied to every query, whether it comes from the browser or a server.
Firebase uses security rules written in its own language, matched against document paths, such as allowing a read when request.auth.uid equals the userId in the path. Both approaches fail open if you forget them, so test them before launch.
A Supabase database is ordinary Postgres, so pg_dump moves it to any Postgres host. Auth and storage need more work, but the data itself travels.
Leaving Firestore means exporting documents and redesigning them as tables or another document store, which is a bigger project for large apps.
It depends on the shape of your usage. Supabase Pro is a flat $25 a month with 8 GB of database, 100,000 MAU and 250 GB egress included, as of October 2026. Firebase Blaze has no base fee but charges per operation beyond the free allowances, so a low-traffic app can cost less and a read-heavy one more.
Firestore itself is a document database without SQL. Firebase's pricing page now lists Data Connect (shown as SQL Connect) backed by Cloud SQL, which on Spark is a three month trial only. Supabase is Postgres from the start.
Firestore's onSnapshot listeners are built into the core SDK and pair with offline persistence on mobile. Supabase Realtime streams Postgres changes and broadcasts over channels. For collaborative web apps both work; Firebase has the edge when phones go offline often.
Supabase is open source and can be self-hosted with Docker. Firebase is a Google-managed service and cannot be self-hosted, although its local emulator suite runs on your machine for development.
Yes. The pricing page says free projects are paused after one week of inactivity, and paid projects are not paused. You can have two active free projects.
Related: Next.js authentication options, Next.js Route Handler examples, JavaScript fetch and async/await, Free Next.js templates, Web dev projects for beginners.
Start for free or see all free tools. We.Inc is free to start, with no card needed. AI building is on paid plans from $20 a month.
We.Inc is an AI-powered website builder you can resell under your own brand. Launch a branded client dashboard, bill on Stripe Connect, and deliver AI-generated websites in minutes. White-label plans start at $99 a month for 25 client sites, with a 7-day free trial and no per-site fees.