Skip to content
s3nd
Menu

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.

 s3ndFirebase
What it isA CLI, a library and React hooks over your own S3 bucketHosted realtime document database with an offline cache
Where the data livesYour bucket: S3, R2, MinIO, Scaleway, WasabiGoogle Cloud
Both ends online at onceNo. The code is redeemed later, until it expiresNo
From inside your web appYes, through one route on your serverYes
AccountsNone. The code is the whole handshakeFirebase Auth, anonymous allowed
HostingYour bucket, plus your server when a browser takes partHosted only
PriceFree. You pay your storage provider for a few objects that expireFree tier, then per operation
LicenseMITProprietary 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.

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