A high-performance C# port of qBitrr — intelligent automation for qBittorrent and the *Arr ecosystem (Radarr, Sonarr, Lidarr). Same
config.tomlformat and SQLite schema as qBitrr; database file istorrentarr.db(notqbitrr.db).
- Full documentation: https://feramance.github.io/Torrentarr/
- Getting Started – Installation guides for Docker and native setups
- Configuration – qBittorrent, Arr instances, quality profiles, and more
- Features – Health monitoring, automated search, quality management, disk space
- WebUI – Built-in React dashboard with live monitoring
- Troubleshooting – Common issues and debug logging
docker run -d \
--name torrentarr \
-e TZ=America/New_York \
-p 6969:6969 \
-v /path/to/appdata/torrentarr:/config \
-v /path/to/completed/downloads:/completed_downloads:rw \
--restart unless-stopped \
feramance/torrentarr:latestDocker Compose:
services:
torrentarr:
image: feramance/torrentarr:latest
container_name: torrentarr
restart: unless-stopped
environment:
TZ: America/New_York
ports:
- "6969:6969"
volumes:
- /path/to/appdata/torrentarr:/config
- /path/to/completed/downloads:/completed_downloads:rwgit clone https://github.com/Feramance/Torrentarr.git
cd Torrentarr
# Build (frontend is built into Host/wwwroot; not committed)
./build.sh # Linux/macOS: builds React then .NET
# or: build.bat # Windows
# Or manually: cd webui && npm run build && cd .. && dotnet restore && dotnet build
# Run (creates ~/config/config.toml on first run)
dotnet run --project src/Torrentarr.Host/Torrentarr.Host.csprojAccess the WebUI at http://<host>:6969/ui after startup.
- Multi-qBittorrent Support – Manage torrents across multiple qBittorrent instances for load balancing, redundancy, and VPN isolation
- Torrent Health Monitoring – Detect stalled/failed downloads, auto-blacklist, trigger re-searches
- Automated Search – Missing media, quality upgrades, custom format scoring
- Quality Management – RSS sync, queue refresh, profile switching, custom format enforcement
- Seeding Control – Per-tracker settings, ratio/time limits, tracker injection
- Hit and Run Protection – Automatic HnR obligation tracking with configurable thresholds, partial download handling, and dead tracker bypass
- Disk Space Management – Auto-pause when low on space, configurable thresholds
- Modern WebUI – Live process monitoring, log viewer, Arr insights
- Config & schema compatible – Same
config.tomlformat as qBitrr; SQLite schema matches (same tables). Database file istorrentarr.dbin the config directory, notqbitrr.db. - Process Isolation – WebUI stays online even if a worker crashes
-
Configure qBittorrent in
~/config/config.toml:[qBit] Host = "localhost" Port = 8080 UserName = "admin" Password = "adminpass"
-
Add Arr instances:
[Radarr-Movies] URI = "http://localhost:7878" APIKey = "your-radarr-api-key" Category = "radarr-movies"
-
Set completed folder:
[Settings] CompletedDownloadFolder = "/path/to/completed"
Manage torrents across multiple qBittorrent instances:
[qBit] # Default instance (required)
Host = "localhost"
Port = 8080
UserName = "admin"
Password = "password"
[qBit-seedbox] # Additional instance (optional)
Host = "192.168.1.100"
Port = 8080
UserName = "admin"
Password = "seedboxpass"See config.example.toml for all available options.
Torrentarr.Host (orchestrator)
├── Hosts Torrentarr.WebUI (always online, port 6969)
├── Manages free space globally (across ALL qBit instances)
├── Handles special categories (failed, recheck)
└── Spawns per-Arr Worker processes
├── Radarr Worker (Torrentarr.Workers)
├── Sonarr Worker (Torrentarr.Workers)
└── Lidarr Worker (Torrentarr.Workers)
- Torrentarr Documentation: https://feramance.github.io/Torrentarr/
- Example Config: config.example.toml
- Original qBitrr: Feramance/qBitrr — qBitrr Documentation
# .NET backend
dotnet build
dotnet test --filter "Category!=Live"
# React frontend
cd webui
npm install
npm run dev # Dev server at localhost:5173
npm run build # Production bundle| Feature | qBitrr (Python) | Torrentarr (C#) |
|---|---|---|
| Config Format | TOML | TOML (same file) |
| Database | SQLite (Peewee) | SQLite (EF Core) |
| Web Framework | Flask | ASP.NET Core |
| Performance | Good | Excellent |
| Memory Usage | ~100MB | ~80MB |
| Startup Time | ~2s | ~0.5s |
| Process Isolation | Single process | Multi-process |
| Health Checks | Custom | Built-in |
| Feature Parity | 100% | 99% |
- Report Bugs: GitHub Issues
- Discussions: GitHub Discussions
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
Released under the MIT License.
- Original qBitrr by Drapersniper & Feramance