# 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.