Introduction
ffsend provides a fast, encrypted way to share files from the terminal without relying on email attachments or cloud storage accounts. Files are end-to-end encrypted in the browser or CLI, and links automatically expire after a set number of downloads or a time limit.
What ffsend Does
- Uploads files with client-side end-to-end encryption
- Generates shareable download links with configurable expiration
- Supports download count limits and password protection
- Works with any Send-compatible server instance
- Handles files up to the server-configured size limit
Architecture Overview
ffsend encrypts files locally using AES-128-GCM before uploading them to a Send-compatible server. The encryption key is embedded in the URL fragment (never sent to the server), so only someone with the full link can decrypt the file. The server stores only encrypted blobs and metadata about download counts and expiration.
Self-Hosting & Configuration
- Install via package managers: brew, snap, AUR, or download binaries
- Set
FFSEND_HOSTto point at a self-hosted Send instance - Configure default download limits and expiration in shell aliases
- Use
--passwordflag to add an additional passphrase layer - Pipe stdin directly:
cat file | ffsend upload -
Key Features
- End-to-end encryption ensures the server never sees plaintext
- Configurable download limits (1 to 20) and expiration (up to 7 days)
- Password protection for an additional security layer
- Archive and upload entire directories as a zip
- Scriptable for CI/CD pipelines and automation workflows
Comparison with Similar Tools
- croc — Peer-to-peer file transfer without a server; ffsend uses a hosted relay with encryption
- magic-wormhole — Also peer-to-peer with passphrase exchange; ffsend generates a shareable URL
- transfer.sh — Simple curl-based uploads; ffsend adds client-side encryption and download limits
- OnionShare — Routes through Tor for anonymity; ffsend prioritizes ease of use over anonymity
FAQ
Q: Is Firefox Send still available? A: Mozilla shut down Firefox Send in 2020, but the protocol lives on through community forks like send.vis.ee and self-hosted instances.
Q: How large a file can I upload? A: The limit depends on the server. Most public instances allow up to 1-2 GB. Self-hosted instances can be configured for larger files.
Q: Are uploads anonymous? A: ffsend does not require authentication. However, the server sees your IP address unless you use a VPN or Tor.
Q: Can I use ffsend in scripts or CI pipelines?
A: Yes. ffsend outputs the download URL to stdout, making it easy to capture in scripts. Use --quiet for machine-readable output.