Zero-knowledge

How it works

We built this so that trusting us isn't required.

  1. 01

    A key is born in your browser

    When you create a paste, your browser generates a random 256-bit key with the Web Crypto API. It never leaves your device except as part of the link you share.

  2. 02

    Encrypted before upload

    Your text, title and syntax choice are compressed and encrypted with AES-256-GCM. The key is derived with HKDF-SHA256. Add a password and it is mixed in via PBKDF2-SHA256 with 600,000 iterations.

  3. 03

    The key lives after the #

    Browsers never send the URL fragment (everything after #) to the server. We receive only ciphertext — we couldn't read your paste even if we wanted to, or were forced to.

  4. 04

    Gone when it should be

    Pastes expire automatically and are purged hourly. Burn-after-reading pastes are atomically deleted the moment they are fetched, and the viewer is asked first so link previews can't destroy them.

Stored on the server
Ciphertext, IV, salts, size, expiry, burn & password flags, an optional view count, and a SHA-256 hash of your delete token.
Never stored
Plaintext, titles, keys, passwords, IP addresses, user agents, cookies, or analytics.
Third parties
Only Cloudflare Turnstile, on the create page, to keep spam bots out. It never sees your paste, and we don't send it your IP. Viewing a paste loads nothing from third parties. Fonts and code are self-hosted; a strict Content-Security-Policy blocks everything else.
Your history
“My pastes” lives in this browser's local storage only. Turn it off per paste, or clear it any time.

Caveat: end-to-end encryption protects against the server, not against a compromised device, or anyone you share the link with.