selfstore vs Evolu
TL;DR: The nearest neighbour: both put the key in the user's hands and refuse to see the data. Evolu gives you SQL, a schema and a sync server (theirs by default). selfstore gives you a file the user owns and no server at all.
What Evolu is
The project in this space closest to selfstore’s convictions. A local-first framework over SQLite with typed queries (Kysely), where all data is encrypted under a key derived from a cryptographically strong secret the user holds - representable as a mnemonic. Restore on any device by entering the words. The sync server is swappable; the default is one they operate.
It is a genuinely good design, and if you want SQL on the client with real encryption, it deserves the look.
What selfstore is
Smaller and shaped differently. No SQL, no schema DSL, no query language: plain JSON collections plus binary files, an IndexedDB working copy, and a merge that runs in the browser. What it produces is the thing Evolu does not: a portable encrypted ZIP on an open spec, readable without this library at all, that the user can hold, copy and open years later.
And there is no server in the loop, swappable or otherwise: the destination is a file on their disk, their Google Drive, a WebDAV server or an S3 bucket they control.
| Evolu | selfstore | |
|---|---|---|
| Data model | SQLite, typed SQL queries | JSON collections + files |
| Queries | Yes, Kysely | None (snapshot model) |
| The user’s key | A mnemonic | A passphrase, or a passwordless group |
| Recovery | Re-enter the mnemonic | Open the backup file |
| Sync | A sync server (theirs by default) | Storage the user already owns |
| The artefact | Rows on a server, encrypted | A ZIP the user holds |
| Deletes | Soft, for time travel | Tombstoned, no history |
Use Evolu when
- You want to write SQL against local data, with types.
- A mnemonic is the recovery story you want, and a sync server is fine.
Use selfstore when
- “Where is my data” must have an answer the user can point at: a file, on something they own, that opens in any archive tool.
- You want nothing hosted, by anyone, including the library’s author.