Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gabrieldemian/vincenzo
A BitTorrent client with vim-like keybindings and a terminal based UI.
https://github.com/gabrieldemian/vincenzo
bittorrent bittorrent-client
Last synced: about 2 months ago
JSON representation
A BitTorrent client with vim-like keybindings and a terminal based UI.
- Host: GitHub
- URL: https://github.com/gabrieldemian/vincenzo
- Owner: gabrieldemian
- License: mit
- Created: 2023-05-20T02:10:23.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-08-15T17:08:31.000Z (4 months ago)
- Last Synced: 2024-09-15T23:37:28.456Z (3 months ago)
- Topics: bittorrent, bittorrent-client
- Language: Rust
- Homepage: https://github.com/gabrieldemian/vincenzo
- Size: 70.7 MB
- Stars: 141
- Watchers: 5
- Forks: 7
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-ratatui - vincenzo - A bittorrent client for the terminal with vim-like keybindings. (💻 Apps / 🌐 Networking and Internet)
README
# Vincenzo
Vincenzo is a BitTorrent client with vim-like keybindings and a terminal based UI.[![Latest Version](https://img.shields.io/crates/v/vincenzo.svg)](https://crates.io/crates/vincenzo) ![MIT](https://img.shields.io/badge/license-MIT-blue.svg)
![image](tape.gif)
## Introduction
Vincenzo aims to be a fast, lightweight, and multi-platform client.Another goal is for users to be able to use the [library](crates/vincenzo) to create any other kind of software, that is powered by the BitTorrent protocol.
The official UI binary is very niched, targeting a very specific type of user: someone who loves using the terminal, and vim keybindings. Altough users could create other UIs using the library.
Vincenzo offers 3 binaries and 1 library:
- [vcz](crates/vcz) - Main binary with both UI and daemon.
- [vcz_ui](crates/vcz_ui) - UI binary.
- [vczd](crates/vcz_daemon) - Daemon binary.
- [vincenzo](crates/vincenzo) - Library## Features
- Multi-platform.
- Multithreaded. One OS thread specific for I/O.
- Async I/O with tokio.
- Communication with daemon using CLI flags, TCP messages or remotely via UI binary.
- Detached daemon from the UI.
- Support for magnet links.## How to use
Downloading a torrent using the main binary (the flags are optional and could be omitted in favour of the configuration file).```bash
vcz -d "/tmp/download_dir" -m "" -q
```## Configuration
The binaries read a toml config file.
It 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
### Default config file:
```toml
download_dir = "/home/alice/Downloads"
# default
daemon_addr = "127.0.0.1:3030"
```## Daemon and UI binaries
Users can control the Daemon by using CLI flags that work as messages.Let's say on one terminal you initiate the daemon: `vczd`. Or spawn as a background process so you can do everything on one terminal: `vczd &`.
And you open a second terminal to send messages to the daemon, add a torrent: `vczd -m "magnet:..."` and then print the stats to stdout `vczd --stats`.
You can also run the UI binary (maybe remotely from another machine) to control the Daemon: `vcz_ui --daemon-addr 127.0.0.1:3030`.
CLI flags of Daemon
```
Usage: vczd [OPTIONS]Options:
--daemon-addr The Daemon will accept TCP connections on this address
-d, --download-dir The directory in which torrents will be downloaded
-m, --magnet Download a torrent using it's magnet link, wrapped in quotes
-q, --quit-after-complete If the program should quit after all torrents are fully downloaded
-s, --stats Print all torrent status on stdout
-h, --help Print help
-V, --version Print version
```## Supported BEPs
- [BEP 0003](http://www.bittorrent.org/beps/bep_0003.html) - The BitTorrent Protocol Specification
- [BEP 0009](http://www.bittorrent.org/beps/bep_0009.html) - Extension for Peers to Send Metadata Files
- [BEP 0010](http://www.bittorrent.org/beps/bep_0010.html) - Extension Protocol
- [BEP 0015](http://www.bittorrent.org/beps/bep_0015.html) - UDP Tracker Protocol
- [BEP 0023](http://www.bittorrent.org/beps/bep_0023.html) - Tracker Returns Compact Peer Lists## Roadmap
- [x] Initial version of UI.
- [x] Download pipelining.
- [x] Endgame mode.
- [x] Pause and resume torrents.
- [x] Separate main binary into 3 binaries and 1 library.
- [x] Cache bytes to reduce the number of writes on disk.
- [x] Change piece selection strategy.
- [ ] Choking algorithm.
- [ ] Anti-snubbing.
- [ ] Resume torrent download from a file.
- [ ] Select files to download.
- [ ] Support streaming of videos/music on MPV.## Donations
I'm working on this alone, if you enjoy my work, please consider a donation [here](https://www.glombardo.dev/sponsor).