You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
What's Changed
BitTorrent v2
v2-only .torrent files and v2-only magnet links now download and seed, verified against their merkle piece hashes (BEP 52). A magnet's piece layers live in the torrent file, not the info dict, so they are fetched from peers with the v2 hash messages (21/22/23) and checked against each file's pieces root before any content is requested.
Hybrid torrents announce under both info hashes, joining the v1 and v2 swarms at once and accepting incoming connections on either.
Verified against libtorrent's own v2 test swarm: all ten piece layers fetched and checked in 83 ms, then 1.43 GiB of a 1.45 GiB torrent downloaded and hash-verified.
No librqbit release implements BEP 52, so this is implemented in NanoTorrent on top of patched engine seams.
Not yet: answering an incoming hash request, and the v2 handshake bit on outgoing connections — NanoTorrent can join a v2 swarm but cannot bootstrap someone else's v2 magnet.
New protocol support
BEP 6 — Fast extension. All five messages. have all / have none replace a whole bitfield, and a declined request is answered with reject request instead of a dropped connection.
BEP 19 — WebSeed.url-list (GetRight) seeds become synthetic peers fed by HTTP range requests, so their pieces are hash-checked like any other peer's. One request per piece, not per 16 KiB chunk, and a failed fetch retries rather than killing the seed.
BEP 21 — upload_only. Set when we arrive already complete; two upload-only ends now hang up instead of holding an idle connection.
BEP 47 — Padding files. Recognised and hidden from file lists — they are alignment, not content. Preferences ▸ General shows them.
BEP 29 — uTP. Preferences ▸ Connection, off by default.
BEP 14 — Local service discovery. Preferences ▸ Connection, on by default.
Fixes
The DHT was dead on Windows, failing 24 ms after start. Windows reports an ICMP port-unreachable by failing the nextrecv_from on a UDP socket, which Unix does not do — and there is always one dead bootstrap node. SIO_UDP_CONNRESET and SIO_UDP_NETRESET are now cleared on every UDP socket, fixing DHT, uTP and LSD together.
Creating a v1 torrent no longer emits meta version 2 and a file tree, which had made v1 output byte-identical to v2.
The web interface now selects files by their real index, so hidden padding files cannot shift the selection.
Under the hood
Engine moved from librqbit 8.1.1 to 9.0.1; the patch set was re-cut against the new sources and consolidated to 13 numbered features across 16 files and four vendored crates.
The Linux build stopped being a claim: a full run on Ubuntu 24.04 built both binaries warning-free, passed the suite, and downloaded a 123 MB torrent from real peers through the GUI.
Upgrading
LSD is on by default — an upgraded profile starts announcing on the local network. Preferences ▸ Connection to turn it off.
Padding files are now hidden, so file lists on hybrid and v2 torrents get shorter. Preferences ▸ General to show them again.
macOS asks for local network access on first launch. That is LSD looking for peers on your own network; declining disables only that.