Search selfstore
v1.8.21

Comparisons, written to be fair

Every page below includes a "use the other tool when" section that we mean sincerely. A storage library you picked for the wrong job helps nobody, least of all us. Several of these are not rivals at all: a CRDT and selfstore solve different halves of the same app, and the pages say so.

Tool Category Needs a server User-holdable backup End-to-end encrypted sync
selfstorePersistence loopNoYes, spec'd ZIPYes
Browser storage
localStorage Key-value strings No No No sync at all
raw IndexedDB Storage engine No Build it yourself No sync at all
Dexie.js IndexedDB query wrapper Only for Dexie Cloud sync Build it yourself Through the hosted service
browser-fs-access File picker ponyfill No Whatever you write Build it yourself
Client databases
PouchDB Document database Yes, a CouchDB you run Build it yourself No: cleartext to your server
RxDB Reactive database platform Endpoints you run, for sync Export utilities Plugin, depends on setup
TinyBase Reactive in-memory store For its sync server, yes Build it yourself Build it yourself
Sync engines
Zero Server-backed sync engine Yes, Postgres plus zero-cache Not the model No: your server holds the data
ElectricSQL Postgres read-path sync Yes, Postgres plus the sync service Not the model No: your server holds the data
CRDT runtimes
Yjs Sequence CRDT For live collaboration, yes Build it yourself Build it yourself
Automerge Document CRDT with history For live sync, yes (a repo peer) Its own binary document Build it yourself
Local-first, encrypted
Evolu Encrypted local-first SQLite A sync server (theirs by default) The mnemonic restores it Yes
Jazz Local-first framework with sync server Yes, a sync server Not the model Yes
Fireproof Embedded verifiable ledger Optional cloud for sync Its own ledger format Yes
remoteStorage Bring-your-own-storage protocol Yes, the user's own RS server Files on their server Not by default

Browser storage

Client databases

Sync engines

CRDT runtimes

Local-first, encrypted