Skip to main content
floe send
Starts a transfer session as the sender. Floe registers a short code with the signaling server, prints a sharing panel, then waits for a peer to connect. Once connected, it streams all files over an encrypted WebRTC data channel.

Examples

Send a single file:
Terminal
Send multiple files at once:
Terminal
Send an entire folder (transferred recursively):
Terminal

Output

After running floe send, Floe shows a summary of what will be sent, then prints a sharing panel:
Output
Once the recipient connects, Floe negotiates the WebRTC connection and streams each file with a live progress bar:
Output
The Connected line names the route ICE settled on: (direct) when the two devices talk to each other, (relay) when the transfer runs through the TURN relay, where the 2 GB cap applies (see File size limits). It is read once, as the connection comes up. On the rare occasion the route cannot be read, the line is Connected alone and the transfer proceeds. While a file is still in flight, its line also carries elapsed and remaining time, for example [1/3] report.pdf 85% [██████████░░░░░] (1.4 MB/s) [6s:1s]. Those brackets disappear once the line reaches 100%. The bar stretches to the width of your terminal, so the number of blocks varies with your window, and names longer than 30 characters are truncated. The rate in parentheses uses base-1000 units (kB, MB), while the summary rows below it use base-1024 units, so the two do not always agree to the decimal. Share the code with CLI recipients or the link with browser recipients. The short code is valid for 10 minutes. The room link stays active until the session ends or you press Ctrl+C.

Folder transfers

When you send a folder, Floe walks it recursively and rebuilds the same relative paths inside the recipient’s output directory. Two details are worth knowing before you point it at a project folder. Every file is included, hidden files and dotfiles among them, so a folder holding .git or .env sends those too. Empty subfolders are not recreated on the other side, because Floe transfers files and an empty folder has none.
Terminal
A trailing slash changes this. Floe names each file relative to the folder’s parent, and a trailing slash makes the folder itself the parent, so the folder name drops out and its contents land directly in the receiver’s output directory:
Terminal
The same applies to a trailing backslash on Windows. Shell tab-completion often adds one, so drop it if you want the folder name preserved. Symlinks inside a folder are not followed. A symlinked file is measured as the link rather than its target, so the size in the sending panel, the batch total, and the relay check all count it as a few bytes; the file itself still transfers whole. A symlink to a directory is treated as a file and fails to read. Copy what you mean to send, or send the target path directly.

Flags

See CLI flags reference for --server, --no-relay, --relay-only, --web, and --iface.

Notes

  • Relayed transfers are capped at 2 GB per session; direct connections have no size limit. When the selected route runs through the TURN relay and the queued files total more than 2 GB, floe send blocks the transfer before any file data moves. With --relay-only every transfer is relayed, so the cap always applies. See File size limits.
  • Press Ctrl+C at any time to cancel the transfer and close the session.
  • If the short code cannot be registered (for example, the signaling server is unreachable), Floe prints a warning and continues with the link only.
  • Files are streamed in the order they are listed. For multiple files, progress is shown per file.
  • The sender never reports to the global transfer counter. Only the receiver does. To opt out on the receiving side, the receiver uses --no-report or sets FLOE_NO_STATS=1.