Self-hosted download manager for file hosters, with web UI, plugins and auto-extract
1.2K
A headless JDownloader and pyLoad alternative for Docker, your home server or NAS.
Paste links or send them with Click'n'Load. Your server downloads, extracts and sorts them,
your browser shows it live. One Rust binary, a web UI and hoster plugins in TypeScript.
Features • Hosters • Plugins by an agent • Quick start • Documentation • Contributing
JDownloader has the best hoster support there is, but it is a Java desktop app; on a server it runs behind VNC or a cloud remote. pyLoad is made for servers, but many of its hoster plugins have fallen behind. Haul is one small container built for a home server:
7z and unrar, SQLite, nothing else to run./config/plugins with
one click, and a debug mode that saves exactly the pages a hoster sent.It runs wherever Docker or Podman runs: a Linux server, a NAS like Synology or Unraid, or an arm64 board like the Raspberry Pi.
| Hoster | Free | Account | Folders |
|---|---|---|---|
| 1fichier | ✅ | API key | ✅ |
| Datanodes | ✅ | ✅ | |
| ddownload | ✅ premium | ||
| FileQ | ✅ | ✅ | |
| Filekeeper | ✅ | ✅ | |
| Gofile | ✅ | API token | ✅ |
| Google Drive (incl. Docs export) | ✅ | browser cookies | ✅ |
| MEGA | ✅ | ✅ | ✅ |
| Mediafire | ✅ | ✅ | ✅ |
| Send (send.now, send.cm, tusfiles, userscloud) | ✅ | ✅ premium, API key | ✅ |
Plus every direct HTTP(S) link. Details per hoster: Hosters in the documentation.
Start Claude Code in a checkout of Haul and say which hoster you
need. The skill in .claude/skills/hoster-plugin tells
the agent how plugins are made here:
> Write a plugin for example-hoster.com: free downloads and premium accounts, with folder links.
haul probe: check, resolve, download, compare
name, size and checksum, and fixes it until the download works.You give it a test file and an account where one is needed, and solve the captchas. Drop the
built plugin into /config/plugins, or open a pull request so everyone gets it. How it works,
what it needs and what it may do: Plugins with Claude Code.
mkdir haul && cd haul
curl -O https://raw.githubusercontent.com/firsttris/haul/main/docker/docker-compose.yml
# set APP_SECRET (openssl rand -hex 32) and your download folders, then
docker compose up -d
Open http://localhost:8080, create your login and add your hoster accounts under Accounts & plugins.
docker run -d --name haul --restart unless-stopped \
-p 8080:8080 -p 127.0.0.1:9666:9666 \
-v ./config:/config \
-v ./downloads/tmp:/downloads/tmp \
-v ./downloads/done:/downloads/done \
-e APP_SECRET="$(openssl rand -hex 32)" \
tristanteu/haul:latest
mkdir -p ~/.config/containers/systemd ~/haul/config ~/haul/downloads/{tmp,done}
curl -o ~/.config/containers/systemd/haul.container https://raw.githubusercontent.com/firsttris/haul/main/docker/haul.container
curl -o ~/.config/containers/systemd/haul.network https://raw.githubusercontent.com/firsttris/haul/main/docker/haul.network
# set APP_SECRET in haul.container, then
systemctl --user daemon-reload && systemctl --user start haul
| Volume | Content |
|---|---|
/config | database and your own plugins |
/downloads/tmp | downloads in progress |
/downloads/done | finished downloads, one folder per package |
Everything else, from environment variables to a reverse proxy setup, is in the installation guide.
The full documentation, with search, is at firsttris.github.io/haul.
| Installation | Compose, Quadlet, volumes, environment variables, updates, reverse proxy |
| Hosters | accounts, passwords, checksums, waits and limits |
| Captchas | the userscript for reCaptcha, hCaptcha and Turnstile |
| Extraction | archives, passwords, incomplete sets, the Done view |
| Browser extension | Click'n'Load and Send to Haul in Chrome and Firefox |
| Click'n'Load | how links from link sites reach the server, haul-cnl |
| Architecture | how the server, queue, plugins and downloads fit together |
| Plugins | writing and debugging hoster plugins |
| Plugins with Claude Code | letting an AI agent write, test and repair a hoster plugin |
| Development | building, checks, architecture, API, releases |
Requires Rust (stable), Node.js 22 and pnpm.
git clone https://github.com/firsttris/haul
cd haul
pnpm install
pnpm dev # server on :8080, UI with hot reload on :5173, login admin / adminadmin
Stack: Rust with tokio, axum, reqwest and SQLite · hoster plugins in TypeScript, run in QuickJS inside the server · React, TanStack Router, Query and Table, embedded in the binary. More in Architecture and the development guide.
A hoster changed its pages or one is missing? Issues and pull requests are welcome, plugins most of
all: see writing plugins, or let Claude Code write
one with the skill in the repository (Plugins with Claude Code).
Please run cargo test, cargo clippy, pnpm test and pnpm typecheck before opening a pull
request.
⭐ Like Haul? A star on GitHub helps others find it.
🐛 Report a bug · 💡 Request a feature
License: AGPL-3.0 · © Tristan Teufel and contributors
The hoster plugins are based in part on JDownloader's GPL code and stay under GPL-3.0-or-later.
Changed versions you pass on or run for others must offer their source code under the AGPL; a commercial license without these obligations is available via teufel-it.de.
Haul is not affiliated with any file hoster, JDownloader or pyLoad. Use it only for files you
are allowed to download, and within the terms of the hosters you use.
Content type
Image
Digest
sha256:90e567741…
Size
40 MB
Last updated
about 15 hours ago
docker pull tristanteu/haul