Comparison

CrescoDB vs Firebase

Firebase is the fastest way to get a mobile app talking to a database, and it has been for a decade. The two things people come looking for an alternative over are the same two every time: a bill that scales with reads rather than value, and a data model that is hard to leave. Here is how CrescoDB answers both — and where Firebase is still clearly better.

Firebase pricing figures checked September 2026 against firebase.google.com/pricing. Check it yourself before deciding — it moves.

The quick answer

Skip to the bottom line — then dig into the workflow below.

Choose CrescoDB if you…

  • want SQL — tables, joins, constraints — not a document store you query sideways
  • want a cost you can predict from your server, not your traffic
  • want to be able to leave: cresco eject hands you every row as plain SQL
  • are building a web app, API or internal tool more than a mobile app
  • want the backend to be code in your repo you can read in a diff

Choose Firebase if you…

  • are building a mobile app — the iOS, Android and Flutter SDKs are still unmatched
  • need offline-first sync that just works when the phone loses signal
  • want push notifications, Crashlytics and analytics from the same vendor
  • expect Google-scale traffic and want someone else to hold that pager
  • have a tiny app that fits inside the free tier and always will
', '

Side by side

Only what each does today.

CapabilityCrescoDBFirebase
Data modelSQL — SQLite, PostgreSQL or MySQLNoSQL document store (Firestore / RTDB)
Joins and constraints✓ real foreign keys, real SQL✕ denormalise and fan out
Where it runsYour machine, then a server you ownGoogle's infrastructure only
Self-hosting✓✕ not available
How you're billedFlat — your plan plus your own serverPer read, write, delete and GB stored
Cost at 10× the trafficSame server, or a bigger one you chooseRoughly 10× the bill
Getting your data out✓ cresco eject → plain SQLExport exists — but the schema is Firestore-shaped
Backend code you own and edit✓ real files in your repo✕ you call their SDK
Mobile SDKs✕ REST over HTTP from any language✓ first-class iOS/Android/Flutter
Offline sync✕✓ genuinely excellent
Push notifications✕✓ FCM
Auth + roles✓ per-table RBAC✓ Firebase Auth + security rules
Realtime✓ (SSE)✓ (websockets, deeply integrated)
File storage✓✓ Cloud Storage
Works with no account✓ npm create crescodb@latest my-app✕ Google account and project required
Maturity1.0, small team✓ a decade, enormous
', '

What the bill actually looks like

This is the part that sends people looking. Take a modest app: a feed that loads 30 documents per screen, 5,000 daily active users opening it four times a day. That is about 18 million reads a month.

CrescoDB

your server, your bill
  1. A $5–$20 VPS runs the API and the database.
  2. 18 million reads is a query. Postgres does not charge you per row returned.
  3. The number changes when you resize the box, and not before.
  4. Nothing about your data model was chosen to keep a counter down.

Firebase

per operation, forever
  1. Firestore bills reads at $0.18 per 100,000 — about $32/month for that feed, before writes, storage or bandwidth.
  2. Every optimisation is now also a cost decision: denormalise, cache, batch, restructure.
  3. Storage is billed at $0.26/GB on top.
  4. The Spark free tier caps Firestore at 50,000 reads a day — this app passes that on day one.
', '

The part nobody puts in a feature table

Firestore is not just a database you are renting — it is a data model you are adopting.

Because Firestore has no joins, a Firebase codebase gets shaped around that: documents are duplicated so a screen can be one read, writes fan out to keep the copies in step, and security rules encode relationships the schema cannot. None of that is bad engineering — it is the correct way to use Firestore.

But it means "we could migrate later" is rarely true in practice. The export gives you your documents; it does not give you the relational schema you never wrote. That is the lock-in, and it is structural rather than contractual.

CrescoDB's answer is not a promise, it is a command you can run before you have committed anything to us: cresco eject writes your schema, every row as plain SQL, the engine vendored into the folder, and a Dockerfile that builds from that file rather than from the internet. What happens if CrescoDB goes away is a page, not a footnote.

', '

The honest bottom line

If you are building a mobile app — especially one that has to work on a bad train connection — Firebase is still the right answer, and it is not close. Offline sync, the mobile SDKs and push notifications are a decade of work that CrescoDB does not have and is not trying to have.

If you are building a web app, an API or an internal tool, most of what you are paying Firebase for is scale you do not need yet, in exchange for a data model you did not choose and a bill that grows with traffic rather than revenue. CrescoDB gives you SQL, a flat cost, and code in your repo.

We will say the honest thing: CrescoDB is 1.0 and built by a small team. Firebase is not going anywhere. If what you want is a vendor that will outlive your project, that is a real argument and we are not going to pretend otherwise — which is exactly why we made leaving a command.

Try CrescoDB in 30 seconds

No account, no cloud project. One command.

npm create crescodb@latest my-app