Note.my

Burn-after-reading notes

Your note is encrypted in your browser. The key lives after the # in the link and never reaches the server.

How it works

  1. Your browser generates a random 32-byte key and encrypts the note with AES-256-GCM.
  2. Only the ciphertext is uploaded. The key is encoded after the # in the link, and browsers never send that part to the server.
  3. When the recipient opens the link and confirms, one SQL statement atomically fetches and deletes the ciphertext, and their browser decrypts it locally.
  4. Opening the same link a second time returns nothing at all — indistinguishable from a link that never existed.

The complete source code for this service is on GitHub: https://github.com/FreeyW/note.my

Verifiable, not just trusted

There is no encryption or decryption code on the server. The build is deterministic, so anyone can clone the repository, rebuild, and compare the artifact hashes against what this site serves. Licensed AGPL-3.0.

FAQ

Can the server read my note?

No. The decryption key sits after the # in the link, and browsers never transmit that portion. The server only ever holds ciphertext that is meaningless without the key.

What if someone else gets the link?

Anyone holding the full link can read the note, once. Share it over a channel you trust, and optionally add a password that you send separately.

Is the note really deleted?

The database row is deleted the moment it is read. Traces may linger briefly in InnoDB's unreclaimed pages and undo log. Since those traces are ciphertext without a key, they are meaningless to anyone holding the disk. See SECURITY.md.

How long can a note last?

Up to 30 days, or 1 hour, 1 day, or 7 days. You can also choose “After reading it”, which sets no expiry at all: the note waits until someone opens the link. Notes that do expire unread are removed by a scheduled job.

Is there a size limit?

About 24 KB of plaintext per note. File uploads are not supported.