Repository navigation
Releases: Kheopsian/Hydranos
Releases · Kheopsian/Hydranos
Release list
v4.4.4
v4.4.3
Platforms: linux, windows
Changes in v4.4.2..v4.4.3:
- release: v4.4.3 -- a peer can no longer crash the client, and two hardlink columns
- fix(engine): bound bencode recursion so a peer or tracker cannot crash the daemon
- fix(engine): a stopped torrent takes no peer, shows its real state, and is stopped again if it runs
- fix(engine): a skip_checking add on files that are not there is an error, not a seed
- feat(ui): the hoard list has a Hardlinks column and an External hardlinks column
v4.4.2
Platforms: linux, windows
Changes in v4.4.1..v4.4.2:
- release: v4.4.2 -- a slow disk cannot fill the RAM, a fresh install downloads at once, and the last blockers before a wider announcement
- test(engine): a fresh install has its piece hashes from the first start
- fix(engine): a fresh install accepts pieces from its first start
- fix(engine): a download memory budget, so a slow disk cannot fill the RAM
- docs(magnet): a resolution is kept off the default route by bind_device and SOCKS5, not a mark
- docs: fwmark is applied to tracker dials only, and Hydranos never sets it
- fix(packaging): CAP_NET_ADMIN is opt-in in the systemd unit [linux]
- fix(ui): Advanced settings show the true defaults, the live keys, and not the Network tab's
- fix(wireguard): a tunnel's source rule goes with it, and the unit can make one [linux]
- fix: a paged filtered list, setup during start, and RSS tags and switch
- fix: Force download starts a torrent the user stopped
- fix(api): the announce_proxy password is masked like the SOCKS5 ones
v4.4.1
Platforms: linux, windows
Changes in v4.4.0..v4.4.1:
- release: v4.4.1 -- moves that keep their data, torrents that cannot lose their row, and watched folders on network shares
- fix(watch): a share that stops answering no longer stalls every folder
- fix(watch): UNC shares are accepted, and a folder says how many files it sees
- fix(api): a torrent the engine runs with no store row can be removed
- fix(store): the reconcile no longer takes a torrent being added for an orphan
- fix(ui): filter chips keep their width when the counts narrow
- fix: categories keep their mode and their name, forced torrents run, refusals are not 500
- fix: moves, duplicates, graduations and Start no longer damage data
- docs(readme): what 4.4 brings, and the new wiki pages
v4.4.0
Platforms: linux, windows
Changes in v4.3.2..v4.4.0:
- release: v4.4.0 -- RSS, download order, qBittorrent's queue and share limits, and the 4.3 gaps closed
- docs: bring README, API.md, conformance and SECURITY up to 4.4
- fix(ui): TRIM after drain sits on the drain row, next to the quota
- fix(shim): num_incomplete is the tracker's leechers, not the connections
- feat(announce): scrape the torrents no tracker has answered for
- feat(bench): real line test, A/B comparison and race snapshots
- fix(shim): magnets keep their add options; session totals and DHT nodes are real
- feat(queue): slow torrents leave the count, as qBittorrent's "do not count slow torrents"
- fix(download): a piece in flight costs the blocks received, and a peer that stops sending lets go
- feat: RSS feeds and rules; download order (file priorities, sequential, first/last piece)
- fix(links): the hardlink index no longer doubles the client's memory
- perf(pathclaim): find a path's owners through a save_path index in the store
- fix(add): a torrent no longer overwrites another torrent's files
- fix(move): a copy of this torrent in another engine reading the same files blocks the move
- fix(delete): decide which files go by path, not by how many copies the store lists
- feat(drain): TRIM a race volume after a drain frees space on it
- fix(ui): a hoard row only takes updates from the hoard engine
v4.3.2
Platforms: linux, windows
Changes in v4.3.1..v4.3.2:
- release: v4.3.2 -- managed WireGuard that holds, a kill switch that follows the mode
- fix(network): peers are told the live public port; a partial network-mode save keeps the rest
- fix(network): NAT-PMP through a tunnel is a translation; kernel replies stay in the tunnel
- fix(ui): the peer list scrolls inside its card; fitted headers are measured as drawn
- feat(network): the kill switch follows the network mode; unassigned engines are blocked, the daemon's requests follow the mode
- fix(ui): fitted columns fill the screen; the volume quota joins the Auto drain line
- feat(network, nodes, shim, observability): the remaining 4.3 gaps -- ports, nodes, qBit routes, health, metrics, logs
- feat(lsd, network): Local Service Discovery; the daemon's own requests get an exit, a kill switch, and tunnel DNS
- feat(limits, network): share limits and queueing as in qBittorrent; managed WireGuard; DHT off behind SOCKS5
- fix(ui): the Content tab shows what each file has downloaded and what is missing
- feat(limits, network): real speed caps, opt-in choker, real qBit ratio; SOCKS5 and PROXY-v2 reach the engine
- changelog: Unreleased -- the dead-key warnings and the removed surface
- fix(config, ui, api): dead keys are named at startup, dead surface goes
- docs(conformance): the race registration retry is 5 s for 6 minutes, and its test has a new name
v4.3.1
Platforms: linux, windows
Changes in v4.3.0..v4.3.1:
- release: v4.3.1 -- cross-seed sees the library
- docs(api): the API reference describes 4.3.1, not a 3.x internal note
- feat(install): --user installs a node without root, under XDG and a systemd user unit
- fix(cli, shutdown): HYDRANOS_STOP_TIMEOUT reads 60s and 2m again; unknown arguments are warned about
- fix(network): the gluetun port is followed, and announces carry the port the listener is on
- fix(race-drain): a volume can declare its own capacity, and every percentage says what it is of
- fix(shim, import): cross-seed sees the library; a qBittorrent import retries and says what it did
- docs: drop the 3.x agent/front design notes and the engine binary Windows no longer ships
- fix(engines): the Race tab, list filters, engine removal and the startup gate
- fix(shim): the qBittorrent API answers with the torrents' real state
- fix(install): enrolment, packaging and logs do what they claim
- fix(config): unwritten keys take their documented defaults; tracker tables can be saved
- fix(workflows, jobs): the editor keeps what it shows; conditions and cancel do what they say
- fix(categories, selection): rename, delete and orphans work; rows act on their own copy
- fix(add): the Add tab's options are applied, and a refusal says what was wrong
- feat(announce): send stopped when a torrent is removed and when the daemon stops
- fix(race): announce on the tracker's interval, retry an unregistered torrent every 5 s
- fix(egress): each engine dials through its own queue; uTP is never opened unpinned
- fix(announce): announces leave by the engine's interface, and respect enable_ipv6
- fix(trackers): edits are saved at once; "+ Manual host" no longer releases a tracker
- fix(move): a torrent moving between engines arrives as it left, or not at all
- fix(shutdown): every stop flushes resume data; purge and restore drop one copy
- fix(auth): a password change is stored, and first-run setup trusts the socket peer
v4.3.0
Platforms: linux, windows
Changes in v4.2.4..v4.3.0:
- release: v4.3.0
- test(ipfilter): documentation addresses in the tests
- fix(ui): fit a column to its badges, not only to its text
- fix(linkscan): publish the stored hardlink summary before the settle
- fix(delete): keep the files another torrent reads
- fix(ui): a column turned on showed at 0px; double-click a grip to fit all
- fix(api): set location keeps a trailing space in the folder name
- fix(ui): the Trackers tab on a phone, one card per row
- fix(ui): two cards per row on the overview
- feat(workflows): move files to a folder, add trackers
- fix(ui): categories in alphabetical order, whatever their case
- feat(ui): sortable, reorderable peer lists in the detail panels
- feat(workflows): run a workflow when a torrent is added
- fix(import): qBittorrent and Transmission imports, ported for real
- docs: one comparison, at the scale Hydranos is built for
- feat(overview): seed size per tracker, and the space it takes on disk
- feat(hoard): one ratio definition, and Hardlinks / Checked columns
- fix(ui): the hoard search box keeps one line and a usable width
- fix(tags): read one torrent's tags the way every reader does
- feat(ui): a progress panel for bulk actions
- fix(counters): count the session from bytes moved, not lifetime sums minus marks
- fix(workflows): tag one torrent by reading its row, not the engine's
- docs(conformance): BEP 47 in its place
- feat(v2): BitTorrent v2 torrents, and pad files that stay off the disk
- feat(add): watched folders
- feat(net): an IP filter, lists and bans
- feat(magnets): magnet links, end to end
- feat(workflows): a webhook action
- feat(trackers): UDP trackers, BEP 15 with BEP 41
- test(workflows): the recheck, the hour and the restart, locked down
- feat(workflows): run when a download completes
- fix(categories): stop offering the routing 4.x never applied
- feat(torrents): set location without a category; optional Save Path column
- fix(trackers): the per-tracker pass runs on a blocking thread; warn at 5 s
- fix(trackers): name the torrent in the errors dialog; one line when v4 and v6 agree
- feat(trackers): a tracker's errors open on a click, in its own words
- feat(trackers): real per-tracker figures, bucketed chart, compacted history
- perf(trackers): per-tracker stats read only what they show
- feat(announce): race like qBittorrent + autobrr, without crossing a tracker's floor
- fix(announce): tracker conformance an operator can check -- and interop to prove it
- perf(store): 64 MB page cache for the writer, set writes in lots of 10 000
- perf(selection): store-only actions are one write, not a request per torrent
- feat(selection): every selection action takes a filter
- feat(export): download a selection as .torrent files, hashes or CSV
- docs: a README for a million torrents
- fix(links): resolve a torrent's files from the engine's save path
- fix(workflows): a pass no longer holds the store writer; free space only when asked
- feat(workflows): a hardlink index kept in the background; no stopped announce on boot
- feat(ui): a search that does not shake the list; three more reads off the writer
- perf(store): WAL, a read connection, logged lock holds; resolve hashes by range
- perf(move): scan for shared files in slices across threads
- fix(store): stop holding the store for twelve minutes an hour; cheaper move checks
- perf(list): a page in a fifth of a second at a million torrents
- fix(announce): a 429 does not trip the breaker
- fix(announce): a rise that bought nothing is taken back, no more
- fix(announce): a cut that does not bring latency down makes it the new normal
- feat(announce): pace announces per tracker, Vegas-style
- fix(announce): size the pool for the torrents joining and the ones already late
- feat: agent endpoint, real category moves, adaptive announcing
v4.2.4
Platforms: linux, windows
Changes in v4.2.3..v4.2.4:
- release: v4.2.4
- perf(announce): keep the ten-second reconcile off the runtime's back
- perf(status): read engine totals from the rate tick, not a copy of the catalogue
v4.2.3
Platforms: linux, windows
Changes in v4.2.2..v4.2.3:
- release: v4.2.3
- fix(ui): a milestone's date sits in the right-hand column
- fix(records): a rate record is the best minute, not the best sample