Skip to main content
A direct connection means the file goes from your device to theirs with nothing in between. No server carries it, so nobody is paying for the bandwidth and Floe sets no limit on the size. The speed is whatever the slower of your two internet connections can manage. Most transfers are direct, including ones between a laptop on home Wi-Fi and a phone on mobile data on the other side of the country. Some mobile carriers’ networks can force the relay instead: see When you get one.

How two devices on different networks find each other

Almost nothing on the internet has a public address of its own. Your laptop sits behind a router, your phone sits behind your carrier’s equipment, and neither can be dialed directly the way a web server can. WebRTC, the technology Floe connects devices with, gets around this with a STUN server, whose only job is to answer one question: “what does my address look like from out there?” Each device asks, gets an answer, and passes that answer to the other through Floe’s signaling server. Both then start sending packets toward the other’s address at the same moment. Because each side’s router has just seen an outgoing packet to that destination, it lets the incoming one through. The two streams meet in the middle. This is usually called NAT hole punching, after NAT, the address sharing a router does. It is why a transfer between two completely different networks still says Direct, and why no file data touches a server even though neither device had a reachable address to begin with. The STUN server only ever sees the request for an address. It never sees a file, and it is out of the picture the moment the connection exists.

What direct means for you

  • No size limit from Floe. Nothing is metered, so Floe caps nothing. A browser that receives is still limited by what that browser can hold. See Known limitations.
  • As fast as your connection allows. Usually the sender’s upload speed is the ceiling.
  • No server carries your files. No server sees the traffic, encrypted or otherwise, so there is nothing to meter. The signaling server still introduces the two devices, and a link key checks that introduction only where one applies: see What the link key checks.

When you get one, and when you do not

Standard home Wi-Fi, personal hotspots, and most mobile networks connect directly. Some networks defeat hole punching. Strict corporate and university firewalls block the attempt outright. Some mobile carriers use carrier-grade NAT, which puts thousands of customers behind one shared address and can make the address discovered through STUN useless. In those cases Floe falls back to a relay, if you have allowed it to: see Relay fallback. The badge shows which route you got. To improve your odds of a direct connection:
  • Use a normal home or personal network.
  • When the two devices are in the same place, put both on the same Wi-Fi network.
  • Disconnect from any VPN.
  • Try a personal hotspot when you are on a corporate or university network.

How Floe decides a connection counts as direct

The one rule that matters to you: a connection counts as relayed only when the route that won runs through the relay. The rest of this section is the technical detail behind that rule. WebRTC gathers candidates, which are address-and-port combinations a device might be reachable on, and the two peers try pairs of them until one works. This step is called ICE. Candidates come in four kinds:
  • host: an address on the local network.
  • srflx (server-reflexive): the public address STUN reported.
  • prflx (peer-reflexive): learned during the connectivity checks themselves.
  • relay: an address on a TURN relay.
Candidates are sent as they are discovered rather than in one batch at the end, which is called trickle ICE and cuts setup time noticeably. Floe calls a connection relayed only when the pair that actually won has a relay candidate on one side or the other. Every other outcome is direct. This is decided by the winning pair, not by what was offered: relay candidates are usually gathered and offered too, they just did not win. On floe.one the STUN endpoint is Cloudflare’s, at stun.cloudflare.com:3478. When no relay service is configured at all, which is the default for a fresh self-hosted instance, the signaling server hands out Google’s public STUN servers instead. A self-hosted coturn relay doubles as the STUN server for that instance.
Last modified on November 3, 2026