torrentng-webui

torrentng-webui

Docker app from torrentngd's Repository

Overview

TorrentNG WebUI is a modern replacement web interface and API for an rTorrent, qBittorrent, Transmission, or Deluge install you already run -- on this box or elsewhere on your network. It does not run its own torrent engine; your existing client keeps owning transfer/session state. TorrentNG polls it, caches state for a fast virtualized 10k-100k-row table, pushes live updates over WebSocket, and exposes a qBittorrent-compatible API so Prowlarr/Sonarr/Radarr/autobrr/cross-seed keep working unchanged.

If you don't already run one of those four clients and just want one box that does everything, use the "TorrentNG" (native) template instead -- it runs TorrentNG's own first-party client with no external dependency.

SETUP: pick "Backend Type" below and fill in only that backend's section (all four are listed since Unraid templates can't hide fields conditionally -- the others are ignored):

  • qBittorrent / Transmission / Deluge: point the matching URL variable at your existing container's WebUI/RPC address (e.g. http://192.168.1.10:8080 for qBittorrent). These already speak HTTP over the network, so this is normally a two-field job: URL + credentials.
  • rTorrent: leave "Managed" at 0 (the default) to connect to an rTorrent you already run, and set "SCGI TCP Address" to host:port. This requires your existing rTorrent to have SCGI bound to a TCP address rather than a private Unix socket inside its own container -- check that client's own config/template. If your setup only exposes a Unix socket, mount the host directory holding that socket file into this container yourself (extra Path in this template's Unraid config) and point "SCGI Socket Path" at it instead. Set "Managed" to 1 only if you want this container to launch and own its own brand-new rTorrent (rarely what you want alongside an existing install).

IMPORTANT -- rTorrent identity: on every start, TorrentNG pushes its own User-Agent and peer_id to whatever rTorrent it's connected to (this is how the compatible API keeps *arr tools working). Pointing this at an rTorrent that already has an established tracker history under a different identity will silently rewrite that identity going forward. This is expected and safe for a install TorrentNG will manage long-term, but understand it before connecting to a client you don't want touched. See docs/TRACKER-IDENTITY.md in the TorrentNG repository. Never set the same Peer ID Override across more than one install -- a shared peer_id has gotten real users banned from private trackers for "running multiple clients."

Secret Key and API Tokens are required before first start regardless of backend -- they protect the WebUI and API themselves, not your torrent client. Generate both with e.g. openssl rand -hex 32.

The image supports runtime PUID/PGID handling. This template defaults to Unraid's standard nobody:users identity, 99:100; the entrypoint prepares its small internal runtime directories and then drops to that non-root identity. Do not add an ExtraParams --user override: the entrypoint needs its short setup phase. Make sure the Downloads/Data and Appdata/State folders are owned by the selected PUID:PGID before first start. For the default paths shown below, use Unraid's Tools -> New Permissions on /mnt/user/downloads and /mnt/user/appdata/torrentng-webui, or run from the Unraid terminal: chown -R 99:100 /mnt/user/downloads /mnt/user/appdata/torrentng-webui. The container never recursively chowns mounted download trees at startup.

Unraid deployment

Unraid Community Applications (CA) templates for TorrentNG. See deploy/README.md for the underlying Docker images and docs/DEPLOYMENT.md / docs/NATIVE_DEPLOYMENT.md for the non-Unraid deployment paths these templates wrap.

The Community Apps submission files live at the repository root and in /templates/; deploy/unraid/ contains this documentation only. Use the root template URLs below so the Community Apps scan sees exactly the two maintained templates.

Path What it is
../../templates/torrentng-webui.xml WebUI/API replacement for an rTorrent, qBittorrent, Transmission, or Deluge install you already run. Image: ghcr.io/snapetech/torrentng/sidecar.
../../templates/torrentng.xml Full first-party stack: torrentngd with its built-in WebUI/API, no external client. Image: ghcr.io/snapetech/torrentng/native.
../../ca_profile.xml Repository profile shown by Community Applications (author/support info), at the repository root.
../../icon.svg, ../../icon.png App icon referenced by both templates and ca_profile.xml. icon.png is the rasterized 256x256 version; from the repository root, regenerate it with rsvg-convert -w 256 -h 256 icon.svg -o icon.png.

