Search selfstore
v1.8.21

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

Use selfstore when