Peer-to-peer, end-to-end encrypted file transfer.
One command to send, one to receive.
fsend is a command-line tool that lets any two computers transfer files and folders straight to each other.
- Peer-to-peer — bytes go straight from sender to receiver at your own internet speed (relay only as a fallback)
- End-to-end encrypted — TLS 1.3 between the peers, authenticated by the share code (PAKE); even the fallback relay never sees the file
- No ports to open — works on any network, no router or firewall setup
- Send anything — files, folders, multiple at once, stdin streams, or literal text
- Resumable — a dropped transfer continues where it left off on the next send (with a fresh code), instead of starting over
- Skips what's already there — re-send a folder and only the new or changed files transfer
- Password-protected — gate any transfer with
--pass; receiver supplies it to unlock - Post-quantum — X25519 + ML-KEM-768 (NIST); designed so future quantum computers can't decrypt today's transfers
- Self-hostable — deploy your own pairing server + relay with Docker compose
- Runs anywhere — single static binary on Linux, macOS, FreeBSD, Windows; x86 and ARM
Linux, macOS, FreeBSD — x86 and ARM:
curl -fsSL https://getfsend.alzina.dev | shWindows — run this in PowerShell:
irm https://getfsend.alzina.dev/install.ps1 | iexBoth installers verify the release's SHA-256 checksum before installing.
Other install methods
From source:
go install github.com/polius/fsend/cmd/fsend@latestOr grab a release binary from the releases page.
Send a file — fsend hands you a share code:
$ fsend report.pdf
Sending report.pdf · 1 file · 2.4 MB
On the other machine, run:
fsend abc-defg-jkmReceive — run that code, and the file lands in the current folder:
$ fsend abc-defg-jkmMore ways to send:
fsend ./project # a whole folder
fsend a.txt b.txt c.txt # several at once
pg_dump mydb | fsend # a stream from stdin
fsend --text "wifi: hunter2" # a literal string
fsend report.pdf --pass # gated behind a password…and to receive:
fsend --yes abc-defg-jkm # skip the confirmation prompt
fsend --out ~/Downloads abc-defg-jkm # save to a specific folder| How it works | Three transfer modes, raced concurrently — and why |
| Security | Threat model — what the server can and cannot see |
| Usage | Every flag, env var, and exit code |
| Self-hosting | Run your own pairing server in three steps |
| Development | Build and test from source |
| Troubleshooting | Common errors and what to do about them |
fsend vs croc vs magic-wormhole — a side-by-side table on data path, cryptography, codes, and features.
Bug reports and pull requests welcome — see Development to build from source, or open an issue.
MIT