A Rust BitTorrent Client in your Terminal - superseedr.com
6.9K
Superseedr is a modern Rust BitTorrent client featuring a high-performance terminal UI, real-time swarm observability, secure VPN-aware Docker setups, and zero manual network configuration. It is fast, privacy-oriented, and built for both desktop users and homelab/server workflows.

| Experience | Networking | Engineering |
|---|---|---|
| π¨ 60 FPS TUI + Themes Fluid, animated interface with heatmaps and 40 live-switchable built-in themes. | π³ Docker + VPN Gluetun integration with dynamic port reloading. | 𧬠BitTorrent v2 Hybrid swarms & Merkle tree verification. |
| π° RSS Feeds In-app feed tracking, filtering, and ingest. | π§© Cluster Mode OS-agnostic shared torrent catalog with automatic failover. | π§ Self-Tuning Adaptive limits control for max speed and I/O Stability. |
| π§² Magnet Links Native OS-level handler support. | π» Private Mode Optional builds disabling DHT/PEX. | π‘ Integrity Prober Continuous lightweight background integrity checks with fast recovery reprobes. |
Download platform-specific installers from the releases pageβ (includes browser magnet link support):
.exe per-user installer (no admin) or .msi installer.pkg installer.deb packagecargo install superseedrbrew install superseedryay -S superseedr (via AUR)Open a terminal
superseedr
| Key | Action |
|---|---|
m | Open full manual / help |
Q | Quit |
β β β β | Navigate |
c | Configure Settings |
Tip
Add torrents by clicking magnet links in your browser or opening .torrent files. Copying and pasting (ctrl + v) magnet links or paths to torrent files will also work.
Connection or Disk issues?
ulimit -n 65536Slow downloads?
More help: See the FAQβ or open an issueβ
Superseedr offers a fully secured Docker setup using Gluetun. All BitTorrent traffic is routed through a VPN tunnel with dynamic port forwarding and zero manual network configuration.
If you want privacy and simplicity, Docker is the recommended way to run Superseedr.
Follow steps below to create .env and .gluetun.env files to configure OpenVPN or WireGuard.
# Docker (No VPN):
# Uses internal container storage. Data persists until the container is removed.
docker run -it jagatranvo/superseedr:latest
# Docker Compose (Gluetun with your VPN):
# Requires .env and .gluetun.env configuration (see below).
docker compose up -d && docker compose attach superseedr
Get the Docker configuration files: You only need the Docker-related files to run the pre-built image, not the full source code.
Option A: Clone the repository (Simple) This gets you everything, including the source code.
git clone https://github.com/Jagalite/superseedr.git
cd superseedr
Option B: Download only the necessary files (Minimal) This is ideal if you just want to run the Docker image.
mkdir superseedr
cd superseedr
# Download the compose file and example config files
curl -sL \
-O https://raw.githubusercontent.com/Jagalite/superseedr/main/docker-compose.yml \
-O https://raw.githubusercontent.com/Jagalite/superseedr/main/.env.example \
-O https://raw.githubusercontent.com/Jagalite/superseedr/main/.gluetun.env.example
# Note the example files might be hidden run the commands below to make a copy.
cp .env.example .env
cp .gluetun.env.example .gluetun.env
Recommended: Create your environment files:
App Paths & Build Choice: Edit your .env file from the example. This file controls your data paths and which build to use.
cp .env.example .env
Edit .env to set your absolute host paths (e.g., HOST_SUPERSEEDR_ROOT_PATH=/my/path/seedbox). This is important: it maps the container's shared seedbox root (/seedbox) to a real folder on your computer. Keep superseedr-config/ inside that root for the simplest shared-config setup.
VPN Config: Edit your .gluetun.env file from the example.
cp .gluetun.env.example .gluetun.env
Edit .gluetun.env with your VPN provider, credentials, and server region.
Gluetun provides:
Many VPN providers frequently assign new inbound ports. Most BitTorrent clients must be restarted when this port changes, breaking connectability and slowing downloads. Superseedr can detect Gluetunβs updated port and reload the listener live, without a restart, preserving swarm performance.
.gluetun.env file.docker-compose.yml file:docker compose up -d && docker compose attach superseedr
To detach from the TUI without stopping the container, use the Docker key sequence:
Ctrl+Pfollowed byCtrl+Q. Optional: press[z]first to enter power-saving mode.
This runs the client directly without Gluetun. It is useful for advanced users who want to manage networking themselves.
docker run --rm -it \
-e SUPERSEEDR_DEFAULT_DOWNLOAD_FOLDER=/seedbox \
-e SUPERSEEDR_SHARED_CONFIG_DIR=/seedbox \
-e SUPERSEEDR_SHARED_HOST_ID=seedbox-docker \
-p 6881:6881/tcp \
-p 6881:6881/udp \
-v /your/seedbox:/seedbox \
-v ./docker-data/share:/root/.local/share/jagalite.superseedr \
jagatranvo/superseedr:latest
Replace /your/seedbox with the shared seedbox root on your host. Keep superseedr-config/ inside that folder so the container sees it at /seedbox/superseedr-config.
Superseedr is built around a local CLI and a file-based automation model, so you can script, queue, and inspect work without exposing a network control stack. The same command flow works when a client is online, when it is offline, and in shared mode when you are operating against a remote leader through a mounted shared root.
Check out the Superseedr Plugins Repositoryβ for plugins (beta testing).
Superseedr uses a file-based watch-folder architecture so local automation, scripts, containers, and other processes can control ingestion without needing a separate daemon protocol.
Each node can watch a local watch_folder. In standalone mode, that watch
folder feeds the local client directly. In shared mode, followers watch their
own local folders and relay supported files into the shared inbox so the leader
can process them and update the shared catalog.
Processed watch files are archived after handling so the queue stays deterministic and auditable.
| File Type | Action |
|---|---|
.torrent | Adds a torrent from a torrent file. In shared mode, follower-side ingest may stage the torrent for leader processing. |
.magnet | Adds a torrent from a magnet link stored as text. |
.path | Adds a torrent from a referenced torrent-file path. In shared mode, cross-host handling uses portable shared-root-aware staging. |
.control | Applies queued control requests such as pause, resume, remove, purge, and priority changes. |
shutdown.cmd | Requests graceful shutdown of the running client or shared leader. |
See docs/shared-config.mdβ for shared inbox and
leader/follower watch-folder behavior.
The CLI uses the same file-oriented control model. Depending on mode, commands either:
That makes the CLI easy to script from shells, containers, task runners, and other local automation.
See docs/cli.mdβ for the full CLI guide.
# Add a magnet link
superseedr add "magnet:?xt=urn:btih:..."
# Add a torrent file by path
superseedr add "/path/to/linux.iso.torrent"
# Inspect the current shared launcher selection
superseedr show-shared-config
# Launch from an existing shared root without persisting it
cd "/path/to/seedbox"
superseedr
# Show resolved config, log, status, journal, and watch paths
superseedr show-configs
# Persist shared launcher config for installed/protocol launches
superseedr set-shared-config "/path/to/seedbox"
# Convert local config into layered shared config
superseedr to-shared "/path/to/seedbox"
# Convert the active shared config back into local standalone config
superseedr to-standalone
# Stop the client gracefully
superseedr stop-client
See docs/cli.mdβ for full CLI command behavior, and
docs/shared-config.mdβ for shared leader/follower
routing.
To choose a new available peer-listening port on every start, set
client_port = "RANDOM" in settings.toml. You can also launch with
SUPERSEEDR_CLIENT_PORT=RANDOM or the shorter PORT=RANDOM. A numeric
SUPERSEEDR_CLIENT_PORT takes precedence and selects a fixed port.
For external dashboards, health checks, and lightweight automation, Superseedr periodically dumps runtime state to JSON.
You can control how often this file is updated using the output_status_interval setting.
Environment Variable: Set this variable in your Docker config to change the update frequency (in seconds).
# Update the status file every 5 seconds
SUPERSEEDR_OUTPUT_STATUS_INTERVAL=5
Superseedr can track RSS feeds in-app, evaluate feed items against your configured matching rules, and automatically ingest matching releases without needing an external automation stack.
RSS download history is capped at 1000 entries.
persistence/rss.toml.Shared mode gives you an OS- and machine-agnostic torrent catalog and settings
that live alongside your data on the NAS or shared root. Any Superseedr client
that mounts that shared root can connect and reuse the same catalog in real time.
Superseedr CLI commands work against that shared config both online and offline. See
docs/shared-config.mdβ for the full shared-mode guide.
Same shared root, different local mount paths
NAS
/shared/superseedr
ββ superseedr-config/
β ββ settings.toml
β ββ catalog.toml
β ββ ...
ββ video1.mkv
macOS
$ superseedr set-shared-config /Volumes/superseedr-mount
$ superseedr
/Volumes/superseedr-mount
ββ superseedr-config/
β ββ settings.toml
β ββ catalog.toml
β ββ ...
ββ video1.mkv
Windows
> superseedr set-shared-config "X:\superseedr-mount"
> superseedr
X:\superseedr-mount
ββ superseedr-config\
β ββ settings.toml
β ββ catalog.toml
β ββ ...
ββ video1.mkv
Cluster mode turns that shared catalog into an active multi-node setup. One node acts as leader and updates shared desired state, while other nodes stay online as followers that continue seeding and apply the leader-written catalog in real time. If the leader goes away, another node can take over automatically, and each host can mount the same shared root at a different local path for cross-OS operation.
Shared Root / NAS
/shared/superseedr
βββββββββββββββββββββββββ
β superseedr-config/ β
β settings.toml β
β catalog.toml β
β inbox/ β
β hosts/ β
βββββββββββββββββββββββββ
β β
β β
Leader Follower
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β Windows β β macOS β
β X:\superseedr-mount β β /Volumes/superseedr- β
β β β mount β
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
Superseedr is built on a Reactive Actor architecture verified by model-based fuzzing, ensuring stability under chaos. It features a Self-Tuning Resource Allocator that adapts to your hardware in real-time and a hybrid BitTorrent v2 engine, all powered by asynchronous Tokio streams for maximum throughput.
This section is designed for developers, contributors, and AI agents seeking to understand the internal design decisions that drive Superseedr's performance.
Superseedr is built on the Tokio runtime, leveraging asynchronous I/O for maximum concurrency.
tokio::io::split). This allows the client to saturate download and upload bandwidth simultaneously without thread blocking or lock contention, ensuring the UI remains responsive even with thousands of active connections.mpsc channels, meaning a slow or misbehaving peer cannot block the main event loop or affect other connections.notify) on the VPN configuration volume. When Gluetun rotates the forwarded port, Superseedr detects the file change and instantly rebinds the TCP listener to the new port without dropping the swarm state or restarting the process.The Peer Manager turns per-torrent connection data into a global, IP-centric view of peer behavior without adding continuous work to the TUI render loop.
Superseedr ships a first-party Mainline DHT implementation instead of treating DHT as a black-box peer source.
find_node, get_peers, and announce_peer traffic.--no-default-features, the DHT and Peer Exchange (PEX) modules are completely excluded from the binary, guaranteeing zero leakage of private swarms.The application logic abandons traditional mutex-heavy threading in favor of a Functional Reactive architecture.
TorrentManager operates as a Finite State Machine (FSM). External events (Network I/O, Timer Ticks) are transmuted into Action enums, processed purely in memory, and result in a list of Effects.Instead of static ulimit values, Superseedr runs a Stochastic Hill Climbing optimizer in the background.
Superseedr automatically and continuously checks completed torrents in the background without falling back to blunt full-library rescans.
Content type
Image
Digest
sha256:c493f4787β¦
Size
37.5 MB
Last updated
18 days ago
docker pull jagatranvo/superseedr