Native pull-mirror of github.com/Kheopsian/Hydra (auto-sync every 8h). Read-only upstream tracker.
  • Rust 82.1%
  • JavaScript 11.5%
  • CSS 2.5%
  • HTML 1.8%
  • Python 1.2%
  • Other 0.8%
Find a file
2026-10-06 16:43:41 +02:00
.github feat(limits, network): share limits and queueing as in qBittorrent; managed WireGuard; DHT off behind SOCKS5 2026-10-05 16:25:41 +02:00
configs feat(network): the kill switch follows the network mode; unassigned engines are blocked, the daemon's requests follow the mode 2026-10-06 11:25:41 +02:00
docs fix(network): peers are told the live public port; a partial network-mode save keeps the rest 2026-10-06 16:00:02 +02:00
packaging docs: drop the 3.x agent/front design notes and the engine binary Windows no longer ships 2026-10-05 08:52:04 +02:00
proto Hydra — high-scale BitTorrent engine (initial public release) 2026-07-28 14:10:12 +02:00
scripts feat(dedup): recognise data we already hold, whatever it is called 2026-09-11 21:03:58 +02:00
third_party feat(limits, network): share limits and queueing as in qBittorrent; managed WireGuard; DHT off behind SOCKS5 2026-10-05 16:25:41 +02:00
tools feat(trackers): UDP trackers, BEP 15 with BEP 41 2026-09-30 20:33:45 +02:00
typhon-engine release: v4.3.2 -- managed WireGuard that holds, a kill switch that follows the mode 2026-10-06 16:43:41 +02:00
web fix(ui): the peer list scrolls inside its card; fitted headers are measured as drawn 2026-10-06 15:50:21 +02:00
.dockerignore build: cache the Rust dependency tree, locally and in CI 2026-09-03 13:50:24 +02:00
.gitignore fix(categories): stop offering the routing 4.x never applied 2026-09-30 17:06:42 +02:00
CHANGELOG.md release: v4.3.2 -- managed WireGuard that holds, a kill switch that follows the mode 2026-10-06 16:43:41 +02:00
docker-compose.yml feat(limits, network): share limits and queueing as in qBittorrent; managed WireGuard; DHT off behind SOCKS5 2026-10-05 16:25:41 +02:00
Dockerfile fix(docker): the image installs hydranos, not hydranosnos 2026-09-20 14:16:38 +02:00
entrypoint.sh feat(limits, network): share limits and queueing as in qBittorrent; managed WireGuard; DHT off behind SOCKS5 2026-10-05 16:25:41 +02:00
install.sh feat(network, nodes, shim, observability): the remaining 4.3 gaps -- ports, nodes, qBit routes, health, metrics, logs 2026-10-06 06:59:39 +02:00
LICENSE Hydra — high-scale BitTorrent engine (initial public release) 2026-07-28 14:10:12 +02:00
README.md docs: one comparison, at the scale Hydranos is built for 2026-10-02 18:51:32 +02:00
SECURITY.md feat: Hydranos, an honest tracker row, and a page you can shape 2026-09-10 21:08:43 +00:00

Hydranos

A self-hosted BitTorrent daemon built for scale and seeding: one Rust process ("Typhon") holding a very large catalogue and keeping every torrent of it announced. Hydranos runs over a million torrents in a single instance in production today. It exposes a live web UI, a native REST API, and a qBittorrent-compatible shim so your existing *arr / autobrr / cross-seed setup keeps working unchanged.

Status: opened up from a private homelab project. It is used in production but some rough edges remain; issues and PRs welcome.


Why Hydranos?

Most BitTorrent clients are designed around a few thousand torrents, and do that very well. At hundreds of thousands the constraints change: how long the client takes to start, and whether every torrent is still announced on schedule. A torrent the tracker has not heard about is a torrent nobody downloads from you. Hydranos is built around those two constraints, and around three uses of one instance:

  • Hoard. Seed a very large library and keep all of it announced: over a million torrents in production today.
  • Race. Grab and seed new releases fast. Hydranos runs a race engine and a hoard engine side by side in one process, each tuned for its job, so a large library never slows a race down.
  • Stay light. Holding 290,000 torrents takes 2.8 GiB of RAM (about 10 KiB per torrent), where the other clients we measured needed 12 to 31 GiB.

How Hydranos and three other clients behave at 290,000 torrents, measured on the same machine.

And your automation keeps working: the qBittorrent v2 API shim means Sonarr/Radarr, autobrr and cross-seed talk to Hydranos unchanged.

If you seed a few hundred torrents, qBittorrent or Transmission will serve you with less to learn.

Also in the box: SOCKS5 / PROXY-v2 relay / gluetun networking with hot listen-port rebind, engines spread over several machines behind one front, and adds that hash-check data already on disk instead of downloading over it.


For tracker operators

What Hydranos puts on the wire is documented, rule by rule, in docs/BITTORRENT-CONFORMANCE.md. Every claim there names the test that asserts it: the unit suite runs offline in seconds, and tools/interop/run.sh runs the client against opentracker, Torrust in private mode and qBittorrent/libtorrent, reading the verdict from their state rather than ours. Both run on every push. In short:

  • Session counters. uploaded/downloaded count from started, never the lifetime total; left comes from the pieces held.
  • BEP 3 events per tracker. started, completed (once, to every tracker that saw us leech, retried if one is down) and stopped; a cross-seed is never a snatch.
  • Your floors hold. min interval, BEP 31 retry in and Retry-After are obeyed per tracker, races included. Only a re-announce a person forces crosses min interval, as qBittorrent's does. An unregistered race is retried like autobrr does it (7 s, 50 times). BEP 12 tier order is respected, and tracker id is echoed back.
  • One identity. Peer id -HY####-, the same to every tracker and every peer, User-Agent: Hydranos/<version>, a stable secret key. No client spoofing.
  • Private torrents stay private (BEP 27): no DHT, PEX, hole punching or LSD, and peers named by other peers are ignored.
  • HTTP trackers only. No UDP, and no scrape requests: swarm counts come from the announce response.

Screenshots

All screenshots below are taken with incognito mode on: torrent names, categories, paths, IPs and tracker hostnames are replaced by stable fakes.

Overview — live dashboard: global up/down, seeding/leeching counts, per-session throughput.

Overview

Race — one finished race in detail: where it placed in the swarm, how the download went, which peers it came from, and what it has uploaded since.

Race

Hoard — the long-term seeding library, filtered by tracker, state and category.

Hoard

Trackers — one row per tracker actually announced to: passkey override, announce IP family, seed obligation, and the errors seen in the last hour.

Trackers

Benchmark — traffic per engine, disk and cache health, and whether the announces keep up with the catalogue, from fifteen minutes to thirty days; plus a line speedtest and a before/after comparison around a change.

Benchmark

Workflows — rules over the library, built from conditions and actions and previewed before they run. Here: tag every torrent in the media categories whose files have no hardlink outside Hydranos, i.e. that can be deleted without losing anything.

Workflows


Documentation

Install steps, architecture, every networking mode and the edge cases live in the Wiki:

API reference: docs/API.md. Companion VPS relay: hydra-relay.


License

Hydranos is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See LICENSE. In short: you're free to run, study, modify, and share it, including self-hosting a modified version, but if you offer a modified Hydranos to others over a network, you must make your source available under the same license.