Which template

  • Already running rTorrent, qBittorrent, Transmission, or Deluge (on this box or elsewhere on the network) and just want a modern replacement WebUI and a qBittorrent-compatible API for Prowlarr/Sonarr/Radarr/autobrr/ cross-seed? Use torrentng-webui.
  • Want one box that does everything with no external client dependency? Use torrentng (runs torrentngd, TorrentNG's own first-party engine).

Both are documented in depth in their own <Overview> text, which Unraid shows on the Add Container page.

Try it without submitting anywhere (works today)

Unraid can install directly from a raw template XML URL, no CA submission or review required:

  1. Docker tab -> Add Container.
  2. In the Template field at the top, paste the raw GitHub URL of the template you want, e.g. https://raw.githubusercontent.com/snapetech/TorrentNG/main/templates/torrentng-webui.xml.
  3. The form populates from the template. Fill in the required fields (Secret Key, API Tokens, and the backend URL/credentials for torrentng-webui; the API Token and Config path for torrentng) and Apply.

This is enough for personal use or sharing a direct link with other TorrentNG users before/without a formal CA listing.

Getting listed in Community Applications

Full discoverability goes through https://ca.unraid.net/submit. The Community Apps portal scans a repository as a unit: ca_profile.xml is at the repository root, and each Docker app has one XML under templates/. TorrentNG now uses that layout directly in this repository, so a scan finds both app templates as entries under one publisher profile.

If the native template is already submitted from this repository, the WebUI template is included in the same repository scan; it does not need a second submission. To publish the WebUI as a separate repository/listing, create a dedicated public repository containing its own root ca_profile.xml, icon.png, and only templates/torrentng-webui.xml, then change its profile text to describe the WebUI app alone. Update the raw GitHub URLs in the profile and template, especially <Icon> and <TemplateURL>, to point at the new repository.

Before submitting or rescanning:

  • Push icon.png, ca_profile.xml, and the templates so the raw URLs referenced in the XML resolve.
  • Run Validate then Scan at https://ca.unraid.net/submit and fix anything it flags. Confirm both app names appear in the preview.
  • Confirm the repository has an OSI-approved license covering the submitted templates and metadata. TorrentNG's root LICENSE applies to this repository.

Design notes for future edits

  • Multi-backend template, no conditional fields. Unraid templates can't show/hide <Config> entries based on another field's value, so torrentng-webui.xml lists every backend's variables with Display="advanced" and per-field descriptions saying which "Backend Type" selection they apply to, following the same pattern used by multi-provider templates like binhex's VPN-enabled containers.
  • Both images accept runtime PUID/PGID. The Unraid templates default to the standard nobody:users identity, 99:100; generic Docker/Compose deployments default to 1000:1000. The entrypoint starts with the minimal setup privileges needed to assign the small internal runtime directory roots, then launches Tini and the TorrentNG process as the selected non-root identity. It never recursively chowns a mounted download tree.
  • Do not set --user in <ExtraParams>. The entrypoint needs its short setup phase. A direct Docker --user override bypasses that phase and will fail when the selected identity cannot write /run/rtorrent, /var/log/rtorrent, /run/secrets, or the state directory. Set PUID and PGID instead. The mounted Data/Downloads and Config/State paths must already be accessible to that identity; for the default template paths use Unraid's Tools -> New Permissions, or: chown -R 99:100 /mnt/user/downloads/torrentng /mnt/user/appdata/torrentng for the native template, and chown -R 99:100 /mnt/user/downloads /mnt/user/appdata/torrentng-webui for the WebUI template. If the WebUI Data path is shared with another torrent client, preserve that client's access too.
  • torrentngd has no per-field env var overrides by design (see crates/rt-config), unlike the compatible-client service. Its Unraid template (torrentng.xml) and deploy/native/entrypoint.sh bridge this with exactly two additions: default TORRENTNGD_CONFIG to a /config directory mount (falling back to the packaged default config if nothing is mounted there), and an optional TORRENTNGD_API_TOKEN env var that gets written to the path the packaged config already expects for auth.api_tokens_file. This does not change torrentngd's documented file-based configuration convention -- power users can still mount a fully custom config.toml and set TORRENTNGD_CONFIG themselves exactly as deploy/native/compose.yml does.
  • Fronting an existing rTorrent needs TNG_RTORRENT_MANAGED=0. Before this template existed, the compatible-client service's entrypoint.sh always launched and owned its own rTorrent process whenever TNG_BACKEND=rtorrent -- there was no way to point it at an rTorrent instance the operator already runs, unlike qBittorrent/ Transmission/Deluge, which were always network-address-based. See the TNG_RTORRENT_MANAGED handling added to deploy/docker/entrypoint.sh (default 1, matching every existing compose profile's behavior unchanged; the Unraid template sets it to 0).
  • Tracker identity. The compatible-client service pushes its User-Agent/peer_id to whatever rTorrent it connects to on every start (docs/TRACKER-IDENTITY.md). Both templates carry that warning verbatim in their <Overview>/field descriptions -- don't trim it out when editing; a shared/hardcoded peer_id previously got a real user banned from a private tracker.
  • The rTorrent backend hard-fails on startup if it can't reach/identify rTorrent; the other three don't. Verified by actually running the container against an unreachable SCGI address: after 3 retries over ~15 seconds it logs "refusing to serve until rTorrent tracker identity is applied" and the process exits -- Docker/Unraid's restart policy then crash-loops it. qBittorrent/Transmission/Deluge instead come up immediately and just report "status":"degraded" on /health while retrying the backend in the background. This is existing, intentional behavior in the compatible-client service (the identity push is a safety gate, not a bug), but it means the rTorrent SCGI address has to be correct before first start, unlike the other three backends where you can fix it after. Documented on the "SCGI TCP Address" field.
  • Published-image cadence. These runtime and template behaviors were verified against locally built images from current source, not asserted from reading the Dockerfiles. The templates use :latest, but the release workflow publishes that tag only from a main-* release tag; a commit on main alone does not update GHCR. After changing deployment behavior, push a release tag, wait for the image workflow to complete, and verify the native and sidecar package pages before installing from the raw template URLs.

