github Power2All/nanotorrent v0.3.0
NanoTorrent 0.3.0

5 hours ago

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 next recv_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.
  • Peer ID changes from -NT0250- to -NT0300-.

Don't miss a new nanotorrent release

NewReleases is sending notifications on new releases.