Encrypted at rest
Entry titles, body text, attachment names and uploaded files are encrypted with XChaCha20-Poly1305 using a fresh random nonce each time. Each ciphertext is bound to your account, so it cannot be swapped between users.
No fine print
What protects your words, what does not, and where the honest limits are. We would rather you know exactly what you are getting than trust a padlock icon.
The layers
Entry titles, body text, attachment names and uploaded files are encrypted with XChaCha20-Poly1305 using a fresh random nonce each time. Each ciphertext is bound to your account, so it cannot be swapped between users.
Passwords are stored only as salted hashes. Sign-in attempts are throttled in the database, sessions rotate on login, and changing your password or PIN signs your other devices out immediately.
A six-digit PIN adds a second lock after sign-in and whenever you lock the journal on purpose. It is built for shared laptops, tablets and a curious housemate.
Every write carries a CSRF token and an origin check. A strict content security policy allows only our own scripts and styles, so nothing from elsewhere can run on your journal pages.
If you opt in, offline drafts are encrypted in your browser with AES-256-GCM, using a key derived from a passphrase only you know. Signing out clears them from the device.
Private pages are served with no-store headers and the service worker never caches your journal, your attachments or any signed-in response. Only the public marketing shell is cached.
The honest part
Security claims are only useful if they include their own limits. Here are ours.
What you can do
Found a security problem? Please write to support@your-domain.com with the details. We will take it seriously.
Private by design
Try it for fourteen days. No card needed.
Start your journal