Install torrentng-webui on Unraid in a few clicks.

Find torrentng-webui in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for torrentng-webui Review the template variables and paths Click Install

Requirements

An existing rTorrent, qBittorrent, Transmission, or Deluge install reachable on your network. Set Secret Key and API Tokens before first start.

Categories

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/snapetech/torrentng/sidecar:latest
Last Updated2026-09-25
First Seen2026-09-25

Runtime arguments

Web UI
http://[IP]:[PORT:8080]
Network
bridge
Shell
sh
Privileged
false

Template configuration

WebUI/API PortPorttcp

TorrentNG WebUI, REST/SSE/WebSocket API, and qBittorrent-compatible API (used by Prowlarr/Sonarr/Radarr/autobrr/cross-seed).

Target
8080
Default
8080
Process UID (PUID)Variable

Non-root Linux UID for the WebUI/API service. Defaults to Unraid's nobody UID 99. The entrypoint uses this value after its short setup phase; do not also set ExtraParams --user.

Target
PUID
Default
99
Process GID (PGID)Variable

Non-root Linux GID for the WebUI/API service. Defaults to Unraid's users GID 100. Make the mounted Downloads/Data and Appdata paths accessible to this group.

Target
PGID
Default
100
Backend TypeVariable

Which existing torrent client this WebUI talks to. Fill in only the matching section below.

Target
TNG_BACKEND
Default
rtorrent|qbittorrent|transmission|deluge
Secret KeyVariable

Random secret used to sign the WebUI's session cookies. Required. Generate with: openssl rand -hex 32

Target
TNG_SECRET_KEY
API TokensVariable

Comma-separated bearer token(s) for the REST/qBittorrent-compatible API (used by Prowlarr/Sonarr/Radarr/autobrr/cross-seed). Required. Generate with: openssl rand -hex 32

Target
TNG_API_TOKENS
Downloads/DataPathrw

Mount the SAME host folder your existing torrent client stores files in. TorrentNG reads this for file browsing and free-space reporting; it does not need to match exactly if your client only reports state remotely, but file-management API calls need it.

