Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Releases: ikatson/rqbit

v9.0.0-beta.1

15 Jun 18:39
bae3103

Choose a tag to compare

v9.0.0-beta.1 Pre-release
Pre-release

rqbit v9.0.0-beta.1 major release

Major changes since v9.0.0-beta.0 (where uTP support is the main change)

  • Full IPv6 support. Rqbit now runs everything in dualstack IPv6 + IPv4 mode by default. It can also work in pure-IPv6 mode just fine. This could discover and connect to more peers.
  • rqbit download is now completely stateless and doesn't use the same ports as rqbit server does. This makes it very easy to run multiple concurrent instances.

Why isn't this a stable release yet?

I want to bundle as many breaking changes as possible into v9, but I want to enable uTP by default, and it still requires a bit of work and observations. One other way to do it is to make v9 and v10, but I'd rather do it once for simplicity. Otherwise this beta should be fully working and better than v8

All PRs merged (mostly above + refactorings)

  • Fix a very rare bug where DHT paniced by @ikatson in #380
  • [feature] allow creating torrents via HTTP API by @ikatson in #387
  • [bugfix] WebUI: padding files are not checked by default by @ikatson in #388
  • improvement: backend ignores only files if they are padding files + code reuse by @ikatson in #389
  • [enhancement]: create sparse files on Windows by @ikatson in #390
  • [feature] TCP and uTP: listen on IPv6 dualstack instead of IPv4 only by @ikatson in #392
  • [feature]: HTTP trackers now support IPv6 peers by @ikatson in #393
  • [feature]: UDP trackers IPv6 support by @ikatson in #394
  • [enhancement]: optimize tracker log verbosity + a improvement in HTTP retrying by @ikatson in #395
  • [feature]: DHT - dualstack over IPv6 by @ikatson in #396
  • DHT: patch persistence file for the upgraded DHT (to enable v6) by @ikatson in #397
  • [fix]: utp - better wait algorithm for TCP failures by @ikatson in #398
  • [refactor] Refactor compact ips code reuse by @ikatson in #399
  • [fix] invalid torrent names to use from_utf8_lossy #316 by @ikatson in #400
  • [fix] Do not try to delete padding files as they don't exist by @ikatson in #401
  • [refactor] small optimizations to new compact_ip.rs by @ikatson in #404
  • [enhancement] DHT improvements by @ikatson in #405
  • [refactor]: optimize bencode error handling and perf by @ikatson in #406
  • [breaking] rqbit download: make it a lot simpler (fixes #402) by @ikatson in #403
  • [refactor / perf] various (potential) perf tweaks by @ikatson in #409

Full Changelog: v9.0.0-beta.0...v9.0.0-beta.1

rqbit v8.1.1

12 Jun 11:34
00b9748

Choose a tag to compare

patch release 8.1.1

Backported a few changes from main to stable

  • #388 WebUI: padding files are not checked by default
  • #380 Fix a very rare bug where DHT paniced
  • #400 [fix] invalid torrent names to use from_utf8_lossy
  • #401 Do not try to delete padding files as they don't exist

Full Changelog: v8.1.0...v8.1.1

v9.0.0-beta.0

06 Jun 11:14
17afc8d

Choose a tag to compare

v9.0.0-beta.0 Pre-release
Pre-release

Major new rqbit release 9.0.0-beta.0

The are some major new features and some breaking changes in the API / CLI.

TLDR

  • rqbit now supports uTP protocol, which will help discovering more peers. Enable via --experimental-enable-utp-listen. I'll probably enable it by default once 9.0.0 full is released.
  • breaking CLI change: you need to replace --tcp-min(max)-port with --listen-port if you used those.
  • breaking librqbit changes: some SessionOptions are moved around

uTP support

After a long wait, we finally have support for uTP (uTorrent transport protocol) done through specially created librqbit-utp library.

What does that mean for end users? Mostly, that you'll get more peer connections, especially on torrents with low seed count. It turns out that in the wild there's lots of peers that only have uTP enabled, but they don't listen on TCP. For those torrents previously rqbit couldn't connect to those peers at all.

This turned out to be one of the hardest pieces of code I've ever written, it's pretty much as complex as creating a TCP stack from scratch.

There are some caveats though, which is why uTP is disabled by default and you need to enable it explicitly via --experimental-enable-utp-listen.

uTP caveats

First, the original reason for uTP creation was LEDBAT congestion control algorithm, which is notably missing from the current implementation, and we use CUBIC (the modern TCP congestion control algorithm) instead. I'll probably add LEDBAT someday, it shouldn't be hard. The reasoning behind LEDBAT is to move torrent traffic to background so that it doesn't interfere with normal network operation on the machine. In practice, in my network conditions this is never an issue: I never notice rqbit slowing down my internet to make it noticeable.

Second, the librqbit-utp code is complex and there might be bugs. It seems stable for me, hence I'm making this release: I was running my rqbit for a while in uTP-only mode. But I'm asking all users to please try it out and report issues.

Third, although I tried hard optimizing it, it can't beat kernel's TCP stacks that were being optimized for tens of years by very talented engineers. TCP runs in the kernel, while uTP in tokio userspace. For this reason, rqbit first tries connecting over TCP, and only if it doesn't work after 1 second, a uTP connection attempt is made.

uTP can saturate my gigabit connection however on Apple devices, so it's not slow, just slower than TCP at the limits, and also noticeable on slower devices. E.g. my OpenWrt router can squeeze ~50 megabytes/s with TCP, but only about 20-25 over uTP. Of course it can be optimized further and it's just the beginning.

One more caveat is UDP socket read buffer is shared among all connections, unlike TCP (which is per connection). librqbit-utp tries to increase SO_RCVBUF, but it's likely to fail increasing it enough at least on Linux. This can result in lost incoming packets which will make uTP work considerably worse with fast download speeds, so to prevent this you might need to increase /proc/sys/net/rmem_max on Linux.

Prometheus metrics exporter

While creating librqbit-utp it proved extremely handy to monitor it using metrics, as logs would be too verbose and have too much overhead.

So I added prometheus metrics available under /metrics HTTP endpoint. For now there's only uTP metrics, but we can add more to rqbit itself.

Other changes including breaking

  • added --listen-port, --listen-ip, --enable-prometheus-exporter options
  • breaking: env / CLI: RQBIT_TCP_LISTEN_MIN_PORT (--tcp-min-port) and RQBIT_TCP_LISTEN_MAX_PORT (--tcp-max-port) moved to RQBIT_LISTEN_PORT
  • breaking: librqbit SessionOptions: peer_opts and socks_proxy_url moved to opts: Option<ConnectionOptions>
  • breaking: librqbit SessionOptions: enable_upnp_port_forwarding moved to listen: Option<ListenerOptions>

What's Changed

Full Changelog: v8.1.0...v9.0.0-beta.0

v8.1.0

05 Jun 11:07
559fca8

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v8.0.0...v8.1.0

v8.0.0

06 Jan 16:58
bc5e23b

Choose a tag to compare

rqbit v8.0.0

Why a major release? Lots of merged PRs since v7.0.1, minor breaking changes in librqbit API and CLI naming.
Other than that, it's a checkpoint to release all the work by many contributors.

Breaking changes

  • Minimal Rust version bumped from 1.75 to 1.78
  • CLI parameters changes:
    • renamed disable-upnp -> disable-upnp-port-forward
    • removed upnp-server-hostname
    • added enable-upnp-server
  • librqbit API changes: if any, they are minor, but might be some depending on usage. All should be easy to fix just by resolving compilation errors.

UI features

  • There's a banner in the bottom showing total up/down speed and uploaded/downloaded bytes since restart
  • Upload multiple files through UI

Some Other features

  • upload/download rate limits
  • watching a directory for .torrent files and adding them automatically (usage in #237)
  • Improved UPNP server support. Now works on some Samsung TVs, and should be more reliable overall.

HTTP API changes

BitTorrent protocol features

  • BEP-47 padding files
  • BEP-53 select only files from magnet
  • BEP-11 Peer EXchange

What's Changed

  • feat: add on_piece_completed method on TorrentStorage by @cocool97 in #219
  • PEX - Peer Exchange initial impl by @izderadicka by @ikatson in #221
  • [Feature] UPNP MediaServer: send notifies on all interfaces, no need to specify hostname by @ikatson in #222
  • [Feature] option to disable upload by @ikatson in #223
  • Desktop same workspace by @ikatson in #225
  • [Feature] [UPnP] connection manager stub by @ikatson in #226
  • Various tweaks to peer protocol information by @ikatson in #227
  • Smarter fastresume by @ikatson in #228
  • Standardized m3u8 formatting by @Artrix9095 in #229
  • Remove error when adding duplicate torrents by @Artrix9095 in #230
  • [UPnP / DLNA] Updates for Samsung to work by @ikatson in #231
  • UPNP: join all multicast groups from all interfaces (not just the default one picked by the kernel) by @ikatson in #232
  • Fastresume: check at least one piece from each file + windows fix by @ikatson in #235
  • In PEX we should also look at dropped peers by @izderadicka in #233
  • Upload multiple files through UI (fix #68) by @ikatson in #236
  • [Feature] watching a directory for .torrent files and adding them automatically by @ikatson in #237
  • [Feature] SSDP IPv6 support by @ikatson in #238
  • [Refactor] Re-use code in "merge_streams" by @ikatson in #240
  • Change to restarting of dead peers by @izderadicka in #239
  • Add support for adding custom trackers by @Moeweb647252 in #243
  • Correct peer outgoing address for incomming peers by @izderadicka in #244
  • [Refactor] Generic peer IP by @ikatson in #246
  • [Perf] Increase http_api stream capacity (perf optimisation) by @ikatson in #247
  • feat: upgrade to tauri 2.0 by @PastaPastaPasta in #249
  • feat: implement BEP-53 support by @PastaPastaPasta in #248
  • refactor: use byteorder crate to enhance portability (to BE systems), and enhance code readability, avoiding manual byte manipulations by @PastaPastaPasta in #250
  • Disable upload: do not expose in default builds, move under a feature flag. by @ikatson in #251
  • Migrate linux configuration to a better named path. by @ikatson in #253
  • Fix: transactional pause by @Mrreadiness in #254
  • Add CLI parameter to allow send downloads to remote server by @izderadicka in #257
  • Added destination_fodler to TorrentDetailsResponse by @markolo25 in #263
  • Endpoint to show all torrents and all stats by @ikatson in #268
  • BEP-47 padding files + refactor related code by @ikatson in #269
  • BEP-47 - UI support and updates by @ikatson in #270
  • [feature] support 40-byte infohash (not a magnet) as a way to add torrents by @ikatson in #271
  • Update minimal Rust version to 1.76 by @ikatson in #278
  • [feature] upload/download rate limits by @ikatson in #275
  • Basic auth in HTTP API by @ikatson in #279
  • Enable thin LTO release but not release-github by @luigi311 in #283
  • Clippy updates + update Rust deps by @ikatson in #289
  • PEX - sharing peers with othes [continue #261] by @ikatson in #284
  • [feature] HTTP API timeouts by @ikatson in #290
  • [breaking] multiple refactorings in preparation for deferring torrent metadata resolution by @ikatson in #292
  • Prepare v8.0.0 by @ikatson in #294

New Contributors

Full Changelog: v7.0.1...v8.0.0

v7.1.0-beta.1

13 Sep 08:29
7a807f3

Choose a tag to compare

v7.1.0-beta.1 Pre-release
Pre-release

What's Changed since 7.1.0-beta.0

  • UPNP: join all multicast groups from all interfaces (not just the default one picked by the kernel) by @ikatson in #232
  • Fastresume: check at least one piece from each file + windows fix by @ikatson in #235
  • In PEX we should also look at dropped peers by @izderadicka in #233

Full Changelog: v7.1.0-beta.0...v7.1.0-beta.1

v7.1.0-beta.0

02 Sep 14:11
0fa24e6

Choose a tag to compare

v7.1.0-beta.0 Pre-release
Pre-release

What's Changed

  • feat: add on_piece_completed method on TorrentStorage by @cocool97 in #219
  • PEX - Peer Exchange initial impl by @izderadicka by @ikatson in #221
  • [Feature] UPNP MediaServer: send notifies on all interfaces, no need to specify hostname by @ikatson in #222
  • [Feature] option to disable upload by @ikatson in #223
  • Desktop same workspace by @ikatson in #225
  • [Feature] [UPnP] connection manager stub by @ikatson in #226
  • Various tweaks to peer protocol information by @ikatson in #227
  • Smarter fastresume by @ikatson in #228
  • Standardized m3u8 formatting by @Artrix9095 in #229
  • Remove error when adding duplicate torrents by @Artrix9095 in #230
  • [UPnP / DLNA] Updates for Samsung to work by @ikatson in #231

New Contributors

  • @cocool97 made their first contribution in #219
  • @Artrix9095 made their first contribution in #229

Full Changelog: v7.0.1...v7.1.0-beta.0

v7.0.1

28 Aug 13:05
c139697

Choose a tag to compare

7.0.1 - hotfix release

The binaries were ok, but the cargo crate had an issue were it couldn't parse torrents - fixed here c063cc5

NOTE: also for 7.0.0 and 7.0.1 the docker images and linux binaries were compiled to use ring for SHA1, instead of openssl, which turned out to be very slow. I reverted to openssl and rebuilt these without upgrading the version as nothing in rqbit changed, only the build parameters (enabled features).

7.0.0 release notes

Full Changelog: v7.0.0...v7.0.1

v7.0.0

27 Aug 17:48
973c3dd

Choose a tag to compare

rqbit 7

Major new features:

  • Integrated UPnP server to browse and stream directly to your LAN devices (e.g. TVs) more here
  • SOCKS5 proxy support docs
  • Now publishing multi-arch Docker images
  • Playlist generation support through API and UI links
  • Aggregate statistics in API and visible in UI
  • MANY reliability improvements
  • Fastresume - to restart quickly without rehashing

There's minor breaking changes in the CLI and librqbit API.

Merged PRs

Full Changelog: v6.0.0...v7.0.0

v7.0.0-beta.3

23 Aug 23:46
4ad12c3

Choose a tag to compare

Major feature

UPnP server integrated into rqbit - it can advertise all known torrents to local network, and you can browse and stream torrents from compatible devices (checked on my LG and Sony TVs).

Configurable both from UI and CLI.

CLI usage

rqbit --upnp-server-hostname 192.168.0.112 --upnp-server-friendly-name "rqbit is awesome" server start ...

UI

Screenshot 2024-08-24 at 00 36 50

What's Changed

Full Changelog: v7.0.0-beta.2...v7.0.0-beta.3