JDownloader is the headless download manager that handles one-click hosters, decrypts link containers, and manages your download queue — all controlled remotely through the MyJDownloader web interface from any device.
What it is
| Platform | TrueNAS Scale (Docker custom app) |
| Ports | 5800 (web UI via noVNC), 3129 (API) |
| Image | jlesage/jdownloader-2:latest |
| Config path | /mnt/apps/jdownloader/config → /config |
| Downloads path | /mnt/downloads → /downloads |
| License | GPL-3.0 |
JDownloader 2 is a Java-based download manager that automates downloads from one-click hosters (Mega, Rapidgator, Katfile, etc.), decrypts container files (DLF, RSDF, CCF), and manages download queues with automatic retry, captcha solving, and bandwidth scheduling.
Running it on TrueNAS Scale means you get a persistent download server that is always online — no need to keep a laptop running overnight for large downloads. You control it from your phone, tablet, or any browser via the MyJDownloader web interface.
The hard part: headless operation and MyJDownloader
The install is five minutes. The hard part is understanding that JDownloader runs headless — there is no desktop GUI inside the container. You control it entirely through MyJDownloader, which requires a free account.
- Control chain
- MyJDownloader is NOT optional
The mistake everyone made: trying to use the noVNC interface as the primary control method. It works but is slow, laggy, and does not support all features. MyJDownloader is the intended way to interact with JDownloader in headless mode.
- Control methods
- → https
- //my.jdownloader.org
- → http
- //<nas-ip>:5800
How to install it
Step 1: Create a MyJDownloader account
- Go to my.jdownloader.org
- Create a free account (email + password)
- Remember these credentials — you need them for the Docker Compose
Step 2: Create directories
mkdir -p /mnt/apps/jdownloader/config
mkdir -p /mnt/downloads
Step 3: Deploy the Docker Compose
TrueNAS Scale → Apps → Discover Apps → Custom App (Docker Compose):
services:
jdownloader:
image: jlesage/jdownloader-2:latest
container_name: jdownloader
restart: unless-stopped
environment:
- TZ=Europe/London
- USER_ID=1000
- GROUP_ID=1000
- UMASK=0022
- MYJD_USER=your_email@example.com
- MYJD_PASSWORD=your_password
- MYJD_DEVICE_NAME=TrueNAS-JD
ports:
- "5800:5800"
- "3129:3129"
volumes:
- /mnt/apps/jdownloader/config:/config
- /mnt/downloads:/downloads
After deploy:
# Check JDownloader is running:
docker logs jdownloader 2>&1 | grep -i "jdownloader"
# Wait 2-3 minutes for initial setup:
# JDownloader downloads and installs itself on first run
# Check status at http://<nas-ip>:5800
Log in at http://<nas-ip>:5800 (noVNC) to verify the container started. Then go to https://my.jdownloader.org to control JDownloader remotely.
Step 4: Link to MyJDownloader
- Open
https://my.jdownloader.org - Sign in with the same email/password from your Docker Compose
- Your TrueNAS device should appear in the device list within 2-3 minutes
- Click the device to see JDownloader's dashboard
- Paste links, monitor downloads, configure settings
Configuration that matters
Download paths
| Path | Container mount | Purpose |
|---|---|---|
/mnt/downloads |
/downloads |
Where completed downloads land |
/mnt/apps/jdownloader/config |
/config |
JDownloader config, settings, plugins |
Extraction
| Setting | Recommended value | Why |
|---|---|---|
| Auto-extract | On | Extracts RAR/ZIP archives after download |
| Delete archives after extraction | On | Saves disk space |
| Password list | Add common passwords | Some archives are password-protected |
Speed and scheduling
| Setting | Recommended value | Why |
|---|---|---|
| Max downloads | 3–5 | Avoids account bans on one-click hosters |
| Speed limit | Set per your bandwidth | Prevents saturation of your connection |
| Reconnect | Enable | Forces IP change when throttled |
| Schedule | Off-peak hours (e.g., 2am–6am) | Large downloads do not interfere with daily use |
Link decryption
JDownloader automatically decrypts container files:
| Container format | What it contains |
|---|---|
.dlf |
Link container (multiple URLs) |
.rsdf |
RSDF encrypted link list |
.ccf |
CCF encrypted link container |
.crypted |
Generic encrypted link file |
.csv / .txt |
Plain text link lists (one URL per line) |
Just paste the link to the container file into MyJDownloader — JDownloader handles the rest.
One-click hoster support
| Hoster | Supported | Notes |
|---|---|---|
| Mega.nz | Yes | Requires premium account for full speed |
| Rapidgator | Yes | Free tier limited |
| Katfile | Yes | Free tier limited |
| DDownload | Yes | Premium recommended |
| Uploaded.net | Yes | Premium recommended |
| Mediafire | Yes | Free tier works |
What I'd tell anyone building this
-
MyJDownloader is mandatory, not optional. Without it, you have no way to add links or control JDownloader in headless mode. Create the account before deploying the container.
-
The first startup takes 3-5 minutes. JDownloader downloads and installs itself inside the container on first run. Do not restart the container during this time — it will restart the download process.
-
Premium accounts are worth it. Free tiers on one-click hosters are throttled to 50-100 KB/s. A premium account gives you full speed and no captcha. JDownloader's captcha solver helps, but it does not solve everything.
-
Use
/mnt/downloadsas the download path. This is the same path used by qBittorrent and the *arr stack. All download clients write to the same directory, and Jellyseerr/Radarr/Sonarr can access files from there. -
The noVNC interface on port 5800 is a fallback. It works but is slow and does not support all MyJDownloader features. Use it only for initial setup or debugging.
-
JDownloader auto-extracts archives. Enable this in Settings → Extractor. It saves you from manually extracting RAR/ZIP files after every download.
Get it
Links:
Quick install (Docker Compose):
services:
jdownloader:
image: jlesage/jdownloader-2:latest
container_name: jdownloader
restart: unless-stopped
environment:
- TZ=Europe/London
- USER_ID=1000
- GROUP_ID=1000
- UMASK=0022
- MYJD_USER=your_email@example.com
- MYJD_PASSWORD=your_password
- MYJD_DEVICE_NAME=TrueNAS-JD
ports:
- "5800:5800"
- "3129:3129"
volumes:
- /mnt/apps/jdownloader/config:/config
- /mnt/downloads:/downloads
After deploy:
# Wait 3-5 minutes for initial setup, then check:
docker logs jdownloader 2>&1 | tail -10
# noVNC interface (fallback):
# http://<nas-ip>:5800
# Primary control:
# https://my.jdownloader.org (sign in with your MYJD_USER credentials)
Sign in at https://my.jdownloader.org, paste links, and JDownloader handles the rest.