a sync server with no account, only a key
Shiori
Anonymous, end-to-end encrypted library sync. There's no username and no email; you get a random key instead of an account. The server only ever sees ciphertext, and it has no way to decrypt it. Accounts that go quiet delete themselves.
No identity, ever
There's nothing to sign up with and nothing to leak. Your account is just a random 155-bit root key. Lose that key and the account's gone. There's no password to reset, because there's no "you" on file for anyone to look up.
The server can't read your data
Everything is encrypted on your device before it ever leaves, using a key derived from the root key you hold. The server just routes ciphertext around; it has no way to decrypt what it's holding.
How it holds up
- One key, derived down. The root key you generate the first time you run it fans out via HKDF into an account identifier, a signing key, and an encryption key, deterministically, so the same root key always produces the same three. The server never actually sees the root key itself.
- Requests are signed, not logged in. Every request carries a timestamp and a signature over a canonical string. The server checks that the timestamp's still fresh, verifies the signature, then records the nonce so it can't be replayed. No sessions, no cookies to manage.
- All actions go through the client. You can delete your data and keys straight from the app, and if you stop reading for a while, your data gets removed on its own. Keeps my server lean, and your privacy... well, private, I suppose.
Why not just use SyncYomi?
Shiori owes a lot to SyncYomi; it's the project that convinced me self-hosted sync for reading progress was worth building in the first place. But running it left a few gaps I kept wanting fixed: no way to avoid self-hosting short of falling back to Google Drive, an auth model that isn't end-to-end encrypted, and basically one container per person. You can host multiple users on one instance, but the admin has to pass around the API keys by hand. An all-around hassle.
| SyncYomi | Shiori | |
|---|---|---|
| Hosting | Self-host, or store your backups in Google Drive instead | Self-host, or use a shared instance; it's zero-knowledge either way |
| Security model | API-key auth; the server can read what it stores | End-to-end encrypted; the server only ever sees ciphertext |
| Users per instance | One, a new user means a new container | As many as you want; an account is just a key, not a config |