#file-transfer #command-line-tool #relay-server #send-file #port #forwarding #encryption

app gday

Command line tool to securely send files (without a relay or port forwarding)

4 releases (2 breaking)

new 0.3.0 Dec 2, 2024
0.2.1 Jul 12, 2024
0.2.0 Jul 8, 2024
0.1.1 Jun 7, 2024

#202 in Network programming

Download history 14/week @ 2024-09-13 11/week @ 2024-09-20 3/week @ 2024-09-27 132/week @ 2024-11-29

132 downloads per month

MIT license

130KB
2K SLoC

gday

Crates.io Version

Command line tool to securely send files (without a relay or port forwarding).

peer_1: gday send file.mp4 folder
Tell your mate to run "gday get 1.n5xn8.wvqsf".
peer_2: gday get 1.n5xn8.wvqsf
Transfer complete.

asciicast

Installation

To run the executable directly:

  1. Download an executable from releases.
  2. Extract it (on Linux: tar xf <file>).
  3. Run it: ./gday

To install with cargo:

cargo install gday

To install with brew:

brew install manforowicz/tap/gday

Features

  • No limit on the size of files and folders sent.

  • Files are sent directly, without relay servers. A server is only used to exchange socket addresses at the beginning.

  • Automatically resumes interrupted transfers. Just gday send the same files, and partial downloads will be detected and resumed.

  • Doesn't require port forwarding. Instead, uses TCP Hole Punching to traverse NATs. This may not work on very restrictive NATs. If that happens, enable IPv6 or move to a different network.

  • If a contact exchange server is down, just uses a different one from the default list. Or specify your own with --server.

  • Server connection encrypted with TLS and file transfer end-to-end encrypted with ChaCha20Poly1305.

  • Automatically tries both IPv4 and IPv6.

  • Resistant to malicious servers impersonating your peer. Uses SPAKE2 to derive an encryption key from a shared secret.

  • No unsafe Rust in this repository.

Usage

Usage: gday [OPTIONS] <COMMAND>

Commands:
  send  Send files and/or directories
  get   Receive files
  help  Print this message or the help of the given subcommand(s)

Options:
  -s, --server <SERVER>        Use a custom gday server with this domain name
  -p, --port <PORT>            Connect to a custom server port
  -u, --unencrypted            Connect to server with TCP instead of TLS
  -v, --verbosity <VERBOSITY>  Verbosity. (trace, debug, info, warn, error) [default: warn]
  -h, --help                   Print help
  -V, --version                Print version

Similar Projects

No relays Works beyond LAN Works through very strict NATs No port forwarding Encrypted Can resume interrupted transfers
gday
magic-wormhole
croc
p2pcopy
iwant
zget
sharedrop
filepizza
Personal SSH or HTTPS
Personal FTP
Dropbox, Google Drive, etc.
Delivering a USB drive

Open an issue to add more projects to this list.

Dependencies

~18–28MB
~507K SLoC