ffsend is a free, open source file management & sync project written in Rust and released under GPL-3.0. It has 7,413 GitHub stars, 205 forks and 33 open issues, and was last pushed 10 months ago. On this registry it ranks #14 of 23 tracked projects in File Management & Sync, with 5 head-to-head comparisons available.

What is ffsend?

ffsend is a command-line client for the Send file-sharing service that uploads and downloads encrypted files and directories through a single terminal command, built for developers, system administrators and anyone who prefers a scriptable, privacy-respecting alternative to a web upload form.

What it is

ffsend is a fully featured command-line client for the Send service, written in Rust and released under the GPL-3.0 licence. It shares files and directories from the terminal through a safe, private and encrypted link using a single simple command, and shared files may be up to 1GB in size. Recipients can download those files with this same tool or through their own web browser. The project lives in the Firefox Send ecosystem, since it is a Send client, but it states plainly that it is not affiliated with Firefox or Mozilla in any way, and the default public Send host it talks to is provided by a private individual rather than by Mozilla.

The concrete problem ffsend solves is the clumsy, manual workflow of opening a browser, selecting a file, waiting for an upload and copying a link. ffsend collapses that into one command, and it keeps the security properties intact along the way: all files are always encrypted on the client, and secrets are never shared with the remote host. An optional password may be specified, and a default file lifetime of one download (configurable up to twenty) or twenty-four hours is enforced so that shared material does not remain online forever. It replaces the web interface of the Send service with a native, automatable tool that behaves well in scripts and pipelines.

Key capabilities

  • Upload and download files and directories securely, with everything always encrypted on the client before it leaves the machine.
  • Optional password protection with password generation and configurable download limits, set through flags such as --downloads and --password.
  • File and directory archiving and extraction, enabled with the --archive flag, so a whole directory can be shared as one link.
  • A built-in share URL shortener and QR code generator for the links it produces.
  • Support for both Send v3 (current) and Send v2, allowing it to work with hosts running either version.
  • Inspection and management of shared files through commands such as ffsend info and ffsend exists, including history tracking for easy management.
  • Streaming encryption with a very low memory footprint, and non-interactive operation intended for use in scripts.

Who uses it and how

  • Developers and system administrators who need to share build artifacts, logs or configuration files from a server without leaving the terminal.
  • Automation and CI-style workflows, since the tool is designed for use in scripts without interaction.
  • Teams or individuals running their own Send hosts, who point ffsend at a custom endpoint with the -h flag, for example ffsend u -h https://example.com/ my-file.txt.
  • Users who want to cap exposure of a shared file by setting a download limit or a short expiry time, such as --downloads 1 --expiry-time 5m.
  • Recipients who never install ffsend at all and simply open the resulting link in a web browser.

Getting started

ffsend is published as a crate on crates.io, so it can be installed with Cargo, and the README also lists install paths for Linux across all distributions, macOS, Windows, FreeBSD, Android and other operating systems and architectures. A basic upload is then a single command: ffsend upload my-file.txt.

How it compares

Among the tools named in the facts, ffsend is best understood as a client layered on top of the Send service rather than a standalone sharing platform of its own, and it works against the default public host or any other Send host the user points it at. Because it is a command-line client, it complements rather than replaces the browser-based Send interface, offering the same encrypted sharing model to people who work in a terminal.

When to use it — and when not to

ffsend suits users who are comfortable in a terminal and who either accept the default public Send host or are willing to run and trust a Send host of their own, since the tool does not provide that server itself. Anyone who needs a stable, finished product should note that the README states the tool is currently in beta, with additional desired features still to be implemented, and that the default host is maintained by a single individual and kept running through donations. Files are also capped at 1GB, so it is not the right choice for share sizes beyond that limit.

project readme (upstream, from github) — read inline

Build status on GitLab CI Newest release on crates.io Project license

Notice: the default Send host is provided by [@timvisee][timvisee] (info). Please consider to [donate] and help keep it running.

ffsend

Easily and securely share files from the command line. A [Send][send] client.

Easily and securely share files and directories from the command line through a safe, private and encrypted link using a single simple command. Files are shared using the [Send][send] service and may be up to 1GB. Others are able to download these files with this tool, or through their web browser.

[![ffsend usage demo][usage-demo-svg]][usage-demo-asciinema]
No demo visible here? View it on [asciinema][usage-demo-asciinema].

All files are always encrypted on the client, and secrets are never shared with the remote host. An optional password may be specified, and a default file lifetime of 1 (up to 20) download or 24 hours is enforced to ensure your stuff does not remain online forever. This provides a secure platform to share your files. Find out more about security here.

The public [Send][send] service that is used as default host is provided by [@timvisee][timvisee] (info).
This application is not affiliated with [Firefox][firefox] or [Mozilla][mozilla] in any way.

Note: this tool is currently in beta, as some extra desired features are yet to be implemented

Features

  • Fully featured and friendly command line tool
  • Upload and download files and directories securely, always encrypted on the client
  • Additional password protection, generation and configurable download limits
  • File and directory archiving and extraction
  • Built-in share URL shortener and QR code generator
  • Supports Send v3 (current) and v2
  • History tracking your files for easy management
  • Ability to use your own Send hosts
  • Inspect or delete shared files
  • Accurate error reporting
  • Streaming encryption and uploading/downloading, very low memory footprint
  • Intended for use in scripts without interaction

