How Tunnls works

The architecture behind the privacy claims. For anyone evaluating whether the sandbox does what we say it does.

End-to-end encryption

All conversation content — field values in both directions, and the labels the operator writes to describe those fields — is encrypted in the browser before it hits our servers. The server sees ciphertext, not plaintext, and never handles the keys that could decrypt it.

The verification handshake

ECDH with server-relayed keys is vulnerable to an active server swapping both public keys — a classic man-in-the-middle. The bingo-ball handshake closes that gap with an out-of-band human channel.

The session sandbox

A Tunnls session is a memory-only Erlang GenServer process. It exists for the duration of one conversation and dies when the operator ends it, the visitor disconnects, or the reaper timeout fires.

Open-source crypto library

The entire E2E path — keypair generation, key agreement, HKDF, AES-GCM encryption, bingo-grid derivation — lives in a standalone, MIT-licensed library:

github.com/greghgradwell/tunnls-e2e

The web app pulls it in as a git submodule under assets/vendor/tunnls-e2e/. Nothing in the application code re-implements or overrides the crypto path — what you audit in the repo is what runs in the browser. You don't have to trust us on the encryption claims; audit the library yourself.

Ready to try it?