Skip to main content
floe update
Replaces the running floe binary with the latest release, or with --check only reports whether a newer one exists.
floe update never touches Floe Desktop, which updates on its own track. Desktop builds ship on their own desktop-v* tags, marked Pre-release on GitHub only to keep them out of Latest release, so neither floe update nor the install scripts ever pick them up. See the Update section of Install the desktop app.

Script and manual installs

Run the built-in update command:
Terminal
This asks GitHub for the latest release, downloads the correct archive for your system, checks its SHA-256, a fingerprint of the file, against the release’s checksums.txt, and replaces the running binary in place:
Output
floe 1.11.0 and earlier write the newer version with a leading v, as in Update available: 1.10.11 -> v1.11.0. When nothing newer exists, floe update prints Already up to date (1.x.x) after the first two lines and stops. floe update installs nothing when the checksum does not match, or when the release lists no checksum for the archive, and the install scripts stop in the same two cases. floe update gives GitHub 10 seconds to say which release is newest, 30 seconds for checksums.txt, and 5 minutes for the whole archive, and an update that runs out of time installs nothing. On macOS and Linux, if floe lives in a folder you cannot write to, such as /usr/local/bin (the install script’s usual place), the final swap needs sudo. One more line then comes before Updated to, followed by a password prompt:
Output
Everything before that step (download, checksum, unpacking) runs as your normal user. If sudo is not installed, the update stops and tells you to run it again as root or to reinstall with the install script. On Windows no administrator rights are needed when floe.exe is in a folder you can write to, as the install script’s is: floe renames the running file aside, to floe.exe.floe-update-old, and moves the new one into place. That file stays until floe next starts, which removes it. floe 1.11.0 and earlier named it floe.exe.bak. floe update still removes a file of that name before it renames, and nothing else does. To check for an update without installing:
Terminal
It prints the same first lines and, when a newer release exists, ends with Run `floe update` to install. instead of downloading anything. floe update always installs the latest release. To install a particular version, run the install script with FLOE_VERSION: see One-line installer. A later floe update then offers to move you to the latest one. floe 1.12 and later install a release only when its tag is exactly vX.Y.Z. floe 1.11.7 and earlier install one under any tag name. On macOS 12, stay on 1.11.1: later releases need macOS 13 Ventura, and floe update installs them anyway. Keep 1.11.1 with the install script’s FLOE_VERSION, or build from source. You can also run the install script again at any time to upgrade. It writes the latest release to its own folder (/usr/local/bin or ~/.local/bin, or %LOCALAPPDATA%\Programs\floe on Windows), so it replaces your floe only when that is where it lives:
Terminal

Package manager installs

If you installed floe with a package manager, use the standard upgrade command for that tool. floe update detects a package-managed install from the binary’s path and stops before it contacts GitHub, rather than replacing the binary behind your package manager’s back. It names the right command and exits with status 1, for example:
Output
The same guard applies to floe update --check. Detection is a match, in any capitalization, for homebrew, cellar, caskroom, linuxbrew, scoop or winget anywhere in the path of the command you ran. When that command is a link, the path of the file it points to counts too. A script install that happens to live under a folder containing one of those words is therefore treated as package-managed as well. Homebrew in its default folder on an Intel Mac, /usr/local, is recognized through the file the command points to: the command is /usr/local/bin/floe, and the cask behind it sits under /usr/local/Caskroom. floe 1.11.0 and earlier did not recognize that install and carried on as for a script install, so on those versions use brew upgrade floe there. A binary built from source is checked before any of this and stops with Error: Cannot update a dev build. and status 1, whatever its path, so this section applies only to release builds. floe 1.11.0 and earlier printed that sentence without Error: and exited with status 0.

Messages

Each of these ends floe update with status 1, and nothing is installed:

The update hint

When a newer release exists, floe version prints an extra line, which FLOE_NO_UPDATE_CHECK=1 turns off:
Output
Whenever floe update or floe update --check checks, it asks GitHub itself and never uses the answer floe version keeps. See The update check for when floe version asks and where it keeps the answer.

Version compatibility

You do not need to match versions with the person on the other end for an ordinary transfer. Floe peers on different releases interoperate, down to the floors the Changelog states, so a version difference by itself is rarely a problem. If a release ever changes the transfer protocol in a breaking way, Floe detects it before any data moves and tells whichever side is older to update. See Protocol versioning for the details. A few things do need a newer floe:
  • A link key is checked by floe receive 1.12 and later. An older one ignores it, and the transfer goes ahead with no check.
  • floe send --link-only needs floe 1.12 or later on the sending side and a receiver that can prove the link. It stops a floe receive older than 1.12, which tells its user to update from 1.10.8 on. See Send only to a receiver that proves it holds the link.
  • floe send --to needs floe 1.11.0 or later (an older floe stops with Error: unknown flag: --to), and floe 1.12 or later for a link from Floe Desktop 1.1 or later. The link itself comes from Floe Desktop 0.3.0 or later, on a server that offers request links.
Last modified on November 5, 2026