For a list of upcoming features and ideas, take a look at the current open issues over on GitLab.

Usage

Easily upload and download:

# Simple upload
$ ffsend upload my-file.txt
https://send.vis.ee/#sample-share-url

# Advanced upload
# - Specify a download limit of 1
# - Specify upload expiry time of 5 minutes
# - Enter a password to encrypt the file
# - Archive the file before uploading
# - Copy the shareable link to your clipboard
# - Open the shareable link in your browser
$ ffsend upload --downloads 1 --expiry-time 5m --password --archive --copy --open my-file.txt
Password: ******
https://send.vis.ee/#sample-share-url

# Upload to your own host
$ ffsend u -h https://example.com/ my-file.txt
https://example.com/#sample-share-url

# Simple download
$ ffsend download https://send.vis.ee/#sample-share-url

Inspect remote files:

# Check if a file exists
$ ffsend exists https://send.vis.ee/#sample-share-url
Exists: yes

# Fetch remote file info
$ 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)

Other commands include:

# View your file history
$ 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       37m30s

# Change the password after uploading
$ ffsend password https://send.vis.ee/#sample-share-url
Password: ******

# Delete a file
$ ffsend delete https://send.vis.ee/#sample-share-url

Use the --help flag, help subcommand, or see the help section for all available subcommands.

Requirements

  • Linux, macOS, Windows, FreeBSD, Android (other BSDs might work)
  • A terminal :sunglasses:
  • Internet connection
  • Linux:
    • OpenSSL & CA certificates:
      • Ubuntu, Debian and derivatives: apt install openssl ca-certificates
    • Optional: xclip or xsel for clipboard support
      • Ubuntu, Debian and derivatives: apt install xclip
      • CentOS/Red Hat/openSUSE/Fedora: yum install xclip
      • Arch: pacman -S xclip
  • Windows specific:
    • Optional OpenSSL with crypto-openssl feature: [» Installer][openssl-windows-installer] (v1.1.0j or above)
  • macOS specific:
  • FreeBSD specific:
    • OpenSSL: pkg install openssl
    • CA certificates: pkg install ca_root_nss
    • Optional xclip & xsel for clipboard support: pkg install xclip xsel-conrad
  • Android specific:
    • Termux: [» Termux][termux]

Install

Because ffsend is still in early stages, only limited installation options are available right now. Feel free to contribute additional packages.

Make sure you meet and install the requirements.

See the operating system specific instructions below:

Linux (all distributions)

Using the snap package is recommended if supported.
Alternatively you may install it manually using the prebuilt binaries.

Only 64-bit (x86_64) packages and binaries are provided. For other architectures and configurations you may compile from source.

More packages options will be coming soon.

Linux: snap package

Note: The ffsend snap package is isolated, and can only access files in your home directory. Choose a different installation option if you don't want this limitation.

Note: due to how snap is configured by default, you won't be able to use the package from some contexts such as through SSH without manual modifications. If you're experiencing problems, please refer to a different installation method such as the prebuilt binaries, or open an issue. _Note: if you want to read/write to a flash drive run snap connect ffsend:removable-media

ffsend][snapcraft-ffsend]

snap install ffsend
ffsend --help
Linux: Arch AUR packages

ffsend-bin][aur-ffsend-bin] (precompiled binary, latest release, recommended)
ffsend][aur-ffsend] (compiles from source, latest release)
ffsend-git][aur-ffsend-git] (compiles from source, latest master commit)

yay -S ffsend
# or
aurto add ffsend-bin
sudo pacman -S ffsend-bin
# or using any other AUR helper

ffsend --help
Linux: Nix package

Note: The Nix package is currently not automatically updated, and might be slightly outdated.

[» ffsend][nix-ffsend]

nix-channel --update
nix-env --install ffsend

ffsend --help
Linux: Fedora package

Note: The Fedora package is maintained by contributors, and might be slightly outdated.

[» ffsend][fedora-ffsend]

sudo dnf install ffsend

ffsend --help
Linux: Alpine package

Note: The Alpine package is maintained by contributors, it might be outdated. Choose a different installation method if an important update is missing.

[» ffsend][alpine-ffsend]

apk add ffsend --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing

ffsend --help
Linux: Prebuilt binaries

Check out the [latest release][github-latest-release] assets for Linux binaries.
Use the ffsend-v*-linux-x64-static binary, to minimize the chance for issues. If it isn't available yet, you may use an artifact from a [previous version][github-releases] instead, until it is available.

Make sure you meet and install the requirements before you continue.

You must make the binary executable, and may want to move it into /usr/bin to make it easily executable:

readme truncated — read the full docs on github

Frequently asked questions

Is ffsend free to use?

ffsend is open source under the GPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does ffsend do?

:mailbox_with_mail: Easily and securely share files from the command line. A fully featured Firefox Send client.

What is ffsend written in?

ffsend is primarily written in Rust. Its source is publicly available at https://github.com/timvisee/ffsend, and it has 7,413 GitHub stars.