Skip to main content
Someone sent you a Floe link, or a QR code. Open it in any modern browser and the files arrive on their own. There is nothing to install, no account, and nothing to click to start.
A link with /r/ in it is a request link. It is for sending files to the person who made it, not for receiving: see Sending through a request link.

The short version

Open the link and keep the tab open. The files arrive by themselves, each with its own download button. Your browser holds them until you save them, so save every file before you close the tab. With two or more files, Download ZIP saves them all in one archive, folders included. Click the link, or point your phone’s camera at the QR code. The page joins the sender’s room, the meeting point for this one transfer, and connects to the sender by itself. A link made in the web app works while the sender’s page stays open and connected to Floe’s server, which introduces the two devices. See How long a code and a link last. A link from the web app, from floe 1.12 and later or from Floe Desktop 1.1 and later holds a link key after the #, which no server receives. The page then checks that the sender holds the same link key before it accepts a file. If the sender cannot prove it, or connects and says nothing for 30 seconds, nothing is received and the page says “Floe couldn’t confirm who sent this link, so nothing was received. Ask them for a new link.” A link from an older Floe has no link key, and so has no check. It carries #room=, or ?room= before that, and it still opens the same way. Nothing on the page tells the two apart. See A room code or a link with no link key has no check.

If Floe says “Open in your browser”

Apps like Facebook, Messenger, Instagram, TikTok, Snapchat, LINE, X, and WeChat open links in their own in-app browser rather than in Chrome or Safari. Those built-in browsers handle file transfers poorly, so Floe recognizes them and shows this screen instead of the transfer view. It does the same when floe.one itself is opened in one of those apps to send. The screen names the app (it calls X “Twitter”), or says “This in-app browser” for some other Android apps. Any other app’s built-in browser is not recognized, and the transfer view opens in it directly.
The Open in your browser screen, with two steps to reach Safari, the page link, a Copy link to paste in browser button and a Continue anyway link.

What Floe shows when a link is opened inside another app's browser

Follow the two steps on the screen:
  • On Android: tap the ⋮ menu at the top right, then “Open in browser” or “Open in Chrome”.
  • On an iPhone, an iPad or anything else: tap the icon of an arrow leaving a box, or the ··· menu, then “Open in Safari” or “Open in Browser”.
Or tap Copy link to paste in browser and open the link yourself in Chrome, Safari, Edge, or Firefox. The button reads “Link copied” for 2 seconds when the copy worked. The screen also shows the link itself. If the app blocks copying, the screen says “Couldn’t copy. Press and hold the link above to copy it.” Continue anyway (some features may not work) opens the transfer view there regardless. Until you tap Continue anyway, the page has not joined the transfer. Opening the link inside the app therefore does not use it up, and you can still open it in your own browser.

While you wait

The card walks through three steps as it gets ready: “Secure room joined”, “Waiting for the sender to start” and “Files stream in below”. It also offers one choice.
The Floe receive card with a green Direct badge, Secure room joined, Waiting for the sender to start, and a checked Contribute to global stats box.

The receiving card before the first file arrives

The badge at the top right means what it does on the sending side: see Watch the connection. Two things differ on this page. There is no ping beside it. And it turns Offline once the connection to the sender has closed, which is how a finished transfer from floe send or Floe Desktop ends. The transfer starts by itself once the connection is established. A sender in the browser checks the route first, and when they turned relay fallback off or queued more than 2 GB, that takes about 2 seconds. When the route goes through a relay in either case, their page stops before any file moves. Your page then shows a red banner with their reason. Ask them to do what it says, then open the new link they send.

Contribute to global stats

