The short version
Floe’s signaling server, the server that introduces devices, puts the two devices in a room: a private meeting point for one transfer, with one sender and one receiver. It passes their connection details along and then drops out, so no file ever goes through it. A room code works for 10 minutes at most, and a share link works while its sender is still connected.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 room code that maps to it. A link can also hold a link key,
which your device makes too and the server never receives. A room code holds none.
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
Each device sends the other a description of how to reach it, with a list of its network
addresses, and the server passes these along. Each then tries to find a path to the other.
4
The connection opens and the server drops out
Each side that holds the link key proves it over that connection, and then every byte of the
file travels over it. None of it goes back through the server.
floe send --to.
On most networks the path found in step 3 is direct, device to device. When a firewall or a
carrier’s network makes that impossible, the connection runs through an encrypted
relay instead. See Direct connections and
Relay fallback.
What the server does
- Puts two devices in a room and assigns roles. A room has two seats, one for the sender and one for the receiver. For a room code or a share link, the first device to join sends and the second receives. A request link keeps the receiving seat for the Floe Desktop that made it, and the person sending joins second.
- 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 room code when
floe sendor Floe Desktop asks for one, and back into the room id for a receiver who types it, for 10 minutes at most. See How long a code and a link last. - 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 receiving app 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.
- Receive a link key. It stays in the part of the link after the
#, and an app joins with the room id alone. - Store file names, contents, or a record of what you sent or to whom.
- Keep a room once its session is over. The room is dropped when the last connection to it closes. A room code stops working sooner, as soon as the receiver joins. While a code lasts, it maps to nothing but a random room id. What the server holds about the devices themselves, and for how long, is in Security and privacy.
- 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 has two seats, one for the sender and one for the receiver, and a third device that tries to join is turned away. The web app shows Link Invalid, whilefloe receive and Floe Desktop say room is full (someone else may already be receiving).
The seat frees again once that device disconnects and the server notices. That 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 for the receiver to come back from the same network.
floe sendand Floe Desktop end the transfer as soon as the receiving side goes.
How long a code and a link last
A room code is the three words thatfloe send and Floe Desktop show beside their link. The web
app’s Send page makes a link and no code. A code carries no link key, so a receiver who joins with
one has no check. A code works for 10 minutes
at most, counted from the moment it is made, and the server retires it sooner when any of these
happens first:
Looking a code up does not use it up. A receiver whose attempt fails before it takes its seat, for
example because the folder it was told to save in cannot be used, can try the same code again.
Nothing extends the 10 minutes. A sender who is still waiting after that can be reached only
through the link. A code that has stopped working looks the same whatever retired it:
floe receive
prints
Error: could not resolve "olive-tiger-castle": code "olive-tiger-castle" not found: it was already used, the sender left, or it expired (a code lasts 10 minutes at most),
and Floe Desktop shows
“That code wasn’t recognized”.
A share link has no clock of its own. It carries the room id, and a link key when it has one, so it
works for as long as its sender is still in the room:
- A link from the web app’s Send page works while the sender’s tab stays open and connected.
- A link from
floe sendor Floe Desktop works until that send finishes, fails, or is canceled. Neither sets a limit on how long it waits for a receiver. Such a link still serves one receiver only: the send ends when its receiver leaves, even a receiver that only opened the link and closed it again.
floe receive and Floe Desktop say
this code or link is no longer active; ask the sender for a new one.
A request link follows its own rules: its end time is chosen when it is made, and one accepted
drop uses it up. See how a request link ends.
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.