Document v4.4.1: fixed rows out of Known Limitations, watched folders on network shares, install tags
06829f4
Links in tables: [Text](Page) instead of [[Text|Page]]
GitHub reads the | of a wiki link inside a table cell as a column separator, so every link in a table rendered as raw [[Text text.
0bca950
Wiki for 4.4: RSS, download order, queue and share limits, managed WireGuard, Prometheus metrics; Known Limitations re-checked against the code
Every page re-verified against v4.4.0 (EN and FR). New pages: Managed-WireGuard, RSS-and-Automatic-Downloads, Queue-Share-and-Speed-Limits, Prometheus-Metrics. Known-Limitations: 79 rows fixed in 4.4 moved to a Fixed in 4.4 section.
9abb91f
Categories: a category routes on its mode; placement and strategy are not applied
The page described placement, strategies (all, least_torrents) and
per-agent save paths as working. No 4.x release reads them: the engine
comes from the category's mode (or an explicit engine at add), the path
from the category (or an explicit path), and an add with neither is
refused. Rewritten EN+FR to say so, with the old fields called out as
accepted but ignored. Mentions of placement elsewhere follow.
d9a0dfe
Gluetun: gluetun forwards several ports, Hydra reads one
Tested on staging rather than argued about. With PORTS_COUNT=2 gluetun
forwarded 35514 and 58951 on ProtonVPN, opened both inbound, and its API
answered {"port":35514,"ports":[35514,58951]}.
Hydra's gluetun client decodes the port field and ignores ports, so the
second forwarded port has no consumer: a second engine has nothing to
follow, and the port rotates each lease so it cannot be pinned in the
TOML either. The previous commit concluded a monolith with PORTS_COUNT=2
would work. It does not, yet.
Says both halves, since the provider limit and the client limit move
independently, and a reader hitting this needs to know which one is in
their way.
b7de314
Deployment: ProtonVPN is no longer a single-port case, and repair four bullets
Follows the gluetun correction: ProtonVPN sat in the list of providers
that force a front-only plus one agent per tunnel. It belongs there only
if PORTS_COUNT is left at 1. Says what the split still buys either way,
an exit IP per engine.
Also repairs four list items the punctuation pass flattened: an indented
' - item' matched the spaced-hyphen rule and became ', item', which
markdown renders as a stray comma in the middle of a sentence.
4b44b24
Gluetun: ProtonVPN forwards up to five ports, not one
The page said gluetun exposes a single port for ProtonVPN and pointed at
an open feature request. gluetun's maintainer replied that it is already
implemented, and the code agrees: VPN_PORT_FORWARDING_PORTS_COUNT
defaults to 1 and is accepted up to 5 for ProtonVPN, rejected above 1
for every other provider, and the ProtonVPN provider maps that many
through NAT-PMP.
This changes the advice, not just a fact. ProtonVPN was in the column
that forces a front-only plus one agent per gluetun; it can now run a
plain monolith with PORTS_COUNT=2. The split still buys a separate exit
IP per engine, which is the reason to keep choosing it.
Verified against gluetun master and its documented options.
347fec1
Two double hyphens left inside a compose comment
22b6b71
Punctuate like a human: commas, not hyphens
Replacing the em dashes with a spaced hyphen swapped one tic for
another. Nobody writes that. Prose gets a comma, an aside that
interrupts a sentence gets parentheses, and a heading that names a thing
then explains it gets a colon.
2545609
Home: do not tell Windows users they need a server
The intro said there is no desktop window and that Hydra runs on a
server. There is a Windows build with a tray icon that runs perfectly
well on the machine someone is sitting at, so the first sentence talked
a chunk of its readers out of installing it.
Says what is actually common to every install instead: the interface is
a web page, which works the same on a NAS you never look at and on your
own PC.
d5c517a
Home: say what Hydra is before saying how it is built
The landing page opened with control plane, SSE, shim and *arr. Someone
arriving without that vocabulary learned nothing from the first
paragraph, which is the one paragraph everybody reads.
Says the plain thing first - a BitTorrent client that runs on a server,
for a library too big for an ordinary one - then what it buys you, and
only then the Go and Rust split.
Drops the 196k+ figure here. An oddly precise number invites the
question of where it comes from, which the landing page is the wrong
place to answer; the README carries it with its measurements.
c11828c
Style pass: no warning emoji, fewer verbal tics
Same house style as the UI. The six warning emoji are gone: the bold
lead-in already says it is a warning, so the icon was decoration.
Trims the words that read as filler once you notice them - deliberately,
on purpose, by construction, simply, note that, under the hood. Where
the intent genuinely is the point the sentence keeps saying so, and the
rest just state the fact.
The language-switch flags stay: they are the navigation, not decoration.
023b2b7
Drop the em dashes
Same house style as the UI: no em dashes. 355 of them across the wiki,
most added by this documentation pass. Replaced with a plain hyphen,
which is what the surrounding prose and the commit log already use.
4d6dc61
First run: no password is generated, the UI asks you to create one
Found by running the install page against a clean container instead of
reading it. Four pages told the reader to fish a generated admin
password out of the logs. Nothing is generated: an empty password_hash
means first run, and the UI asks a human to pick one -- so the grep the
docs suggest returns nothing and a new user is stuck at the login screen
with no way forward.
Says what the setup form does instead, including the part that matters
on a public host: it is accepted only from localhost or a private
network, so a reachable node cannot have its account claimed by whoever
finds it first.
Docker, Windows and the Configuration Reference all repeated the claim;
all four are corrected, in both languages.
9345b75
Shim: document addTrackers, removeTrackers and reannounce
The shim gained tracker editing and a forced reannounce, which is
exactly the surface cross-seed drives to graft a second tracker onto
data already held. Undocumented, an automation author has no reason to
believe Hydra answers those calls at all.
Also refreshes the version tag the French install page pins, which was
still v3.4.0.
00c6648
Catch up with v3.127: host-matched overrides, the bench section, the JSON that stayed
main moved ten releases while this pass was being written, and one of
them changes what the pages just said. Per-tracker overrides are no
longer selected by substring over the whole URL: a key is a host,
matched exactly or on a dot boundary, longest key first. The old
behaviour is worth knowing about because it sent one tracker's passkey
to another whose name merely contained it.
Adds the [bench] section that came with the same batch, where the key
that matters is race_snapshot_retention_days: race_snapshots writes a
row per racing torrent per sample and shared the year-long window until
it was given its own.
Corrects a claim inherited from the old page: v3.50.0 removed the
per-torrent JSON files, not every JSON file. categories.json and
agents.json are still there, both written by the UI. Also refreshes the
Docker tag the install page tells people to pin, which was v3.3.0.
825a443
Deployment Topologies: health probe, env-configured agents, moving between nodes
Three things a multi-node operator now has and the page did not mention:
an agent-only node serves /health for a container probe, an agent can be
described entirely by environment variables instead of a mounted config,
and a payload can be transferred between nodes piece by piece rather
than by copying files over a share.
Also states that an engine is addressed by its own id and not by its
role. Two nodes can both hold a hoard, so a torrent routed to one of
them has to reach that one -- addressing by role sends it to whichever
answers first, which looks like a torrent landing on the wrong machine
at random.
8f71cdb
Networking Modes: correct what SOCKS5 egress actually covers
The page said outbound peer AND tracker traffic exits through
socks5_outbound_*. Only peer dials do. Announces are issued by the Go
side and never consult those keys, so a reader following this page built
a relay that kept announcing from the host's own address -- silently,
with no error and nothing in the logs. That is the exact leak
announce_proxy was added to close, and the page was still describing the
broken setup as correct.
Adds the Network mode tab and why it exists: the four setups are
mutually exclusive, picking one clears the others' keys, and the mode is
deduced from the file rather than stored. Adds announce_ip_modes, where
the failure mode is announcing over IPv6 only and being invisible to
every v4-only peer, again without an error.
e7a8028
Concepts and Architecture: SQLite as the primary source, and jobs
Two claims had gone stale. Category changes were described as
hoard-only; they work on either engine now, and that is the whole
mechanism by which a race torrent is handed to the hoard. And
persistence was described as a store sitting next to resume files, when
resume data moved into the store in v3.100.0 -- along with the job
queue, which the mental model did not mention at all.
Adds jobs as a fourth concept, since work that outlives a request is now
something an operator sees in the UI and has to reason about. Notes what
actually dominates a cold boot at six figures, which is parsing the
.torrent blobs rather than reading resume records -- the useful thing to
know before optimising the wrong half.
Also drops '100k+ torrents' for the measured 196k.
ce0b719
Add an Operating Hydra page, and finish the flag list
Nothing documented how to run the thing once it is installed: log
rotation, the health probe, the shutdown budget, the profiler and the
alert topic were spread across code comments and a compose file.
The parts worth stating are the ones with a bad failure mode. Switching
the log to stdout hands rotation to your supervisor, and Docker's
default driver rotates nothing -- that is how the log reached 41 GB. The
shutdown budget is per engine, so the supervisor's grace period has to
clear twice it, or the resume flush is cut short and the next start
re-checks complete pieces.
Also fills three gaps found while writing it: --health-addr and
--listen-port-hook were missing from the Configuration Reference, and
--boot-from-store read as opt-in when it has been the default since
v2.9.x.
77359c7
Add an Editing trackers page
Tracker editing shipped and was documented nowhere: the wiki mentioned
trackers only as the key of a passkey table.
Leads with the two facts an operator needs and cannot guess. Editing
trackers cannot change an infohash, because the rewrite copies every
value through as raw bytes and never re-encodes the info dict -- without
saying so, nobody would risk the button on a torrent they are seeding.
And URLs are taken literally, whitespace aside, because every other
per-tracker table keys off the exact string: a trailing slash silently
makes a different tracker, which is how a passkey override stops
applying after an edit.
f6086b5
Add a Jobs & moving data page
Jobs shipped in v3.100.0 and the wiki never mentioned them: the word
'job' appeared only as an ordinary English noun. So the Jobs tab, the
data move behind a category change, the 200 MB/s throughput cap and the
piece-by-piece transfer between nodes were all undocumented.
Written around the guarantee rather than the feature list, because that
is what an operator needs to trust it: across filesystems the source is
never removed before the destination is verified, so an interruption
leaves the payload where the torrent is still seeding from it. Same for
the parts that surprise -- a cross-filesystem move breaks hardlinks and
asks first, and the answer is stored so a resumed job does not re-answer
it for you.
99587a9
Configuration Reference: document every key, not a third of them
The page listed the sections and a handful of keys. Measured against
main, 71 of the 105 TOML keys appeared nowhere in the wiki, along with
most environment variables and four CLI flags -- so the pages that send
readers here for the details were sending them nowhere.
Every key now has its default and, where the behaviour is surprising,
why it exists: that announce_proxy is deliberately separate from
socks5_outbound_* and skips UDP trackers, that max_dials_per_sec is the
knob that actually bounds a VPN tunnel, that an empty agent_token on
both sides means no authentication, that one [[engine]] block makes
[race]/[hoard] ignored entirely.
Adds the sections that were missing outright (disk_slots, arr_cleanup,
notify, announce_ip_modes, [[engine]]), the environment variables an
agent node is configured with, and the flag list.
04c5897
Fix the front/agent compose form and the nameless [[agent]] block
The `command:` in both Deployment-Topologies pages repeated the binary name.
The image entrypoint already runs `hydra --config <config> "$@"`, so that made
`hydra` a positional argument: flag.Parse stopped there and dropped
--agent-only / --front-only behind it. Following this page produced two
monoliths -- the agent never opened its gRPC data-plane, the front came up with
engines of its own -- with nothing in either log. `command:` now carries the
extra flags only.
The example front config also omitted `name` from its [[agent]] block, so the
front dialed nothing at all. Added, with what it is for.
Both are refused/reported as of v3.99.0; two Troubleshooting entries cover the
upgrade, EN and FR.
643af57
Bare metal: fix the password instructions, document installing without root
c04b30e
Document the shutdown budget (stop_grace_period, HYDRA_STOP_TIMEOUT)
57482d9
docs: rewrite the configuration reference — what lives in the TOML vs the store (EN+FR)
55d3ef5
docs: importing from Transmission, and imported states (EN+FR)
e9a0874
docs: qBit 5 stop/start verbs and the stopped vs queued states (EN+FR)
d8e3cef
docs: PUID/PGID — running as a non-root user (EN+FR)
86a902a