Target
/data
Default
/mnt/user/downloads
Appdata/StatePathrw

TorrentNG's own cache database and the generated per-install peer_id suffix (see docs/TRACKER-IDENTITY.md) live here. Back this up if you want the same identity to persist across container recreates.

Target
/var/lib/torrentng
Default
/mnt/user/appdata/torrentng-webui/state
Config (optional)Pathro

Optional config.toml/rtorrent.rc overrides. Leave the folder empty to run entirely from the Variables below and the packaged defaults.

Target
/config
Default
/mnt/user/appdata/torrentng-webui/config
rTorrent: Managed (bundled)Variable

0 (default): connect to an rTorrent you already run, using SCGI TCP Address or SCGI Socket Path below. 1: this container also launches and owns its own new rTorrent process (rarely wanted when fronting an existing install).

Target
TNG_RTORRENT_MANAGED
Default
0
rTorrent: SCGI TCP AddressVariable

host:port of your existing rTorrent's SCGI listener, e.g. 192.168.1.10:5000. Requires that rTorrent to have network.scgi.open_port bound to a TCP address rather than a local Unix socket. Unlike the qBittorrent/Transmission/Deluge backends, get this right before starting: if the rTorrent backend can't reach and authenticate to rTorrent within about 15 seconds of container start, the container exits (Docker/Unraid will keep restarting and failing) instead of coming up in a degraded state.

Target
TNG_SCGI_ADDR
rTorrent: SCGI Socket PathVariable

Alternative to SCGI TCP Address: container-side path to a Unix socket, for when you've mounted the host folder holding your existing rTorrent's socket file into this container yourself (add an extra Path in this template's Unraid settings).

Target
TNG_SCGI_SOCKET
rTorrent: Bundled Peer Port TCPPorttcp

Only used when rTorrent: Managed is set to 1. Ignored when connecting to an existing rTorrent.

Target
50000
Default
50000
rTorrent: Bundled Peer Port UDPPortudp

Only used when rTorrent: Managed is set to 1. Ignored when connecting to an existing rTorrent.

Target
50000
Default
50000
rTorrent: User-AgentVariable

Tracker-facing identity pushed to rTorrent on every start. Leave at the default unless you have a specific reason to change it -- see docs/TRACKER-IDENTITY.md.

Target
TNG_USER_AGENT
Default
rtorrent/0.16.11/0.16.11
rTorrent: Peer ID OverrideVariable

Leave empty (recommended): a unique 20-byte peer_id is generated and persisted per install automatically. Only set this to pin one specific, reproducible value -- e.g. a test fixture. NEVER copy the same value into more than one install/template: a shared peer_id has gotten real users banned from private trackers for 'running multiple clients'.

Target
TNG_PEER_ID
qBittorrent: URLVariable

WebUI URL of your existing qBittorrent, e.g. http://192.168.1.10:8080

Target
TNG_QBITTORRENT_URL
qBittorrent: UsernameVariable

qBittorrent WebUI username.

Target
TNG_QBITTORRENT_USERNAME
qBittorrent: PasswordVariable

qBittorrent WebUI password.

Target
TNG_QBITTORRENT_PASSWORD
qBittorrent: No AuthVariable

Set to 1 only if that qBittorrent's WebUI authentication is disabled for trusted-network access (its own 'Bypass authentication for clients on localhost/whitelisted subnet' setting).

Target
TNG_QBITTORRENT_NO_AUTH
Default
0
Transmission: URLVariable

RPC URL of your existing Transmission, e.g. http://192.168.1.10:9091/transmission/rpc

Target
TNG_TRANSMISSION_URL
Transmission: UsernameVariable

Transmission RPC username.

Target
TNG_TRANSMISSION_USERNAME
Transmission: PasswordVariable

Transmission RPC password.

Target
TNG_TRANSMISSION_PASSWORD
Deluge: URLVariable

JSON-RPC URL of your existing Deluge (deluge-web), e.g. http://192.168.1.10:8112/json

Target
TNG_DELUGE_URL
Deluge: PasswordVariable

Deluge Web UI password.

Target
TNG_DELUGE_PASSWORD