Skip to content

gabrieldemian/vincenzo

Repository files navigation

Vincenzo

Vincenzo is a BitTorrent client with vim-like keybindings and a terminal based UI.

image

About

Vincenzo aims to be a modern, fast, minimalistic*, and good-looking BitTorrent client.

*Minimalistic here means that the UI is not bloated, configuration is done through the configuration file, no ads, and no telemetry.

The official UI runs on the terminal with vim-like keybindings.

Vcz offers 3 binaries:

  • vcz - Both UI and daemon together.
  • vcz-daemon - Daemon.
  • vcz-ui - UI (connects to daemon remotely).

Warning

Experimental software, not production ready yet.

I develop on rust nightly. I have only tested on my x86 Linux machine, but probably works in other platforms.

The protocol is fully implemented with good performance and with many nice extensions that you would expect, however, some things are missing and sometimes there are crashes. Security features are not present yet.

Features

  • Multi-platform.
  • Fast downloads.
  • Daemon detached from the UI. Remote control by TCP messages or UI binary in another machine. (note that this is not secured by authentication yet).

How to use

Right now, you have to download the repo and compile it from scratch, remember to use the --release.

$ git clone git@github.com:gabrieldemian/vincenzo.git
$ cd vincenzo
$ cargo build --release
$ cd ./target/release
./vcz

Configuration

We have 3 sources of configuration, in order of lowest priority to the highest: config file -> CLI flags -> ENV variables.

The config file is located at the default config folder of your OS.

  • Linux: ~/.config/vincenzo/config.toml
  • Windows: C:\Users\Alice\AppData\Roaming\Vincenzo\config.toml
  • MacOS: /Users/Alice/Library/Application Support/Vincenzo/config.toml

For the CLI flags, use --help.

CLI flags

$vcz --help

Usage: vczd [OPTIONS]

Options:
  -d, --download-dir
                    dir to write torrent files
  --metadata-dir    dir to store .torrent files
  --daemon-addr     where daemon listens for connections
  --local-peer-port port that the client connect to other peers
  --max-global-peers
                    max global TCP connections
  --max-torrent-peers
                    max peers in each torrent, capped by `max_global_peers
  --is-ipv6         if the client addr is ipv6
  --log             if the program writes logs to disk
  -q, --quit-after-complete
                    make daemon quit after all downloads are completed
  -k, --key         key that peer sends to trackers, defaults to random
  -m, --magnet      add magnet url to the daemon
  --stats           print the stats of all torrents
  --pause           pause this torrent
  --quit            terminate the process of the daemon
  -h, --help        display usage information

Default config.toml

download_dir = "$XDG_DOWNLOAD_DIR"
daemon_addr = "0.0.0.0:51411"
max_global_peers = 500
max_torrent_peers = 50
local_peer_port = 51413
is_ipv6 = false
log = false

Supported BEPs

  • BEP 0003 The BitTorrent Protocol Specification.

  • BEP 0009 Extension for Peers to Send Metadata Files.

  • BEP 0010 Extension Protocol.

  • BEP 0015 UDP Tracker Protocol.

  • BEP 0023 Tracker Returns Compact Peer Lists.

Roadmap

# Step Status
1 Base core protocol and algorithms: endgame, unchoke, etc.
2 Quality of life extensions: magnet, UDP trackers, etc.
3 Perf: cache, multi-tracker, fast IO, zero-copy, etc.
4 Saving metainfo files on disk after downloading it
5 Select files to download before download starts
6 Streaming of videos
7 µTP, UDP hole punch, and fancy features ⚠️
... Others

About

A BitTorrent client with vim-like keybindings and a terminal based UI.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages