# gday [![Crates.io Version](https://img.shields.io/crates/v/gday)](https://crates.io/crates/gday) 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](https://asciinema.org/a/Z8OJJr8xHRAJh6fuqocNcm9Zu.svg)](https://asciinema.org/a/Z8OJJr8xHRAJh6fuqocNcm9Zu) ## Installation To run the executable directly: 1. Download an executable from [releases](https://github.com/manforowicz/gday/releases). 2. Extract it (on Linux: `tar xf `). 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](https://bford.info/pub/net/p2pnat/) to traverse [NATs](https://en.wikipedia.org/wiki/Network_address_translation). 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](https://en.wikipedia.org/wiki/Transport_Layer_Security) and file transfer end-to-end encrypted with [ChaCha20Poly1305](https://en.wikipedia.org/wiki/ChaCha20-Poly1305). - Automatically tries both IPv4 and IPv6. - Resistant to malicious servers impersonating your peer. Uses [SPAKE2](https://datatracker.ietf.org/doc/rfc9382/) to derive an encryption key from a shared secret. - No `unsafe` Rust in this repository. ## Usage ``` Usage: gday [OPTIONS] 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 Use a custom gday server with this domain name -p, --port Connect to a custom server port -u, --unencrypted Connect to server with TCP instead of TLS -v, --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](https://github.com/manforowicz/gday/issues) to add more projects to this list. ## Related - [gday](https://crates.io/crates/gday) - Command line tool for sending files. - [gday_server](https://crates.io/crates/gday_server) - Server that lets two peers share their socket addresses. - [gday_hole_punch](https://docs.rs/gday_hole_punch/) - Library for establishing peer-to-peer TCP connection. - [gday_file_transfer](https://docs.rs/gday_file_transfer/) - Library for transferring files over a connection. - [gday_encryption](https://docs.rs/gday_encryption/) - Library for encrypting an IO stream. - [gday_contact_exchange_protocol](https://docs.rs/gday_contact_exchange_protocol/) - Library with protocol for two peers to share their socket addresses via a server.