github vavallee/bindery v1.31.0

5 hours ago

What's new

rTorrent and ruTorrent are supported (#1618) — a first-class download client alongside qBittorrent, Transmission and Deluge. Works over the HTTP XML-RPC endpoint ruTorrent and seedbox panels expose, and over rTorrent's own SCGI socket for plain installs (scgi://host:port or scgi:///path/to/socket). Grabbing, queue status, labels, import, removal, and a Test button that checks whether Bindery can actually read where rTorrent writes.

Download your logs from the UI (#1903) — a Download button in Settings → Logs saves the filtered entries as a text file, keys and tokens stripped. No container shell needed to attach logs to a bug report.

Jump to any page (#2010) — the in the pager is a dropdown now instead of decoration. Page 30 of 40 is one click.

Set the Hardcover sync interval (#1848) — 1 hour to 7 days, instead of a hardcoded 24.

Hardlink warns before it silently copies (#1720) — picking Hardlink when your download folder and library are on different filesystems now says so inline, where you make the choice.

Fixes worth knowing about

Dual-format folders attach both files in one scan (#1957, #1956, #1885) — a folder with an epub and an m4b used to attach one and leave the other Unmatched until you scanned again. And an m4b whose Artist tag carries a contributor list (author + translator + narrator, which is how Audible tags things) could never match at all, on any scan, forever. Both fixed. When a file still doesn't match, the Unmatched table now tells you why per file.

Downloads stop failing while they are still downloading (#1884) — a fresh torrent reports 100% for a moment, and that was enough to trigger an import against a folder that didn't exist yet. Three retries burned through in 45 seconds and the download was dead, blaming your path mapping. Retries no longer count when there is nothing on disk, a stuck download ends up visibly blocked with the real reason, and a blocked download releases its release so you can grab it again.

Adding one book adds one book (#1816, #1815) — Add Book used to pull in the author's entire bibliography behind it (75 books became 500 for one reporter), and a refresh did the same even with monitoring off. Ships one schema migration; it applies at startup.

Hardcover "Sync now" finishes (#1854) — it ran inside the web request and the 60-second timeout cut it off, so a 1,660-book shelf imported about a third and lost the rest silently. It's a background job now with progress on the import list row.

Long non-ASCII titles import (#1982) — a Japanese, Chinese, Korean, Russian or Greek title of ~83 characters could fail with "file name too long". The limit counted characters; filesystems count bytes.

OPDS readers fetch covers from Bindery (#2020) — KOReader and friends were hot-linking the metadata provider's CDN. Covers now come from your instance's local cache.

Security and licensing

A malicious torrent file could crash Bindery. The bencode walk that reads a torrent's infohash had no recursion limit, so a crafted .torrent from any indexer could exhaust the stack and take the process down, repeatedly. Nesting is now capped.

Go 1.26.6, picking up six standard library advisories.

A GPL-3.0 dependency was removed from the binaries (#1988). Bindery is MIT, Go links statically, so a GPL fuzzy-matching library made every published binary a combined work that couldn't honestly be offered under MIT. Replaced with a first-party implementation producing the same scores — 19,306 real title pairs checked, no matching decision changed. Every release now also ships THIRD_PARTY_LICENSES.md (#1989).

Background jobs no longer take the process down when they panic (#1967).


Full detail for every change is in CHANGELOG.md.

Don't miss a new bindery release

NewReleases is sending notifications on new releases.