Stacks vs Firebase

Firebase syncs data to clients. Stacks runs the application in the middle.

Firebase is built on the idea that the client is the application and the backend is a synchronised document store. That is a genuinely good fit for chat, presence, and offline-first mobile apps. It is a poor fit for anything with reporting, invoicing, or complex authorisation, and that is where Stacks is aimed.

What Firebase is.

In its own terms, not ours.

Firebase gives you realtime document sync, offline persistence, authentication, cloud functions, hosting, crash reporting, and analytics, with the best mobile SDKs in the category. For a small team shipping a mobile product it removes an enormous amount of work, and the free tier carries a project a long way.

Where each one wins.

Same amount of room on both sides, on purpose.

Pick Firebase for

  • Offline and sync

    Local persistence and conflict handling on mobile is hard, and Firestore does it well. Stacks has no equivalent.

  • Mobile SDK quality

    iOS and Android SDKs, push, crash reporting, and analytics from one vendor with one integration.

  • Zero operations

    No servers, no scaling decisions, and no on-call rota.

  • Time to first release

    For a prototype or a small consumer app, nothing here is faster to ship.

Pick Stacks for

  • Queries that are not a compromise

    Joins, aggregates, transactions, and reporting are ordinary SQL rather than denormalised documents and fan-out writes.

  • Security rules become code

    Authorisation lives in gates and policies you can unit test, instead of a rules language with its own failure modes.

  • Cost predictability

    Firebase bills per read and per write, and a bad query is a bad invoice. A server and a database have a shape you can forecast.

  • No lock-in

    Your data is in your own SQL database, and the application that reads it is yours.

Side by side.

The dimensions teams actually decide on.

Dimension Stacks Firebase
Data model Relational, with migrations Documents, denormalised
Queries Full SQL, joins, aggregates, transactions Document queries with index constraints
Authorisation Gates and policies in TypeScript Security rules
Realtime Channels and model broadcasts Document subscriptions with offline sync
Background work Queues, schedules, retries Cloud Functions and scheduled functions
Mobile Native builds against your own API First-party SDKs with offline support
Cost model Infrastructure you provision Per operation
Portability Your database, your servers Vendor specific

If you did move.

What ports cleanly, what does not, and where to start.

Flatten the documents first

Collections become tables and models, and the denormalisation Firestore required usually disappears.

Cloud Functions become jobs and actions

Triggered functions become model event listeners; scheduled functions become entries in app/Scheduler.ts.

Keep the client SDKs if you want

A phased move can leave auth and push with Firebase while the data layer moves.

The verdict.

Both answers are real. Most teams already know which paragraph is theirs.

Choose Firebase when

The product is a mobile or consumer app that needs offline sync and realtime documents, and you want no infrastructure at all.

Choose Stacks when

The product has relational data, reporting, billing, or authorisation rules complex enough to want tests and code review.

The frameworks that usually come up in the same conversation.