Hit & Run protection, free space control, quality upgrades, and import triggering. C# port of qBitrr
10K+
*Automated qBittorrent management for the Arr stack — Hit & Run protection, free space control, quality upgrades, and import triggering. C# port of qBitrr with the same config and schema.
A high-performance C# port of qBitrr — intelligent automation for qBittorrent and the *Arr ecosystem (Radarr, Sonarr, Lidarr, Readarr). Same
config.tomlformat and SQLite schema as qBitrr; database file istorrentarr.db(notqbitrr.db). Releases use a major version one higher than qBitrr’s (e.g. qBitrr 5.x → Torrentarr 6.x) so the two products stay clearly distinct.
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:latest
Docker 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:rw
git 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.csproj
Access the WebUI at http://<host>:6969/ui after startup.
config.toml format as qBitrr; SQLite schema matches (same tables). Database file is torrentarr.db in the config directory, not qbitrr.db.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)
# .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 |
| Upstream alignment | qBitrr master | C# port tracked in the parity matrix and path report (not a fixed %) |
Contributions welcome! Please:
Released under the MIT License.
Content type
Image
Digest
sha256:ce50336d6…
Size
127.3 MB
Last updated
8 days ago
docker pull feramance/torrentarr