Type a message, type a secret phrase, get an encrypted vault file. Send the file through one channel and the phrase through another. No account. No server. Plaintext never leaves this tab — open DevTools and watch: after this page loads, there are zero network requests. XChaCha20-Poly1305 + Argon2id, running in your browser via libsodium.
A credential during offboarding. A recovery phrase to a new employee. A document access token to a contractor for a single job. You do not want to create an account anywhere, invite anyone to a platform, or leave a copy sitting on a vendor's server. You want to hand over one thing and be done.
Signal requires trusting Signal. Email with a passphrase leaks metadata. Cloud password managers put ciphertext on someone else's hardware. Here you can open DevTools, perform an encrypt, perform a decrypt, and see zero network requests. The Content-Security-Policy on this page is connect-src 'none' — the browser itself refuses to let the page call anywhere.
They need to open the box on their phone, on a laptop they borrowed, on a machine with no software installed. This page runs in any modern browser. Drop the file, type the phrase, read the message. No install. No signup. No QR scan with a second device.
The JavaScript is SRI-locked inside the HTML. The HTML is SHA-256 signed by the BRY-NFET-SX site integrity workflow. Compare the hashes on /verify against what your browser loaded. If they match, the page you just ran is the published, signed version.
To open this box later you need two things: the box file (download below) and the secret phrase you typed (only in your head).
Your phrase is stretched by Argon2id. Strong lock (the default) uses opslimit 4 and memlimit 96 MiB — about 4 seconds per guess on modern hardware, so offline brute-force is expensive. The 16-byte salt is generated fresh per vault and stored alongside the ciphertext. Quick lock and Vault lock presets are also available.
A fresh random 32-byte vault key encrypts the message with XChaCha20-Poly1305 (24-byte content nonce, 16-byte Poly1305 tag). The vault key is then wrapped a second time with XChaCha20-Poly1305 under the Argon2id output (24-byte wrap nonce, 16-byte tag). Tampering with any byte of either ciphertext, either nonce, the salt, or the metadata breaks at least one of the two authentication tags on decrypt.
All cryptographic operations are delegated to libsodium.js, the same audited library used by Signal and many other security products. The page loads it once, runs a self-test, and refuses to enable encryption if the self-test fails.
integrity attribute on the two <script> tags. The browser refuses to execute either script if the loaded bytes don't match the SHA-384 hash. If the page rendered and the form is enabled, SRI passed.vault/index.html, vault/chat.js, and vault/sodium.js are listed there with their SHA-256 hashes.connect-src 'none' — the browser blocks any attempt to call out.Encryption that fits on one page. Verifiable. Deletable. Yours.