Floe’s homepage carries a public, all-time count of bytes moved by everyone, shown under the card as an amount “transferred globally”. When the last file of a transfer lands, the receiving side adds this transfer’s size to that total, and nothing else. No file names, no contents, nothing identifying, and the report never slows or blocks the transfer. A transfer that stops before its last file reports nothing, and neither does one made only of empty files. It is on by default. The checkbox shows from the moment the page opens and disappears once the first file lands, so decide while you are waiting. Your choice is kept in this browser, so unchecking it once covers your later transfers too. Every receiving surface can turn the report off, and turning it off means the byte count is never sent, rather than sent and ignored.
  • Browser: uncheck Contribute to global stats on the receiver view, where it is shown until the first file arrives. The choice is saved in that browser and applies to every later transfer in it.
  • Floe Desktop: turn off Contribute to global stats in Settings. It is saved with your other settings.
  • CLI: pass --no-report to floe receive for one transfer, or set FLOE_NO_STATS=1 in your environment to opt out of every transfer run from it.
The sender never reports on any surface, so this only ever concerns transfers you receive. This switch covers the public counter and nothing else. On floe.one the site’s own anonymous analytics record a transfer’s outcome separately, and are described under Error monitoring and analytics. The total is only ever shown on the homepage. It is read from the server every 10 seconds, and your own transfer is added to it at once. See Security and privacy for the full data-handling note.

Saving what arrives

Every file gets its own download button the moment it lands, so you can start saving while the rest are still coming. A saved file goes where your browser puts every download, usually the Downloads folder. On an iPhone or iPad, Safari puts downloads in the Files app.
The Floe receive card with Download All and Download ZIP above three received files, and a green check mark before 3 files received.

A finished transfer, with per-file buttons and the two bulk options

While a file arrives, a progress row reads, for example, “Receiving file 2 of 3”, then the speed, the time left and a percentage. The percentage is for the current file only, so it starts again at 0 for each file. Once a file’s bytes are all in, the row reads “Verifying file 2 of 3” while Floe checks it. Between files, the line under the list reads “Received 1 of 3 files. Waiting for the rest”. The check mark and a count such as “3 files received” appear only once every file the sender announced has arrived. The check mark is green only when every file’s SHA-256 matched, as described further down. A smaller line under the list, such as “3 files (8.02 MB)”, counts what has arrived so far. The list becomes a scroll box once it holds more than four files, and it scrolls to the newest file by itself. Hover over a name to see it in full. On a transfer of two or more files, Download All and Download ZIP appear as soon as the second file lands. They hide again while the next file is arriving or being checked and come back between files, so if they vanish mid-transfer nothing is wrong. Once the transfer finishes they stay put.
  • Download All saves each file separately, about one every 300 ms. Your browser may ask you to allow multiple downloads.
  • Download ZIP bundles everything into one archive named floe_transfer_<timestamp>.zip. The number in the name is the time the archive was finished, in milliseconds, not the time you clicked. Files go into it as they are, without compression, so the archive is about as large as the files together. An archive of 4 GB or more, or of more than 65,534 files, is refused before any file is read: see Troubleshooting.
While either one runs, both buttons are grayed out, and the one you clicked reads “Downloading…” or “Zipping…”. A small card shows each step with a count and a percentage. For Download All it reads “Downloading: report.pdf” for each file. For Download ZIP it reads “Processing: report.pdf” while that file is written into the archive, a piece at a time, then “Creating ZIP archive…” while the archive is finished. A large file can sit on its line for a while. It cannot be canceled. The two buttons differ in more than convenience. A ZIP keeps any folder structure the sender used and numbers duplicate names inside the archive. Saving files one at a time flattens the structure and leaves duplicate names to your browser. A single-file transfer shows only that file’s own button, and no bulk options. That also means a folder that held one file arrives without its folder. On iOS, use Download ZIP when there is more than one file. Saving them individually behaves inconsistently in Safari and in iOS web views. The exception is a very large transfer: on iOS the archive is held in memory beside the files, so if zipping fails, save them from their own rows instead. The names in the list are made safe to save, so they can differ from what the sender sees:
  • Only the file’s own name shows, without its folders. Two files of the same name from different folders look the same in the list.
  • Characters that Windows does not allow in a name, such as : and ?, become _.
  • A name with nothing usable in it is saved as received_file.
