How it works
Sync across devices, without us ever reading a word
MnemoNotes is end-to-end encrypted: notes are locked on your device, and only your devices, and the people you share with, hold the keys. This page explains how that works, and is honest about what it does not hide.
The short version
- Your device does the work. It encrypts every change before sending it, and decrypts what it receives.
- Our server is a post office for sealed boxes. It stores them, keeps them in order, checks who may send what, and hands them to your other devices.
- Your keys never leave your devices unencrypted. The server keeps only locked copies of them, which it cannot open.
- We treat our own server as untrusted. Your devices check signatures and keys, so a compromised server cannot read or forge your notes.
Signing in is not unlocking
You sign in with Google. That only proves who you are and gives you a session; we ask Google for an anonymous account identifier, not even your email address. Everything Google sends passes through our server, so it could never be used as a key.
Unlocking is a separate step that happens entirely on your device. It opens youraccount key: a random key made on your device when you created your account, which encrypts everything else. You can unlock it in three ways:
- A passkey, with your fingerprint, face or device PIN. Using a browser feature called the WebAuthn PRF extension, your passkey produces a secret that exists only on your device and only for MnemoNotes. Nothing is typed and nothing secret is sent.
- A passphrase, if you choose to set one, for browsers or devices without passkeys. It is stretched with Argon2id on your device.
- A recovery key, shown once when you create your account, to download or print and keep somewhere safe.
Each of these keeps its own locked copy of your account key on our server. Without one of them, that copy is useless, to us and to anyone else.
How your notes reach your other devices
MnemoNotes does not upload “the current version of your notes”. Every change you make, such as writing a note, tagging it or moving it to a folder, becomes a small operation. Your device encrypts it with AES-256-GCM, signs it, and sends it.
Laptop
You write a note
The change is encrypted and signed, stored on the laptop, then sent.
Server
Accepts and orders it
It checks you may write there, gives the change its place in line, and keeps it for your other devices. It cannot open it.
Phone
Pulls and rebuilds
Your phone fetches what is new, verifies and decrypts it, and updates its own copy of your notes.
Because every device keeps its own full copy, MnemoNotes works offline, and searching is instant: it all happens on the device. Your search terms are never sent anywhere.
A new device needs your account key once. If you use a synced passkey, such as one stored in iCloud Keychain or Google Password Manager, it already unlocks every device it reaches. Otherwise, unlock once with your recovery key or passphrase and add a passkey for that device.
Sharing without giving us the key
Every note has its own key. To share a note, your device locks that note’s key with your contact’s public key (X25519), so only their devices can open it. The server passes the locked key along, but cannot use it.
Shared documents, for teams, work the same way with one key for the whole document. When someone leaves or is removed, the document gets a new key that they never receive, so they cannot read anything written after they left.
You add contacts with a one-time invite link, which carries a fingerprint of your key. When your contact accepts, their device checks that the key it gets from the server matches. From then on, both devices remember each other’s keys and refuse to use a different one.
Why we don’t trust our own server
End-to-end encryption is only meaningful if it also holds when the server misbehaves, whether through a breach, a bug or pressure from outside. So your devices do not take the server’s word for anything that matters:
- Every change is signed (Ed25519) by the account that made it. Devices check the signature, so the server cannot forge or alter a change.
- A key is only used when a signed change from someone allowed to hand it out vouches for it. The server cannot slip a key of its own into a shared note.
- Devices check permissions themselves: an edit from someone who was not an editor at that moment is ignored, even if the server accepted it.
What our server can see
Encryption hides content, not everything. To sync and share, the server has to know some things. We would rather tell you than let you assume otherwise. It can see:
- that your account exists, and the display name you chose;
- who your contacts are, and who shares which note with whom;
- how many changes you make, when, and roughly how large they are (from which the length of a note can be estimated);
- shared documents and their members, but not their names.
It cannot see the text of your notes, their titles, your tags, your folders and documents, what you search for, or the names you give your contacts.
The one thing we cannot do for you
Because we never have your keys, we cannot reset them. If you lose every passkey, your passphrase and your recovery key, your notes cannot be recovered, by you or by us. That is why MnemoNotes asks you to save your recovery key before anything else, and to type part of it back.
The cryptography, for the curious
- AES-256-GCM for notes, keys and everything else stored.
- X25519 to share keys with contacts; Ed25519 to sign every change.
- HKDF to derive keys; Argon2id (64 MiB, 3 passes) for passphrases.
- The browser’s built-in WebCrypto, with libsodium where a browser lacks something.
- Keys are held in a separate background worker, away from the page, under a strict Content Security Policy with no third-party scripts.