Search selfstore
v1.8.21

selfstore vs Zero

TL;DR: Different problems wearing the same words. Zero makes YOUR server's data feel local - and needs that server. selfstore makes the user's data durable and portable with no server at all. If you have a Postgres, you probably want Zero.

What Zero is

Rocicorp’s third run at this problem, after Replicache, and it shows. You declare queries; Zero syncs exactly the rows behind them to the client, serves them from a local store at memory speed, applies your writes optimistically and reconciles them against Postgres. The developer experience is the selling point and it earns it.

The architecture is explicit about what it is: your Postgres is the source of truth, and a zero-cache process sits in front of it. That is not a caveat, it is the design - the server is where authority, permissions and durability live.

What selfstore is

The opposite premise. There is no source of truth on a server because there is no server: the user’s device holds the data, the durable copy is an encrypted file on storage they own, and other devices converge by merging that file.

Which means selfstore cannot do what Zero does. No multiplayer, no server-enforced permissions, no partial sync of a big shared dataset, no live queries. If your app is a product with accounts and a database, Zero is answering your question and this page should send you there.

Zero selfstore
Source of truth Your Postgres The user’s device
Backend Postgres + zero-cache None
Queries Declarative, synced, live None (snapshot model)
Multiplayer Yes No
Who can read the data Your server Only the user
Offline Supported The normal case
Cost at rest Hosting Zero

Use Zero when

Use selfstore when