Known Limitations - Kheopsian/Hydranos GitHub Wiki

🇬🇧 English · 🇫🇷 Français

Known Limitations in 4.4

Applies to Hydranos 4.4.

This page lists everything in Hydranos 4.4 that is stubbed, ignored, broken or missing. It is for anyone who wants to know, before relying on a control or a setting, whether it really does something. Each row is one line. The full explanation, with what really happens and the workaround, is on the linked page. What 4.4.1 fixed from the 4.4.0 list is summed up at the end, in Fixed in 4.4.1, and what 4.4 fixed from the 4.3 list in Fixed in 4.4.

How to read the status column

Status Meaning
Not implemented The control, route or setting exists, but does nothing (or returns constants), or the feature stops short of what its name suggests.
Accepted but ignored A key or field is accepted and stored, but nothing acts on it. Since 4.4 most such keys are named in a startup warning.
Known bug The feature exists and works, but behaves wrongly in the case described.
Absent There is no such feature in 4.4, and nothing in the UI suggests otherwise.
Default trap It works, but the default value is not what you would expect.
Doc bug The product works; a file shipped with it describes it wrongly.

The first three match the callouts used on every page (Not implemented in 4.4, Accepted but ignored in 4.4, Known bug in 4.4).

In the web UI

Item Status What to do instead Page
Whether peers can reach an engine is shown nowhere: the header network panel's colour is the outbound exit probe only, and its tooltip refers to a health dot the page does not draw Known bug GET /api/port-forward (engines[].reachable, inbound_peers) Networking · Web UI Tour
Advanced settings lists [daemon] kill_switch, egress and the [proxy] keys, meant to be left to the Network tab: the editor hides the Network-tab keys under [race]/[hoard] only Known bug Change them on the Network tab, which writes them as a set Configuration: Daemon, Auth and Global Sections

Adding and categories

Item Status What to do instead Page
Add tab: going back to - none - in Category keeps the previous category's Save Path and Mode, and sends them Known bug Clear Save Path and pick the mode by hand Adding Torrents
Add tab help texts: Put the payload in its own subfolder says "on the hoard agent" (it applies to any engine); Skip the hash check… says a missing or wrong-size file is refused (nothing is checked) Known bug Rely on the wiki page Adding Torrents
The subfolder option (create_subfolder, [daemon] create_torrent_folder) on a magnet added through POST /api/torrents or the Add tab, and on watched folders, MCP adds, RSS magnets, node fetches and the import wizard Accepted but ignored Upload the .torrent, or add the magnet through the shim with contentLayout=Subfolder Adding Torrents
No .torrent URL field on the Add tab Absent torrent_url on POST /api/torrents, shim urls, MCP torrent_url Adding Torrents
Download order (sequential, first/last piece) at add time: only the shim reads it, not the Add tab, POST /api/torrents, the upload route, MCP or a watched folder Not implemented Set it right after the add (context menu or download-order), or add through the shim Adding Torrents

qBittorrent shim

