How tosstome works
tosstome is a small service on Cloudflare Workers plus a web page. The server introduces devices to each other and, only when it has to, passes data along. It never stores files.
1. Finding each other
When you open the page, the browser connects to the server over a WebSocket. Devices whose connections come from the same public IP address, which usually means the same home or office network, are put in the same group and shown in each other's Nearby list. The address is hashed before it is used. For devices on different networks, a 6-digit code puts them in a temporary group of their own.
2. Connecting directly
When you tap a device, the two browsers exchange WebRTC connection details through the server and try to open a direct data channel, using Cloudflare's STUN service to discover how to reach each other through home routers. A direct WebRTC channel is encrypted end to end by the browsers (DTLS).
3. Falling back to a relay
Some networks block direct connections: corporate firewalls, guest Wi-Fi, mobile carriers with carrier-grade NAT. If the direct channel does not come up within a few seconds, both sides connect to a relay on Cloudflare instead. The relay forwards each chunk as it arrives and keeps nothing. Traffic to and from the relay is encrypted with TLS, but the relay is not end-to-end encrypted yet; that is on the roadmap.
4. Moving the data
The same transfer protocol runs in the browser and in the command line tool: small JSON control messages plus binary chunks, with acknowledgements from the receiver so the sender never floods a slow connection. It behaves the same over a direct channel and over the relay.
5. Inboxes
The command line tool keeps an always-on inbox. It creates two secret keys: an agent key that stays on the computer, and a send key that goes in the inbox link after the #. Browsers do not send that part of a link to the server, and the key is passed inside the WebSocket instead. The server keeps only SHA-256 hashes of both keys. When a phone opens the link and sends, the server hands both sides a relay session and the files go to the inbox folder.
What is not built yet
- End-to-end encryption on the relay path
- Signed, persistent device pairing in the browser
- Rate limits beyond the per-role lockout on wrong inbox keys
Read the privacy page for what the service sees.
Questions
Is tosstome end-to-end encrypted?
Direct WebRTC transfers are, by the browser's DTLS. Relayed transfers are encrypted between each device and Cloudflare with TLS, but not end to end yet.
What is WebRTC?
A browser standard for real-time, peer-to-peer connections, used by video calling apps. tosstome uses its data channels to send files directly between browsers.
Are my files uploaded or stored anywhere?
No. Files go straight from one device to the other over WebRTC when the networks allow it. When they do not, the file passes through a relay on Cloudflare that forwards the bytes as they arrive and keeps nothing. If the receiver is offline, nothing is sent.
Why does it need the internet if it is peer to peer?
The browsers need a server to find each other and exchange connection details. Once connected directly, file data goes between the devices.
Related
- Privacy
- Share files between devices on different networks
- Send large files without uploading them
- Snapdrop alternatives that still send peer to peer
Last checked 2026-10-28.