Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
R

rqbit

> 编程语言
Open source

A bittorrent client in Rust

1.8K stars0 likes1 views
WebsiteGitHub

About

A bittorrent client in Rust

rqbit - bittorrent client in Rust

rqbit is a bittorrent client written in Rust. Has HTTP API and Web UI, and can be used as a library.

Also has a desktop app built with Tauri.

Usage quick start

Optional - start the server

Assuming you are downloading to ~/Downloads.

rqbit server start ~/Downloads

Download torrents

Assuming you are downloading to ~/Downloads. By default it'll download to current directory.

rqbit download [-o ~/Downloads] 'magnet:?....' [https?://url/to/.torrent] [/path/to/local/file.torrent]

Web UI

Access at http://localhost:3030/web/. See screenshot below (torrent names and speeds are simulated).

Desktop app

The desktop app is a thin wrapper on top of the Web UI frontend.

Download it in Releases for OSX and Windows. For Linux, build manually with

cargo tauri build

It looks similar to the Web UI (screenshot above).

Streaming support

rqbit can stream torrent files and smartly block the stream until the pieces are available. The pieces getting streamed are prioritized. All of this allows you to seek and live stream videos for example.

You can also stream to e.g. VLC or other players with HTTP URLs. Supports seeking too (through various range headers). The streaming URLs look like http://IP:3030/torrents/<torrent_id>/stream/<file_id>

Integrated UPnP Media Server

rqbit can advertise managed torrents to LAN, e.g. your TVs and stream torrents there (without transcoding). Seeking to arbitrary points in the videos is supported too.

Usage from CLI

rqbit --enable-upnp-server server start ...

mDNS advertising

rqbit can advertise its HTTP API on your LAN via mDNS/DNS-SD, so you can open the Web UI at http://rqbit.local:3030/web/ from any device without knowing the server's IP.

Usage from CLI (requires a non-loopback listen address):

rqbit --enable-mdns --http-api-listen-addr 0.0.0.0:3030 server start ...

IPv6

rqbit supports IPv6. By default it listens on all interfaces in dualstack mode. It can work even if there's no IPv6 enabled.

Shell completions

Assuming bash, add this to your ~/.bashrc. Modify for your shell of choice.

eval "$(rqbit completions bash)"

Socks proxy support

rqbit --socks-url socks5://[username:password]@host:port ...

Watching a directory for .torrents

rqbit server start --watch-folder [path] /download/path

Systemd socket activation

rqbit can be started on-demand via systemd socket activation by installing the service and socket systemd units into $XDG_CONFIG_HOME/systemd/user/ (~/.config/systemd/user) and customizing them to your needs. If the associated rqbit.conf file is installed in $XDG_CONFIG_HOME/rqbit/rqbit.conf (~/.config/rqbit/rqbit.conf), it will be used to configure rqbit when started via the provided systemd unit.

Performance

Anecdotally from a few reports, rqbit is faster than other clients they've tried, at least with their default settings.

Memory usage for the server is usually within a few tens of megabytes, which makes it great for e.g. RaspberryPI.

I've got a report that rqbit can saturate a 20Gbps link, although I don't have the hardware to confirm.

Installation

There are pre-built binaries in Releases.

Homebrew

rqbit can be installed using Homebrew.

bash
brew install rqbit

Cargo

If you have the Rust toolchain installed then you can use the following.

bash
cargo install rqbit

Docker

Docker images are published at ikatson/rqbit

Build

Just a regular Rust binary build process.

cargo build --release

The "webui" feature requires npm installed.

Some useful options

Run rqbit --help to see all available CLI options.

-v

Increase verbosity. Possible values: trace, debug, info, warn, error.

--list

Will print the contents of the torrent file or the magnet link.

--overwrite

If you want to resume downloading a file that already exists, you'll need to add this option.

-r / --filename-re

Use a regex here to select files by their names.

Features (not exhaustive)

Supported BEPs

  • BEP-3: The BitTorrent Protocol Specification
  • BEP-5: DHT Protocol
  • BEP-7: IPv6 Tracker Extension
  • BEP-9: Extension for Peers to Send Metadata Files
  • BEP-10: Extension Protocol
  • BEP-11: Peer Exchange (PEX)
  • BEP-12: Multitracker Metadata Extension
  • BEP-14: Local service discovery
  • BEP-15: UDP Tracker Protocol
  • BEP-20: Peer ID Conventions
  • BEP-23: Tracker Returns Compact Peer Lists
  • BEP-27: Private Torrents
  • BEP-29: uTorrent Transport Protocol
  • BEP-32: IPv6 extension for DHT
  • BEP-47: Padding files and extended file attributes
  • BEP-53: Magnet URI extension - Select specific file indices for download

Some supported features

  • Sequential downloading (the default and only option)
  • Resume downloading file(s) if they already exist on disk
  • Selective downloading using a regular expression for filename
  • DHT support. Allows magnet links to work, and makes more peers available.
  • HTTP API
  • Pausing / unpausing / deleting (with files or not) APIs
  • Stateful server
  • Web UI
  • Streaming, with seeking
  • UPNP port forwarding to your router
  • UPNP Media Server
  • mDNS advertising
  • Fastresume (no rehashing)
  • Download / upload rate limiting
  • Prometheus metrics at /metrics and /torrents/<id_or_infohash>/peer_stats/prometheus

HTTP API

By default it listens on http://127.0.0.1:3030.

…

Basic auth

For HTTP API basic authentication set RQBIT_HTTP_BASIC_AUTH_USERPASS environment variable.

RQBIT_HTTP_BASIC_AUTH_USERPASS=username:password rqbit server start ...

Add torrent through HTTP API

curl -d 'magnet:?...' http://127.0.0.1:3030/torrents

OR

curl -d 'http://.../file.torrent' http://127.0.0.1:3030/torrents

OR

curl --data-binary @/tmp/xubuntu-23.04-minimal-amd64.iso.torrent http://127.0.0.1:3030/torrents

Supported query parameters, all optional:

  • overwrite=true|false
  • only_files_regex - the regular expression string to match filenames
  • output_folder - the folder to download to. If not specified, defaults to the one that rqbit server started with
  • list_only=true|false - if you want to just list the files in the torrent instead of downloading

Code organization

  • crates/rqbit - main binary
  • crates/librqbit - main library
  • crates/librqbit-core - torrent utils
  • crates/bencode - bencode serializing/deserializing
  • crates/buffers - wrappers around binary buffers
  • crates/clone_to_owned - a trait to make something owned
  • crates/sha1w - wrappers around sha1 libraries
  • crates/peer_binary_protocol - the protocol to talk to peers
  • crates/dht - Distributed Hash Table implementation
  • crates/upnp - upnp port forwarding
  • crates/upnp_serve - upnp MediaServer
  • desktop - desktop app built with Tauri
  • librqbit-utp - uTP protocol
  • librqbit-dualstack-sockets - cross-platform IPv6+IPv4 listeners with canonical IPs

Motivation

This project began purely out of my enjoyment of writing code in Rust. I wasn’t satisfied with my regular BitTorrent client and wanted to see how much effort it would take to build one from scratch. Starting with the bencode protocol, then the peer protocol, it gradually evolved into what it is today.

Donations and sponsorship

If you love rqbit, please consider donating through one of these methods. With enough support, I might be able to make this my full-time job one day — which would be amazing!

  • Github Sponsors
  • Crypto
    • ETH (Ethereum) 0x68c54b26b5372d5f091b6c08cc62883686c63527
    • XMR (Monero) 49LcgFreJuedrP8FgnUVB8GkAyoPX7A9PjWfKZA1hNYz5vPCEcYQ9HzKr3pccGR6Lc3V3hn52bukwZShLDhZsk57V41c2ea
    • XNO (Nano) nano_1ghid3z6x41x8cuoffb6bbrt4e14wsqdbyqwp5d8rk166meo3h77q7mkjusr

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Rust

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言