Fly-by-wire (abbreviated Fly) is a file transfer protocol for the modern age. The repo includes the protocol specification, as well as reference client & server implementations.
The project's main ambition is to address some of the shortcomings of the FTP protocol. It's main selling points include:
- Firewall-friendly (only uses a single TCP port)
- Connections encrypted with TLS by default
- Commands & binary data are multiplexed over a single connection
- Uses an internal user database independent from system users
- Supports powerful access control policies inspired by S3 bucket policies
- Users and access control are managed directly via the protocol
- (WIP) Mirrors files & folders efficiently, similarly to rsync
Progress
The project is currently a work in progress. Use at your own risk.
Server:
- Implements 100% of the protocol
Client:
- Only supports file upload & download
Building
make fly-server
make fly
The binaries will be compiled to the bin/
folder.
Using the Server
Usage: fly-server ROOTDIR
Start serving files from ROOTDIR.
The user initiating that command needs to have full read/write access to ROOTDIR.
Users and ACL rules are stored directly inside the root directory, under a hidden folder named .fly (invisible to clients).
By default, the server listens to port 6767 with TLS enabled.
Options:
- -port: change the port number
- -notls: disable TLS (not recommended)
- -debug: enable debug logging
Using the Client
Usage: fly cp SOURCE DEST
Copies SOURCE to DEST.
Use the "//" prefix to denote remote paths, e.g.:
//files.example.com:1234/some/path/file.txt
Transfers between two Fly servers, or between two local paths are not currently supported.
Options:
- -notls: disable TLS (not recommended)
Further Reading