Skip to main content

Files and transfers

Your files go directly to the recipient’s device. In most cases they never touch a server at all. When a direct path cannot be found (strict corporate firewalls, carrier-grade NAT), Floe automatically falls back to an encrypted TURN relay. Even through a relay, the server sees only encrypted packets and cannot read your files.See How It Works for a full explanation.
Direct connections have no size limit. Files transfer directly between the two devices and no server bandwidth is consumed.Relay connections are capped at 2 GB per session to keep the service free. The cap applies in both the web app and the CLI. Most home and mobile network transfers connect directly and have no limit. See The 2 GB Relay Limit for details and tips on obtaining a direct connection.
Yes. In the browser, select multiple files in the file picker. In the CLI, pass multiple files or folder paths to floe send:
Folder transfers preserve the directory structure. The recipient receives files at the same relative paths.
Transfer speed is limited only by the slower of the two connections involved. There is no artificial throttling. Direct transfers run at your internet connection speed. Relay transfers may be slightly slower depending on server load and network conditions, but the encryption overhead is minimal.
For the full duration of the transfer. Files stream directly from the sender’s device, so the browser tab or CLI process must remain open and active. If the sender closes the tab or cancels mid-transfer, the session ends and any partially received files are incomplete.
No. Files are never stored on any server. They travel directly between the two devices in real time. Once the session closes, nothing about your transfer is retained.

Browser

Any modern browser with WebRTC support works: Chrome, Firefox, Safari, Edge, and most Chromium-based browsers. A secure context (HTTPS or localhost) is required.WebRTC is not available in some in-app browsers (the web views embedded in Facebook, Instagram, TikTok, and similar apps). Floe detects these and prompts you to open the page in Chrome or Safari instead.
On iOS, use Download ZIP rather than downloading files individually. This is the most reliable option on Safari and iOS web views. Individual file downloads can behave inconsistently on iOS due to browser sandboxing.
The indicator in the corner of the page shows connection state:
  • Green (Direct): Files transfer directly between devices, whether they share a network or connect peer-to-peer across the internet. No server involved. No size limit.
  • Amber (Relay): Files route through the encrypted TURN relay. The 2 GB cap applies.
  • Connecting: Negotiating the WebRTC connection. This usually takes a few seconds.
If the connection stays in “Connecting” for more than 30 seconds, see Troubleshooting.
Because the connection really is direct. WebRTC uses a technique called NAT hole punching (with the help of a STUN server) to open a peer-to-peer path between two devices even when they sit on completely different networks, such as home Wi-Fi on one side and mobile data on the other. Once that path is open, file bytes flow straight from one device to the other and no server carries them.The relay only enters the picture when hole punching fails, which mostly happens on strict corporate firewalls or unusual carrier NAT setups. Most transfers, including those involving mobile data, connect directly.Transfer speed on a direct connection is set by the slower of the two internet connections involved (typically the sender’s upload speed or the receiver’s mobile signal), not by Floe. See Direct Connection for the full story.
No. The toggle only controls whether Floe may fall back to a relay server when a direct connection cannot be established. It is checked once, when the connection is being set up.
  • If the connection is direct, the toggle has no effect. The transfer proceeds whether relay fallback is on or off, because no relay is involved.
  • If the connection would need a relay and the toggle is off, Floe blocks the transfer before any file data moves.
The toggle cannot affect a connection that is already established, which is why it is only shown before the share link is created.
No. The browser UI does not have a code entry field. To receive in the browser, the recipient must open the full link (or scan the QR code). Short codes are for the CLI only: floe receive olive-tiger-castle.

Accounts and privacy

No. Floe requires no account, no sign-up, and no registration. Open floe.one or run the CLI and share the link or short code with your recipient.
The signaling server tracks room IDs and connection metadata only for the duration of the session. No file content, file names, or transfer records are stored. Room state is discarded once both peers disconnect.The one persistent value Floe keeps is a single anonymous total of bytes transferred across all users, shown by the counter on the homepage. It is a plain running number with no file names, no per-transfer records, and no link to you. See Security and Privacy for details.
It is a public, all-time total of how many bytes Floe has helped move across all users. When a transfer finishes, the receiving side reports just the size (never the file name or contents), and that size is added to one shared total. The figure is an honest best-effort metric, not an audited count, and reporting it never slows or blocks your transfer.The counter is viewable only in the browser. The CLI receiver contributes to it but never fetches or displays the total. The sender (browser or CLI) never reports.
Yes. The byte-count report is on by default but can be turned off on the receiving side.Browser: Uncheck “Contribute to global stats” on the receiver view before the transfer completes. The preference is saved in your browser and applies to all future transfers from that device.CLI - single transfer:
CLI - permanent (add to your shell profile):
When opted out, no request is sent to Floe’s server and the global counter is not incremented for that transfer. The transfer itself is unaffected.
Yes. The full source for the client, server, and CLI is available on GitHub under the MIT license. You can also self-host your own instance on your own infrastructure.

CLI

See CLI Installation for platform-specific steps. The quick version:
Yes. Browser and CLI clients are fully interoperable. The CLI sender prints a browser link that any recipient can open, and the browser sender’s link can be passed directly to floe receive. See the cross-platform transfers table.
Run floe update for script and manual installs. For package manager installs, use brew upgrade floe, winget upgrade jannskiee.floe, or scoop update floe. See Updating.
No. Floe peers on different versions interoperate, so you do not need to coordinate updates with the person on the other end. A patch or minor difference (for example v1.5.4 sending to v1.5.5) transfers normally.Floe negotiates a transfer protocol version separate from the release version. The only time a transfer is blocked is the rare case where a release changes the wire format in a breaking way and the two versions cannot bridge it. If that happens, Floe tells you before any data moves and points whichever side is older to floe update. See the Protocol versioning reference for how this works.