floe, Floe’s CLI (command-line program), on macOS, Windows,
or Linux and confirms that it runs. It is for anyone who wants to send or receive from a terminal or
a script. floe is a single file that needs nothing else installed to run. The release builds for
macOS need macOS 13 Ventura or later; on macOS 12, use Build from source.
If you would rather have a window than a terminal, Floe Desktop runs on
this same transfer engine, so the two interoperate. It is Windows only; on macOS and Linux this
CLI and the web app are the options.
The short version
On a Mac with Homebrew, runbrew install --cask jannskiee/tap/floe. On Windows, run
winget install jannskiee.floe. On Linux, or anywhere without a package manager, use the one-line
installer below. Then run floe version to check that it works.
Package managers
The fastest way to installfloe. A package manager install is also
updated with that tool’s standard upgrade command.
- macOS
- Windows (winget)
- Windows (scoop)
Terminal
brew upgrade floeFirst run: if macOS blocks the binary (Gatekeeper), run
xattr -dr com.apple.quarantine $(which floe)..deb, .rpm or AUR package. On Linux, use the
one-line installer, a release archive, or go install.
One-line installer
Works on macOS, Linux, and Windows without a package manager. The script comes from floe.one. Unless you name a version withFLOE_VERSION, it asks GitHub’s API which release is newest. It then
downloads that release’s archive and its checksums.txt from GitHub.
- macOS / Linux
- Windows (PowerShell)
Terminal
vX.Y.Z tag from the
releases page, with or without the v:Terminal
- picks the archive for your system and processor (64-bit Intel or ARM), and stops on any other
processor with a pointer to
go installor a source build; - checks the archive’s SHA-256, a fingerprint of the file, against the
release’s
checksums.txt; - installs
floeto/usr/local/bin, creating that folder when it is missing and asking for yoursudopassword when it is not writable.
sudo is missing or cannot be used, it installs to ~/.local/bin instead. If that folder
is not on your PATH, it says so and gives the line to add to the file your
login shell reads. That file is ~/.zprofile for zsh, ~/.bash_profile for bash when you have
one, and ~/.profile otherwise. If an earlier floe is still in /usr/local/bin then, the
script says so, because that one may run first, and gives the command that removes it,
sudo rm /usr/local/bin/floe.If the machine has neither sha256sum nor shasum, or the release lists no checksum for the
archive, the script stops and installs nothing: see
If the install script stops.A run that needs sudo looks like this:Output
Checksum verified. is the line that says the download matched.floe installed another way, such as with Homebrew, Scoop or winget: it adds a second
copy, and whichever comes first on your PATH runs. With Homebrew on an Intel Mac, it replaces
Homebrew’s floe link in /usr/local/bin instead.
Go install
If you have Go 1.26 or later installed:Terminal
$(go env GOPATH)/bin (or $(go env GOBIN)), which is not on your
PATH on a default Go setup. Add that directory to your PATH before running floe. The
package managers and the install script above handle this for you.
Install from a release archive
For a machine where the script cannot run, install a release by hand:1
Download the archive
From the GitHub Releases page, download
floe_<version>_<system>_<processor>.tar.gz, or the .zip for Windows. The system is linux,
darwin (macOS) or windows, and the processor amd64 (64-bit Intel) or arm64. The version
in the name has no leading v. Download checksums.txt from the same release.2
Check it
Compare the archive with
checksums.txt, as shown in the next section.3
Put floe on your PATH
Unpack the archive and move
floe (floe.exe on Windows) to a folder on your PATH, as in
Build from source. If macOS blocks it the first time it runs, run
xattr -d com.apple.quarantine on the file.Verify the checksum (manual download)
Each release includes achecksums.txt file. To check an archive you downloaded, run this in the
folder that holds it:
Terminal
Get-FileHash <archive> -Algorithm SHA256 in PowerShell prints the hash to compare with the archive’s line in checksums.txt.
For a release of v1.11.7 or later, the GitHub CLI (gh) can also check an archive against the release’s attestation, which
GitHub records when the release is published:
Terminal
checksums.txt.
Verify the install
Terminal
Output
Output
FLOE_NO_UPDATE_CHECK=1 to silence it. See floe version for what that check does.
A binary from go install or built from source prints floe dev instead of a version number.
Update
Use your package manager’s upgrade command, shown in its tab above, orfloe update for a script or
manual install. See Update the CLI.
Build from source
Requires Go 1.26 or later. On macOS 12, which the release builds no longer support, this is how to get a currentfloe: Go 1.26 still runs there.
Terminal
floe binary to a directory on your PATH. On macOS and Linux,
/usr/local/bin is the usual choice, but it is root-owned on a stock system, so the move
needs elevation: sudo mv floe /usr/local/bin/. A user-owned directory such as
~/.local/bin works without sudo, as long as it is on your PATH.
Like a go install build, a binary compiled this way reports floe dev and cannot update
itself.
Uninstall
Removefloe the way it came:
The only other thing
floe leaves is the update check’s floe/update-check.json in your user
config folder, which is safe to delete: see The update check.
If the install script stops
The script ends with one of these and installs nothing:
A
FLOE_VERSION that names no release stops the script right after its Downloading line, with
the download tool’s own error, such as a 404. In PowerShell, a GitHub that cannot be reached ends
the script with PowerShell’s own error.
If something goes wrong
floeis not found after installing: open a new terminal, which reads the changedPATH, and check that the install directory is on it. Seefloeis not found after installing.floe updateprintsCannot update a dev build.: the binary came fromgo installor a source build. SeeCannot update a dev build..floe updateprintsinstalled via homebrew,scooporwinget: a package manager owns the binary, so use its upgrade command. Seeinstalled via homebrew.