All apps · 0 apps
torrentng
Docker app from torrentng's Repository
Overview
TorrentNG is a modern torrent management stack for headless power-user seeding at 10k-100k+ torrents and 200-500+ TB. This template runs torrentngd, TorrentNG's own first-party Rust BitTorrent client daemon, with its built-in WebUI, REST/SSE API, and qBittorrent-compatible API (for Prowlarr/Sonarr/Radarr/autobrr/cross-seed) all in one container. torrentngd owns torrent state, peer traffic, tracker state, storage, rechecks, jobs, and metrics directly -- it does not run or depend on rTorrent.
Use this template if you want a single self-contained TorrentNG install with no external torrent client. If you already run rTorrent, qBittorrent, Transmission, or Deluge and just want TorrentNG's WebUI/API in front of it instead, use the "TorrentNG WebUI" template.
FIRST RUN: torrentngd reads its settings from a config.toml file, not environment variables (this is intentional -- see the project's deployment docs). Before starting the container for the first time:
- Create the appdata folder for Config below (e.g. /mnt/user/appdata/torrentng/config).
- Either leave it empty to run with the packaged defaults (0.0.0.0:8080 WebUI, port 44444 for peer traffic, DHT on), or copy in a customized config.toml -- see deploy/native/config.toml in the TorrentNG repository for every field.
- Set the "API Token" variable below to a random string; the container writes it to the path the packaged config already expects for authenticating the WebUI/API. Generate one with e.g.
openssl rand -hex 32on any Linux box, or the Unraid terminal.
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 Data, Config, and State/DB appdata folders are owned by the selected PUID:PGID before first start. For the default paths shown below, use Unraid's Tools -> New Permissions on both /mnt/user/downloads/torrentng and /mnt/user/appdata/torrentng, or run from the Unraid terminal: chown -R 99:100 /mnt/user/downloads/torrentng /mnt/user/appdata/torrentng. The container never recursively chowns mounted download trees at startup.
Readme
View on GitHubUnraid 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:
- Docker tab -> Add Container.
- 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. - 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 fortorrentng) 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
LICENSEapplies 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, sotorrentng-webui.xmllists every backend's variables withDisplay="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 standardnobody:usersidentity,99:100; generic Docker/Compose deployments default to1000: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
--userin<ExtraParams>. The entrypoint needs its short setup phase. A direct Docker--useroverride bypasses that phase and will fail when the selected identity cannot write/run/rtorrent,/var/log/rtorrent,/run/secrets, or the state directory. SetPUIDandPGIDinstead. 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/torrentngfor the native template, andchown -R 99:100 /mnt/user/downloads /mnt/user/appdata/torrentng-webuifor the WebUI template. If the WebUI Data path is shared with another torrent client, preserve that client's access too. torrentngdhas no per-field env var overrides by design (seecrates/rt-config), unlike the compatible-client service. Its Unraid template (torrentng.xml) anddeploy/native/entrypoint.shbridge this with exactly two additions: defaultTORRENTNGD_CONFIGto a/configdirectory mount (falling back to the packaged default config if nothing is mounted there), and an optionalTORRENTNGD_API_TOKENenv var that gets written to the path the packaged config already expects forauth.api_tokens_file. This does not changetorrentngd's documented file-based configuration convention -- power users can still mount a fully customconfig.tomland setTORRENTNGD_CONFIGthemselves exactly asdeploy/native/compose.ymldoes.- Fronting an existing rTorrent needs
TNG_RTORRENT_MANAGED=0. Before this template existed, the compatible-client service'sentrypoint.shalways launched and owned its own rTorrent process wheneverTNG_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 theTNG_RTORRENT_MANAGEDhandling added todeploy/docker/entrypoint.sh(default1, matching every existing compose profile's behavior unchanged; the Unraid template sets it to0). - 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/healthwhile 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 amain-*release tag; a commit onmainalone 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 on Unraid in a few clicks.
Find Torrentng 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.
Requirements
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/snapetech/torrentng/native:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8080]- Network
bridge- Shell
sh- Privileged
- false
Template configuration
TorrentNG WebUI, REST/SSE API, and qBittorrent-compatible API (used by Prowlarr/Sonarr/Radarr/autobrr/cross-seed).
- Target
- 8080
- Default
- 8080
Incoming BitTorrent peer connections. Forward this port on your router for best connectivity.
- Target
- 44444
- Default
- 44444
Incoming BitTorrent peer connections (uTP/DHT). Forward this port on your router for best connectivity.
- Target
- 44444
- Default
- 44444
Non-root Linux UID for torrentngd. 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
Non-root Linux GID for torrentngd. Defaults to Unraid's users GID 100. Make the mounted Data, Config, and State paths accessible to this group.
- Target
- PGID
- Default
- 100
Downloaded/seeding file storage. torrentngd's userspace disk scheduler manages this directly.
- Target
- /data
- Default
- /mnt/user/downloads/torrentng
Optional config.toml goes here. Leave empty to run with the packaged defaults. See Overview / Requires before first start.
- Target
- /config
- Default
- /mnt/user/appdata/torrentng/config
Session state, SQLite database (state.db), and durability journals. Back this up like you would a database -- torrent history and resume state live here.
- Target
- /var/lib/torrentngd
- Default
- /mnt/user/appdata/torrentng/state
Bearer token for the WebUI and REST/qBittorrent-compatible API. Required on first start unless your mounted config.toml already sets auth.api_tokens/api_tokens_file itself. Generate with: openssl rand -hex 32
- Target
- TORRENTNGD_API_TOKEN
Rust tracing filter, e.g. info, debug, or torrentngd=debug,warn.
- Target
- RUST_LOG
- Default
- info