[Habeas]

A self-hosted torrent client built from scratch on libtorrent.

scroll

18 Themes

Dark and light. Live preview before applying. Accessible from the command palette.

click a swatch
light
torrents search Ledger
Severance.S02E03.Who.Is.Alive.2160p.ATVP.WEB-DL.DV.HDR.mkv
dl 14.2 MB/s ul 1.8 MB/s
downloading 24 peers ratio 0.42
40%
The.Brutalist.2024.2160p.WEB-DL.DDP5.1.DV.HDR.mkv
ul 420 KB/s
seeding 3 peers ratio 2.14
100%
Severance.S01.Complete.2160p.ATVP.WEB-DL.DV.HDR
paused ratio 1.47
100%

name-first rows with progress and speeds inline

Workspace

Every panel runs inside a tiling window manager. Drag handles to resize, pop out panels, snap them back. Layouts persist across sessions.

filter...
all downloading seeding paused
3
Severance.S02E03.Who.Is.Alive.2160p.ATVP.WEB-DL.DV.HDR.mkv
dl 14.2 MB/sul 1.8 MB/s
downloading24 peersratio 0.42
67%
The.Brutalist.2024.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR.mkv
ul 420 KB/s
seeding3 peersratio 2.14
100%
Severance.S01.Complete.2160p.ATVP.WEB-DL.DV.HDR
pausedratio 1.47
100%
search
severance s02e03
name size s/l
Severance.S02E03.2160p.ATVP.WEB-DL.DV.HDR.mkv 14.2 GB 847/62
Severance.S02E03.1080p.AMZN.WEB-DL.DDP5.1.mkv 5.1 GB 423/31
Severance.S02E03.720p.WEB-DL.AAC2.0.H.264 2.3 GB 156/12
Severance.S02E03.480p.WEB-DL.x264 890 MB 41/8
file manager
/media/storage/TV Shows/Severance (2022)
shortcuts
downloads
tv shows
movies
name size modified
Season 1 Jan 12
S02E01.Good.News.About.Hell.mkv 4.91 GB Mar 14
S02E02.Hello.Ms.Casey.mkv 4.71 GB Mar 21
S02E03.Who.Is.Alive.mkv 4.82 GB 2h ago
vpn ·
↓ 14.2 MB/s ↑ 1.8 MB/s

drag handles to resize · pop out panels · reopen from status bar

tilebinary tree splits with drag handles
floatdrag, resize, snap to edges and corners
persistlayout saves to server, restores on reload
keyboardvim bindings, ctrl+alt arrows to move panels

Under the hood

window manager Tile, float, snap, resize. Layouts persist across sessions. Vim and arrow-key navigation.
layouts Flow, telemetry, digest, classic. Each presents torrent rows differently for the task at hand.
deployment Three modes: Gluetun sidecar, host VPN interface binding, or direct bridge. All docker-compose.
live updates Single WebSocket path pushes torrent state, progress, rates, and peer counts. Nothing polls.
qbittorrent api Implements enough of the qBittorrent WebUI API that Sonarr, Radarr, and other *arr tools just work.
passkeys WebAuthn login with recovery codes, CSRF tokens, and origin validation. No password database.
sift Matches torrents against TMDB, groups by title, builds destination folders before anything downloads.
file browser Browse mounted storage, inspect directories, rename, move, create folders. Runs inside the WM.
diagnostics Structured activity log, network diagnostics, per-process CPU/memory, copyable status reports.
pwa Installable as a web app. Push notifications, theme persistence, layout state across contexts.
network hardening SSRF validation, tracker normalization, HTTPS certificate handling, VPN kill-switch awareness.
torrent management Force-start, auto-managed queuing, stalled detection, share ratio limits, seeding time limits.

Get running

Two containers, one image, three network modes. Pick gluetun, host VPN, or direct bridge.

1
git clone https://github.com/palaV/Habeas && cd Habeas
2
cp .env.example .env && $EDITOR .env set VPN mode, storage path, ports
3
docker compose up -d engine on :54323, web on :54322