A file that fails a check never reaches the list. Floe discards a file whose size does not match what the sender announced, or whose SHA-256, a fingerprint of its contents, does not match when the sender provides one. The rest of the transfer stops with it. When every file arrived and every SHA-256 matched, the line “3 files received” under the list, with your own number, gets a green check mark (the SHA-256 matched mark). When some file could be checked by its size only, the check mark is gray. See File checks. Floe does not scan files for malware. A file that passes its checks arrived intact, which does not make it safe to open and says nothing about who sent it. See Known limitations.
Files stay with the browser until you save them, so closing or reloading the tab discards anything you have not saved. Opening a different Floe link in the same tab reloads it too. One case is different: a link from floe or Floe Desktop opened in a tab that holds another such link. While a receive is under way or a file that arrived is unsaved, your browser asks about leaving if you have clicked on the page. If you have not, the page opens the new link only once that is over.
While a receive is under way, or a file that arrived has not been saved yet, your browser asks before the tab is closed or reloaded, or Back leaves the page. It also asks before the Floe button or one of the page’s own links takes you away. A file counts as saved once its own download button, Download All or Download ZIP has handed it to your browser. For that same time, the line at the foot of the card reads “Keep this tab open and in front. Closing it interrupts the download.” Chrome and Edge can unload a tab in the background to save memory, and that discards the files as closing it would. For that same time the page does not reload by itself after Floe’s web app is updated: see The page reloaded by itself. Once every file has arrived and been saved, the line reads “End-to-end encrypted. Files are never stored on a server.” From the moment the two devices connect until every file has arrived or the transfer stops, the page asks your browser to keep the screen on, where the browser supports it. Browsers let go of that whenever the tab is hidden, and the page asks again when you come back.

The sender has to stay connected

Files stream from the sender’s device, so if they close their tab, quit Floe Desktop, or stop the CLI before the transfer finishes, the connection drops and nothing resumes it. What you see when the sender leaves depends on how far things had got: In the second case the banner can also read “The sender ended the transfer. Ask them to start it again.” When the sender’s side stopped with a reason, the banner shows that reason instead. A sender in the browser gives one when it stops by itself or refuses a relayed path, and a floe send or Floe Desktop gives one for a file it can no longer read. See Troubleshooting. In the third case the badge goes back to Offline, the progress row goes away, and the files that arrived stay listed. See Troubleshooting. The rest needs a new transfer: Floe cannot resume one that stopped. A reload works while a sender in the browser still has their page open. Files that already arrived stay in the list, and can still be saved, for as long as the page stays open. This is what the web app at floe.one shows. A web app that someone hosts themselves can run an older version, where a few of these lines read differently: see What an older web app shows. Your own connection to Floe’s server can drop for a moment while the two devices are still connecting. The page then joins again by itself. If the server still counts the page’s old connection, the page keeps trying for about a minute before it shows “Link Invalid”. Whether that saves the transfer depends on the sender: A device that comes back on a different network can be refused either way. See How a transfer works. Once the two devices are connected, a drop in the server connection no longer matters, and the page does not join again.

Receiving in the terminal or the desktop app instead

Both write straight to disk as the bytes arrive and rebuild folder structure, which makes them the better choice for anything multi-gigabyte. A browser can only take what that browser can hold, and a phone holds less than a computer. Neither app runs on a phone: for a large transfer to one, see Known limitations. A share link works in floe receive and in the Floe Desktop Receive tab. A link from a self-hosted Floe also needs that server’s address: see Use a self-hosted server.
Terminal
Keep the quotes: the & in the link would otherwise end the command. See Put the link in quotes. If the sender gave you a room code instead, three words, pass that. The browser has no field for one. A room code carries no link key, so a transfer joined with one has no check.
Terminal
See floe receive and Receive files in the desktop app.
  • “Link Invalid”: the link is incomplete, in use, or locked to other networks. See Troubleshooting.
  • “The sender is not connected”, or the card stays on “Waiting for the sender to start”: see The transfer never starts.
  • “Connection failed. Ask the sender to try again.”: see Troubleshooting.
  • “Floe couldn’t confirm who sent this link”: see Troubleshooting.
  • “This browser can’t check this link”: see Troubleshooting.
Last modified on November 4, 2026