Local-first sync engines
A Replicache alternative for one-shot moves rather than multiplayer
Optimistic local writes, an app that keeps working offline, and data that shows up on the user’s other device.
What Replicache is
In its own terms.
A client-side sync framework from Rocicorp. Your app writes to a local cache through mutators, Replicache pushes them to your backend and pulls updates back, and you implement push and pull on your server against your own database. Rocicorp now builds Zero, a query-driven successor with its own sync server.
Side by side
Where they part ways.
| s3nd | Replicache | |
|---|---|---|
| What it is | A CLI, a library and React hooks over your own S3 bucket | Client sync framework with push and pull on your backend |
| Where the data lives | Your bucket: S3, R2, MinIO, Scaleway, Wasabi | Your backend database, cached on the client |
| 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 | Whatever your backend requires |
| Hosting | Your bucket, plus your server when a browser takes part | Your backend; Zero adds a sync server |
| Price | Free. You pay your storage provider for a few objects that expire | Free |
| License | MIT | Source available; Zero is Apache-2.0 |
The differences
What actually changes.
A framework with a backend contract versus a primitive
Replicache asks you to implement push and pull, keep a version per client and per space, and store everything in a backend database. s3nd asks for a bucket and gives you put and get.
Multiplayer versus a personal transfer
Replicache is built for many clients editing shared data in realtime with rebase and conflict resolution. s3nd is built for one person carrying their own data to their next device.
Identity implied versus none
Push and pull need to know who the client is. A sync code needs to know nothing.
The decision
Pick the one that fits.
Pick Replicache when
- Multiplayer, realtime, optimistic UI against your own backend.
- You are ready to implement push and pull, or to adopt Zero.
Pick s3nd when
- There is no backend database to sync against.
- The move happens once, or a backup is rewritten occasionally.
- Codes, not accounts.
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