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 nothing caps 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.

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 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. 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. Nothing is metered, so nothing is capped.
  • As fast as your connection allows. Usually the sender’s upload speed is the ceiling.
  • Nothing to pay for and nothing to trust. No server sees the traffic, encrypted or otherwise.

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, and carrier-grade NAT, where a provider puts thousands of customers behind one shared address, can make the address discovered through STUN useless. In those cases Floe falls back to a relay, if you have allowed it to. If you want to improve your odds of a direct connection, the levers are: use a normal home or personal network, disconnect from any VPN, and try a personal hotspot when you are on a corporate or university network.
WebRTC gathers candidates, which are address-and-port combinations a device might be reachable on, and tries pairs of them until one works. 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), and 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. Note that 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, clients fall back to Google’s public STUN servers. A self-hosted coturn relay doubles as the STUN server for that instance.