Item Status What to do instead Page
app/setPreferences keys other than share limits, speed caps, dht/pex/lsd, active counts, the slow-torrent rule and save_path answer 200 and do nothing (logged) Accepted but ignored Config tab or default.toml qBittorrent Shim
app/buildInfo and app/version are constants; torrents/properties seeds and total_wasted are 0; no real availability; no per-tracker status or peer counts in torrents/trackers Not implemented Web UI detail panel or REST API qBittorrent Shim
rename, filePrio 0 and the queue-position calls answer 409; sync/maindata is always a full update; renameFile, renameFolder, editTracker, setSuperSeeding, setAutoManagement, pieceStates, webseeds, search/*, log/* answer 404 Not implemented Web UI or REST API qBittorrent Shim
Add fields rename and cookie (and any unknown field) ignored, logged; contentLayout=NoSubfolder refused on a multi-file torrent Accepted but ignored Keep the .torrent's name; fetch cookie URLs yourself and send the file qBittorrent Shim

Engines and trackers

Item Status What to do instead Page
The client-wide speed cap can only be set over the qBittorrent API (transfer/setUploadLimit, setPreferences); no alternative or scheduled speed limits Not implemented Engine caps in Settings, torrent caps with Limit rate… Queue, Share and Speed Limits
No queue positions: the priority calls answer 409, and a Start over the ceiling is stopped again within 30 s Not implemented Force download (shim setForceStart), a larger active_downloads, or dont_count_slow_torrents Queue, Share and Speed Limits
The inactivity clock of max_inactive_seeding_time restarts at each daemon start; the share-limit action is per engine only; no super seeding Not implemented None in 4.4 Queue, Share and Speed Limits
inactivity_timeout (in the template) and announce_rate_limit read by nothing and not warned; [race.custom_choking] read by nothing (named at startup) Accepted but ignored peer_timeout for idle peers; choking = true with max_uploads_per_torrent Configuration: Engines · Engines: Race and Hoard
Advanced settings shows wrong hints for hoard: max_connections default: 8000, max_uploads_per_torrent default: 20, inactivity_timeout default: 90 Known bug Trust the tables of the linked page Queue, Share and Speed Limits
Removing an engine that still holds torrents is refused (409); an empty engine removed keeps its listener until the restart Known bug Restart right after Configuration: Engines
max_connections missing means no cap on peer connections, and hoard's active_downloads missing means no download ceiling (template: 4000 / 12000, and 10) Default trap Set the keys explicitly Configuration: Engines
[hoard.disk_slots] read by nothing (named at startup) Accepted but ignored Stop torrents yourself Configuration: Engines
No stopped event when a torrent leaves by graduation, a data move or Move to engine ›, or on a crash or kill; at shutdown only what is sent within 5 s Not implemented Stop the torrent and wait for the announce first Trackers and Announces
[race_drain] min_age_minutes (gone from the template) read by nothing; named at startup if an old file still has it Accepted but ignored Watermarks and seed obligations Race Drain and Graduation
Share limits (ratio, seeding time, inactivity) never act on a torrent whose first live tracker has no Minimum seed declared: the seed is held, logged once Default trap Declare each tracker's Minimum seed on the Trackers tab (0 for none) Queue, Share and Speed Limits
Advanced settings lists active_downloads, max_uploads_per_torrent and peer_timeout only when the file has them, although saving would create them (race's template has no active_downloads) Known bug Add the key to default.toml by hand Configuration: Engines

Network and VPN

Item Status What to do instead Page
Check what actually happens cannot conclude a leak while the kill switch is armed (every mode but Direct by default): the default route is not measured, pinned or proxied rows show warn Known bug Check from outside VPN and Egress
Calls to other nodes, the gluetun control server, a qBittorrent being imported and NAT-PMP/UPnP for an unpinned engine stay local; an engine pinned to an interface Hydranos did not create resolves tracker names with the host's resolver Not implemented Managed WireGuard (its file's DNS), or the whole process in the VPN VPN and Egress
bind_interface and managed WireGuard are Linux-only: refused by the API and the Network tab elsewhere; an engine whose file still sets bind_interface stays off the network Absent System-wide VPN client VPN and Egress · Managed WireGuard
[daemon] bind_interface on Windows is accepted by the Network tab and POST /api/network/egress, then every daemon request (lists, update check, webhooks, .torrent URLs) that does not borrow an engine's route is refused, [proxy] included Known bug Leave Daemon interface empty, use [proxy] VPN and Egress
GET /api/settings returns an announce_proxy URL in clear, user:pass included, to anyone holding the API key (the SOCKS5 passwords and the gluetun API key are masked) Known bug Treat the API key as giving that credential too Security and Access · VPN and Egress
One network mode per instance: gluetun for one engine and managed WireGuard (or a direct engine) for another cannot share a process Absent A second instance inside gluetun, declared as a node VPN and Egress · Deployment Topologies
The SOCKS5 proxy card says "Nobody can connect to you from outside" and that the DHT still shows your address: incoming peers still reach the host's listen port, and the DHT is off behind the proxy Known bug Do not forward or publish the listen ports Networking · VPN and Egress
Managed WireGuard: taking a tunnel down removes its oif rules and its device, not its from rule (preference 6100 plus slot), which stays until a tunnel comes up again at that slot Known bug Harmless while that table stays empty; ip rule del pref <6100+slot> by hand Managed WireGuard

Nodes

Item Status What to do instead Page
Rows from another node: Edit tags ›, Force download and Share limits… are skipped; Edit trackers in the detail panel edits this instance's copy of the same hash Known bug Do it in the node's own UI (Open) Nodes

Automation

Item Status What to do instead Page
Jobs Cancel on a running move_data job is refused (409): it finishes Not implemented Wait for it Jobs and Moving Data
The context-menu Recheck is hidden when the selection has no hoard row (Race tab only) Known bug qBit torrents/recheck, or select from the Hoard list Jobs and Moving Data
Saving an RSS rule from its web form erases the rule's tags (torrentParams.tags) Known bug Set tags with PUT /api/rss/rules/:name or rss/setRule, and do not edit those rules in the form RSS and Automatic Downloads
[rss] enabled = false stops the worker and the rules only: Refresh and Download still fetch and add Known bug Delete the feeds RSS and Automatic Downloads
RSS rule form has no priority and no tags field; the Articles panel's Download has no save path and no paused option Not implemented The API (priority, torrentParams.tags; save_path, paused) RSS and Automatic Downloads
No RSS in the MCP server; the qBittorrent import brings no feeds or rules Not implemented Re-create them (rss/setRule accepts qBittorrent's rule JSON as is) RSS and Automatic Downloads
qBittorrent's RSS preferences (rss_refresh_interval…) and the rule fields torrentContentLayout, skip_checking and other torrentParams options Accepted but ignored [rss] and the documented rule fields RSS and Automatic Downloads
A bulk Reannounce names no engine: for a hash held by two engines it announces the first copy found, which may be the other one (found by reading the code) Known bug POST /api/torrents/<hash>/reannounce?engine=<id> Jobs and Moving Data
Workflow condition progress reads 0 for a stopped torrent with no piece map (seed-mode add or cross-seed added stopped, complete torrent reloaded stopped after a restart) Known bug Test completed_age to mean complete Workflows

Monitoring and operations

Item Status What to do instead Page
A / B comparison: race_avg_share and hoard_session_uploaded always 0 Known bug Read the other rows Monitoring and Logs
[bench] keys (recording is built in, and there is no retention: bench.db grows for good; named at startup) Accepted but ignored Stop, then delete or archive bench.db to reclaim space Monitoring and Logs
Advanced settings hides [vpn_speedtest] iperf3_port, interval_secs and duration_secs, which 4.4 reads Known bug Edit default.toml by hand Configuration: Daemon, Auth and Global Sections
A default.toml seeded by 4.3.0 has [vpn_speedtest] interval_secs = 3600: 4.4 reads it and runs an iperf3 test against a public server every hour Default trap Remove interval_secs (or set 0) Upgrading from 3.x
Extra engines are not in the A / B comparison, the hoard announce cards, Peak live seeds or the race timeline and its snapshots (engine race only) Not implemented /metrics, the Upload Speed chart Monitoring and Logs
Stub routes: GET /api/hoard/download-slots (every counter 0 but max_slots), GET /api/arr-cleanup/scan (always empty) Not implemented See the route list REST API
Built-in backup Absent Stop, copy the folder(s), start; or sqlite3 .backup Operating Hydranos
Nothing about the network exit in /metrics (tunnel state, forwarded port, kill switch verdicts, exit IP, DNS leak), and an engine whose announces wait for a forwarded port shows in no metric and not in /health Not implemented Poll the JSON routes with the API key; alert on announces that stop growing Prometheus Metrics
No Grafana dashboard shipped Absent Build panels from the listed families Prometheus Metrics
No published measurement above ~293,000 torrents (Hydranos 4.2): memory, cold start, announce rate and stop time at a million are not measured Absent Watch hydra_announce_late and hydra_memory_resident_bytes as the catalogue grows Deployment Topologies
Whole-list routes (GET /api/engines/:id/torrents, /api/hoard/torrents, /api/race/torrents): a filter plus an offset (limit absent or 5000 and up) loops forever once 5000 rows match from that offset Known bug Page with GET /api/engines/:id/page REST API

Install and packaging

Item Status What to do instead Page
packaging/install.sh's closing hint /opt/hydranos/hydranos-update lacks --dir (run elsewhere, the updater looks in the current folder) Doc bug Use the full command under Updating Install on Linux
Windows: the tray icon disappears before the resume save ends; closing the console, a shutdown or a sign-out start the same save, but Windows may end the process before it finishes (not tested by the maintainer) Known bug Quit from the tray and wait for hydranos.exe to leave Task Manager Install on Windows
Windows: an update started while Hydranos is still on its startup screen cannot stop it (no stop event yet, taskkill ignored): it ends with still running after 60s, nothing replaced (found by reading the code) Known bug Wait for the startup screen to go before updating Install on Windows

Leftovers from 3.x

Item Status What to do instead Page
3.x remote-engine blocks with addr (and token, tls_ca), [daemon] agent_token: no connection made; named at startup Accepted but ignored Declare the machine as a node Upgrading from 3.x
Category fields placement, agents, strategy, min_free_bytes: kept, read by nothing; one startup warning per field Accepted but ignored mode only Categories and Routing

Absent features

Item Status What to do instead Page
Search, selective download (file priority 0 is refused: every file is downloaded), multiple users Absent Prowlarr / autobrr; priorities 1/6/7 change the order only Migrating from qBittorrent · qBittorrent Shim

Configuration keys that do nothing

Item Status What to do instead Page
Keys named in a startup warning with their replacement (agent_token, listen_interfaces, file_pool_size, [race.custom_choking], [hoard.disk_slots], [bench], [metrics], [peer_intel], [arr_cleanup], [notify], min_age_minutes, 3.x agent blocks and category fields), hidden from Advanced settings; plus inactivity_timeout and announce_rate_limit, which are not warned: full table Accepted but ignored See the table Configuration Reference · Configuration: Daemon, Auth and Global Sections

Fixed in 4.4.1

For readers upgrading from 4.4.0. The full list is in the changelog.

  • Moves: Set location…, a same-mode category move and the workflow action move files to a folder carry the torrent's own state (pieces, tracker edits, counters, caps, stopped state) instead of re-adding it in seed mode; Duplicate to engine › refuses (409) a source that is incomplete or being checked; a graduation, from the drain or by hand, leaves a torrent in place when a file of the same name sits at the destination; the first announce after a graduation or Move to engine › no longer reports lifetime bytes.
  • Adding and categories: Start goes through the same path guard as a recheck; POST /api/torrents answers 400 or 409 for a refusal and 500 only for a store failure; a torrent added during the store reconcile keeps its row (no more no piece hashes ghosts), and DELETE /api/torrents/:hash removes a torrent an engine runs with no store row; a category PUT without mode keeps the mode; a category rename follows it everywhere it is named.
  • Queue and shim: Force download and setForceStart run a torrent past the download queue (no more 409).
  • Security: SOCKS5 passwords and the gluetun API key are masked in GET /api/network/mode, /api/network/egress and /api/settings.
  • Watched folders and web UI: each folder scans on its own (a stuck network share no longer stalls the others), the status shows seen N and not scanned yet; UNC paths and C:/… accepted on Windows; a folder's forced engine kept on save; a reload of the Config tab no longer shows an empty list; filter chips keep their width.

Fixed in 4.4

For readers upgrading from 4.3.0 (4.4 includes 4.3.1 and 4.3.2). What to check after the upgrade is in Upgrading from 3.x.

  • Security and access: Change password stores the new password; Sign out button; hydranos reset-password / hash-password; the first-run setup judges the socket peer, not only X-Forwarded-For; rescue mode listens on api_host/api_port.
  • Stopping and restarting: UI/API restarts save resume data and exit with code 75; an open UI tab no longer blocks the clean stop; HYDRANOS_STOP_TIMEOUT is applied; Windows console close, shutdown, sign-out and Ctrl+Break start a clean stop; stopped is sent on remove and at shutdown.
  • Moves and removals: local Move to engine › adds to the target before removing the source; a graduation releases the source (data kept), moves the files, then adds to the target, and rolls everything back on failure or cancel; both carry the torrent's state; POST …/graduate runs the same checks; race purge and the post-restore reconcile delete only the engine's own copy.
  • Web UI: Node group shown with two local engines; Race tab lists every race-role engine; bulk actions on extra-engine rows act on that engine; Advanced settings saves the tracker tables; the network panel names engines; dead cards, dialogs and badges removed; update badge and Report issue use the right repository.
  • Adding and categories: Add tab Mode, subfolder (not for a magnet), skip hash check and Add without starting are applied; torrent_url on the native route; seed mode for magnets; clearer status codes; category rename, delete (labels cleared), orphan Adopt, case-insensitive mode, No category; import provenance recorded.
  • qBittorrent shim: real uploaded/ratio, tracker, hashes=all, createCategory 409, deleteTags, addTrackers announces, extra engines listed once; setLocation, setShareLimits, setForceStart, filePrio, sequential, sync/maindata, speed limits and many setPreferences keys added.
  • New features: RSS, file priorities and sequential download, download queue, share limits, speed limits, choker, LSD, scrape for torrents not announced yet, managed WireGuard, Gluetun, SOCKS5 and PROXY-v2 modes, kill switch and daemon egress.
  • Engines and trackers: start_paused holds; race announces follow the tracker's interval instead of 30 minutes; DHT, PEX and webseeds on and real listen ports when keys are missing; tracker edits saved at once; tracker form hint fixed; + Manual host leaves Minimum seed blank.
  • Network: live port changes persisted and rebound (TCP, uTP, announces, forwarding); out-of-range ports refused; real /api/port-forward; UDP forwarded; enable_ipv6 = false forces v4 announces; each engine dials with its own binding and identity; uTP refused rather than unpinned; announce_proxy / announce_ip read; HYDRANOS_CAP_NET_ADMIN used.
  • Nodes: remote-row actions sent to the node; hyphenated node names; enrolment script fixes (archive name, no foreign docker rm, pinned version, token kept on 409); persistent handoff job; moves to a node's extra engine confirmed; node edit, rename and key rotation.
  • Workflows and jobs: Save keeps Enabled; NOT groups kept; data_missing fixed and progress fixed for running torrents (stopped ones: see above); Every column; Windows paths; allow_breaking_hardlinks control; field hints; Jobs Cancel; Active only shows queued jobs; bulk Recheck reaches race copies.
  • Monitoring: Logs filters and Live; log rotation (128 MiB, 4 old files); real /health and /api/startup; full /metrics; real anomaly counters; line test, A / B comparison and race snapshots recorded; extra engines in Overview, Benchmark, Records and tracker health; list routes honour filters; stub routes removed.
  • Packaging and 3.x leftovers: packaging/install.sh installs the updater and no longer overwrites an existing unit (the shipped one goes to hydranos.service.new); docker-compose.yml comments fixed; /api/agents* and jobs/move-remote answer 410 with the replacement; HYDRANOS_ENGINE_ID / HYDRANOS_ENGINES refused with a message; dead keys named at startup.
⚠️ **GitHub.com Fallback** ⚠️