Pylon vs. Firebase
Firebase is Google's mobile-first BaaS — Firestore, Realtime Database, Auth, Cloud Functions, Storage. Pylon overlaps that surface and adds declarative schema, faceted search, and authoritative game shards.
TL;DR
Pick the one that fits your shape
Choose Firebaseif
You're building a mobile-first app, you want Google's ecosystem (FCM push, Crashlytics, GA4) tightly integrated, and you accept a closed-source backend.
Choose Pylonif
You want self-host, MIT/Apache license, declarative schema instead of schemaless documents, faceted search without Algolia, no cold starts on functions, or game shards.
Architecture
Where the two diverge
| Pylon | Firebase | |
|---|---|---|
| License | MIT OR Apache-2.0 | Closed source |
| Self-hostable | Yes — any Linux box | No — Google-only |
| Schema | Declarative (TypeScript) | Schemaless (Firestore documents) |
| Functions runtime | Bun, in-process | Cloud Functions (Node, separate) |
| Function cold start | None | 1–10 seconds for cold containers |
| Full-text search | FTS5 built-in | Mirror to Algolia / Typesense / Meilisearch |
| Game shards | Yes (Shard<S: SimState>) | No |
Same shape
What both ship
Either one is a real choice for a managed mobile-first backend. The differences below are about emphasis and operational shape, not feature presence.
- Real-time sync over WebSocket
- Built-in auth (email, OAuth, anonymous)
- Functions for server-side logic
- File storage with signed URLs
- Web + mobile + native SDKs
- Managed cloud (Firebase / Pylon Cloud)
Where Pylon wins
What you get with Pylon you don't with Firebase
Declarative schema, not schemaless documents
Firestore lets any document have any shape. Great for prototyping, painful at scale (typo'd field names become orphan rows; refactors are manual sweeps). Pylon's entity() definition is the single source of truth.
No cold starts
Pylon functions run in-process. Latency is microseconds. Firebase Cloud Functions' cold-start tax (1–10s) is the single most-complained-about thing about Firebase.
Functions share a transaction with writes
ctx.db inside a mutation is a real transaction. Firebase Cloud Functions hit Firestore via the Admin SDK over network — separate process, no atomicity.
Full-text + faceted search built-in
FTS5 + roaring-bitmap facets in the binary. Firebase explicitly tells you to integrate Algolia for search. No third-party bill, no second system to keep in sync.
Self-host on day one
A Linux box and pylon serve. No vendor outage takes your app down. Firebase is Google-only — when Google's status page is red, you're red.
Predictable pricing
Firebase pricing is famously hard to reason about — reads, writes, deletes, egress, function invocations, GB-seconds, all priced separately. Pylon Cloud is one number per dimension. Self-hosted, you pay your VPS bill.
Where Firebase wins
What Firebase does better today
Honest comparison — these are real reasons to pick Firebase. If any of them are dealbreakers, choose accordingly.
Google ecosystem integrations
FCM push notifications, Crashlytics, GA4, Remote Config, A/B testing, in-app messaging. Mobile-app-shaped concerns are first-class. Pylon focuses on the backend; for these, you'd integrate FCM + Sentry + your analytics provider on top.
Mobile-first SDKs
Firebase's iOS, Android, and Unity SDKs are deeply integrated with platform features (push tokens, app-startup hooks, offline persistence). Pylon's mobile SDKs are first-class but younger.
Unlimited horizontal scale by design
Firestore is built to shard transparently. Pylon's SQLite default tops out around 70k writes/sec single-process; Postgres mode scales further but eventually hits limits. For Twitter-scale apps both Pylon and SQLite are wrong — you want Spanner / DynamoDB / Cassandra.
Migration
Coming from Firebase
Most of the dev surface translates one-to-one. The biggest deltas show up as differences in shape, not features missing.
| Firebase | Pylon |
|---|---|
| Firestore collections | entity() definitions in TypeScript |
| Security rules (custom DSL) | policy() with boolean expressions |
firestore.collection().onSnapshot() | useQuery("Entity") |
| Cloud Functions (Node, HTTP-triggered) | mutation / action in functions/*.ts |
| Firebase Auth | Magic codes / password / OAuth (export users, import as User rows) |
| Cloud Storage | /api/files/init → direct PUT (Stack0 / S3 / local) |
| Firebase Cloud Messaging | Keep FCM — register tokens via a Pylon action, send from your function |
Honest weakness
Where Pylon loses
Both / and
When using both is the right call
Try Pylon — free Hobby tier on Cloud
No card, no setup. Run a real Pylon project against managed Postgres in under a minute. Migrate from Firebasewhen you're ready — or run both.
Start free on Pylon Cloud →