ffsend
A feature-rich Firefox Send client that allows easy, secure, and encrypted sharing of files and d.... Install via x-cmd for instant access and enhanced productivity.
| Language | rust |
| Homepage | https://github.com/timvisee/ffsend |
- Using docker module to automatically pull the base image and, on first execution, reconstruct it as a fully runnable software image as needed.
- For subsequent runs, the command quickly launches containers based on the pre-built image, achieving near-instant startup.
- All operations are executed inside the container, completely isolated from the host system, requiring no local dependencies—secure, clean, and leaving no traces.
- When a rebuild is required due to software version or dependency changes, the Docker image build cache is fully leveraged to maximize reuse of downloaded dependencies and build artifacts, significantly reducing rebuild time.
x docker fedora ffsendxd fed ffsendx install ffsend
| x env | sh
|
| /snap | sh
|
| darwin/brew | sh
|
| darwin/port | sh
|
| (win|wsl2)/choco | sh
|
| fedora/dnf | sh
|
ffsend: Secure File Sharing from the Command Line
Need to share a file temporarily but don't want your data sitting on corporate servers? ffsend is a command-line file sharing tool built on the Firefox Send protocol. With a single command, you can generate an encrypted share link that recipients can open in any browser. Files are encrypted locally using AES-128-GCM before upload—the server only stores encrypted data and can't even see the filename.
Why ffsend: Problems It Solves
| Scenario | Traditional Approach | ffsend Approach |
|---|---|---|
| Sharing sensitive files temporarily | Cloud storage (server sees raw content) | Client-side encryption before upload |
| Receiver requirements | Must install same client | Any web browser works |
| File expiration | Manual deletion required | Auto-expires (24h or download limit) |
| Password protection | Complex permission management | Optional password encryption |
| Command-line integration | Complex API calls | Single command upload/download |
The core advantage of ffsend is zero-configuration secure sharing. No account registration, no permission management, no recipient setup. Upload, get a link, send it to anyone. Files automatically delete after 24 hours or the specified download count—no data lingering on third-party servers.
Basic Usage: Upload and Download
Simple file upload
$ ffsend upload my-file.txt
https://send.vis.ee/#sample-share-urlThe terminal returns the share link immediately—just copy and send it to your recipient.
Upload with advanced options
# Limit to 1 download, expire in 5 minutes, set password, auto-archive, copy to clipboard, open in browser
$ ffsend upload --downloads 1 --expiry-time 5m --password --archive --copy --open my-file.txt
Password: ******
https://send.vis.ee/#sample-share-urlUpload to custom server
If you run your own Send instance, specify it with -h:
$ ffsend upload -h https://example.com/ my-file.txt
https://example.com/#sample-share-urlDownload files
Recipients can download via browser, or use ffsend CLI:
$ ffsend download https://send.vis.ee/#sample-share-urlFile Management Features
Check if a file exists
$ ffsend exists https://send.vis.ee/#sample-share-url
Exists: yesGet file information
$ ffsend info https://send.vis.ee/#sample-share-url
ID: b087066715
Name: my-file.txt
Size: 12 KiB
MIME: text/plain
Downloads: 0 of 10
Expiry: 18h2m (64928s)View upload history
ffsend automatically tracks your uploads for easy management:
$ ffsend history
# LINK EXPIRE
1 https://send.vis.ee/#sample-share-url 23h57m
2 https://send.vis.ee/#other-sample-url 17h38m
3 https://example.com/#sample-share-url 37m30sChange file password
Add or modify password protection after upload:
$ ffsend password https://send.vis.ee/#sample-share-url
Password: ******Delete shared files
$ ffsend delete https://send.vis.ee/#sample-share-urlAdvanced Features: Archiving and QR Codes
Automatic directory archiving
Directories are automatically packed when uploading:
$ ffsend upload project-folder/Generate share QR codes
Display a QR code in terminal for easy mobile download:
$ ffsend upload --qr document.pdfURL shortening
Some Send servers support link shortening:
$ ffsend upload --short my-file.txtScripting and Automation
ffsend is designed for automation with several non-interactive flags:
| Flag | Environment Variable | Purpose |
|---|---|---|
-I, --no-interact | FFSEND_NO_INTERACT | Disable interactive prompts for scripts |
-y, --yes | FFSEND_YES | Auto-confirm yes/no prompts |
-f, --force | FFSEND_FORCE | Force operations, skip warnings |
-q, --quiet | FFSEND_QUIET | Minimal output, return only essential info |
-i, --incognito | FFSEND_INCOGNITO | Incognito mode, don't save to history |
Typical script upload example
# Silent upload with automatic clipboard copy, suitable for CI/CD pipelines
URL=$(ffsend -Iy upload -q --copy report.pdf)
echo "Download link: $URL"Set default values via environment
# Set default expiration to 1 hour
export FFSEND_EXPIRY_TIME=1h
# Set default download limit
export FFSEND_DOWNLOAD_LIMIT=3
# Set custom host
export FFSEND_HOST=https://send.example.com/Security Architecture
ffsend uses client-side encryption with these key security features:
| Component | Technology | Description |
|---|---|---|
| Encryption | AES-128-GCM | Symmetric encryption providing confidentiality and integrity |
| Authentication | HMAC SHA-256 | Request signature verification |
| Key location | URL hash fragment | Key after # is never sent to server |
| Optional password | Additional layer | Even with leaked link, password required |
The encryption key is embedded in the share link's hash portion (after #). When accessing via browser, the hash is not sent to the server—only the page JavaScript can read it. This means even if the share link is intercepted, the file cannot be decrypted without the key.
Single-Command Aliases: ffput and ffget
ffsend supports creating single-purpose command aliases via symlinks:
# Create alias links
ln -s $(which ffsend) ./ffput
ln -s $(which ffsend) ./ffget
# Use ffput for direct upload
./ffput my-file.txt
# Use ffget for direct download
./ffget https://send.vis.ee/#sample-share-urlSupported aliases:
ffput→ffsend uploadffget→ffsend downloadffdel→ffsend delete
Comparison with Similar Tools
| Feature | ffsend | croc | magic-wormhole |
|---|---|---|---|
| Receiver requirements | Any browser | Must install croc | Must install wormhole |
| End-to-end encryption | ✅ | ✅ | ✅ |
| No account needed | ✅ | ✅ | ✅ |
| File expiration | ✅ (automatic) | ❌ | ❌ |
| History tracking | ✅ | ❌ | ❌ |
| Multi-file upload | ✅ (auto-archive) | ✅ | ✅ |
| QR code support | ✅ | ✅ | ❌ |
| Self-hosted server | ✅ | ✅ | ✅ |
ffsend's unique advantage is zero receiver friction. For scenarios where you frequently share files with non-technical users, a browser link is far more practical than asking them to install a client.
Use Cases
- Temporary sharing of sensitive files: Keys, certificates, configs you don't want on third-party servers long-term
- Cross-platform quick transfer: From Linux servers to Windows/Mac users
- Automated report distribution: CI/CD pipelines generating and sharing build artifacts
- Temporary large file transfer: Exceeds email limits, don't want to register for cloud storage
- Privacy-first workflows: Individuals or teams prioritizing data sovereignty
ffsend won't replace continuous sync solutions like Syncthing, nor is it meant for long-term storage. But for "temporarily, securely, and conveniently sharing a single file," it's an efficient choice for command-line users. One command for encrypted upload, one link for cross-platform sharing, automatic cleanup when expired—no worrying about data residue.
Source:
Help us make these docs great!
All X-CMD docs are generated from command help and multiple data sources. See something that's wrong or unclear? Feel free to let us know through any of these ways~