Local-first sync engines
A Firebase alternative for local-first apps that keep their data
A user who opens the app on a second device and finds their data there. Both handle the offline case without the app noticing.
What Firebase is
In its own terms.
Google’s hosted document database, Cloud Firestore, with realtime listeners and offline persistence on web and mobile. The SDK caches locally, queues writes while offline and reconciles when it reconnects. It is priced per document read, write and delete, and per gigabyte stored, and it comes with the rest of the Firebase platform: auth, rules, functions, hosting.
Side by side
Where they part ways.
| s3nd | Firebase | |
|---|---|---|
| What it is | A CLI, a library and React hooks over your own S3 bucket | Hosted realtime document database with an offline cache |
| Where the data lives | Your bucket: S3, R2, MinIO, Scaleway, Wasabi | Google Cloud |
| Both ends online at once | No. The code is redeemed later, until it expires | No |
| From inside your web app | Yes, through one route on your server | Yes |
| Accounts | None. The code is the whole handshake | Firebase Auth, anonymous allowed |
| Hosting | Your bucket, plus your server when a browser takes part | Hosted only |
| Price | Free. You pay your storage provider for a few objects that expire | Free tier, then per operation |
| License | MIT | Proprietary service; SDKs Apache-2.0 |
The differences
What actually changes.
Google’s servers versus your bucket
Firestore is the source of truth and it lives on Google Cloud. With s3nd the source of truth is the device, and the bucket is yours: S3, R2, MinIO, wherever you decide.
Per-operation pricing versus a few objects
Firestore bills every read and write. A snapshot is one object, written when the user asks or on a debounce, and the cost is not worth calculating.
A platform versus a primitive
Firebase is auth, rules, functions and a console. s3nd is put, get and a code. Neither is a criticism of the other.
The decision
Pick the one that fits.
Pick Firebase when
- Realtime across many users and you want Google to run all of it.
- You also want the auth, rules, functions and hosting.
- Native mobile with offline persistence out of the box.
Pick s3nd when
- The data should not live on a third party’s servers.
- Predictable cost: a few objects, not a billion reads.
- Local-first with the browser as the source of truth and no sign-in.
More comparisons
Tool by tool.
Put a file. Hand over the code.
Point it at the bucket you already pay for. Nothing to deploy, nothing to sign up for, nothing in the middle.
npm install -g @s3nd/clis3nd init --provider r2 --bucket drops3nd put ./anything.zip