Step by step
1
You create a transfer
Your device makes up a random room id and joins that room. You share a link containing it, or
a three-word code that maps to it.
2
They join the same room
The server now has two devices in one room, and tells the first one that someone arrived.
3
The two devices introduce themselves
They pass an offer, an answer, and a list of network addresses through the server, each
trying to find a path to the other.
4
The connection opens and the server drops out
Every byte of the file travels over that connection. None of it goes back through the server.
What the server does
- Puts two devices in a room and assigns roles. The first to join sends, the second receives.
- Passes the connection-setup messages between them.
- Hands out time-limited credentials for the relay, when one is configured.
- Turns a room id into a three-word code, when the sender asks for one, and back again for ten minutes.
- Adds the size of a finished transfer to one public running total, if the receiving side is willing. That is a single shared number, and every client can switch it off. See Security and privacy.
What the server never does
- Touch file data. Not in transit, not at rest, not in any form.
- Store file names, contents, or a record of what you sent or to whom.
- Keep peer information after the session. The room is dropped when the last connection to it closes. A short code outlives it by up to ten minutes, and even then it maps to nothing but a random id.
- Connect the byte total to you. It is one number with no per-user or per-transfer rows behind it.
A room holds exactly two people
The room is the transfer. It takes one sender and one receiver, and a third device that tries to join is turned away: the web app shows Link Invalid, while the CLI and the desktop app sayroom is full.
Nothing is used up along the way. A code keeps resolving for its full ten minutes, and a link
keeps working while the transfer is live. The refusal is about the second seat already being
taken, not about the link having been opened once.
The seat frees again once that device disconnects and the server notices, which takes up to about
a minute if the drop was not a clean one. Whether the transfer survives that gap depends on who is
sending: the web app holds its room open and waits for whoever arrives next, while floe send and
the desktop app end the transfer as soon as the receiving side goes.
For a second recipient, start a second transfer.
Where to go deeper
HTTP API
The endpoints behind room codes, relay credentials, and the byte counter.
Transfer protocol
What the two devices say to each other once the connection is open.