There were lots of changes and improvements since beta.1.
UI refactor and compact view
The UI was refactored and improved significantly. The old card view is still there, but on wider screens opens the compact layout by default.
- Search bar to filter torrents by name
- Status filter (all, downloading, seeding, paused, error)
- Sortable columns (name, size, progress, speed, ETA)
- Keyboard navigation (arrow keys, Enter to select)
- Resizable detail pane with tabs for Overview, Files, Peers
- Per-piece visualization showing download progress
- Virtualization via react-virtuoso for handling 1000+ torrents smoothly
Here's how it looks on a mobile phone
Perf improvements
There were many perf improvements, including much better operation when disk is slow.
- [perf] Ring buffer for peer message reads by @ikatson in #421
- [perf] Vectored I/O reads by @ikatson in #423
- [perf] Reduced tracing overhead by @ikatson in #437
- [perf] Async disk bitv flushing (remove mmap) by @ikatson in #522
- [perf] block_in_place concurrency limit by @ikatson in #521
- [perf] uTP vectored writes and dynamic send buffers by @ikatson in #442, #443
What's Changed
- Fix shell completion output by @Jeidnx in #413
- [UX]: rqbit download tweaks + README updates by @ikatson in #414
- [feature]: rqbit share CLI command by @ikatson in #415
- [feature]: local service discovery by @ikatson in #416
- [fix] various tweaks and fixes by @ikatson in #417
- [feature] TCP connect now uses the same source port as announce port by @ikatson in #418
- [fix] PEX: do not linger the task when the peer is dead by @ikatson in #419
- [optimization] PEX: dont send local network peers to public by @ikatson in #420
- [refactor] tweak error and log messages by @ikatson in #422
- [perf] reduce memcpy by using pwritev on unix + rewrite protocol parsing for it by @ikatson in #421
- [perf] read vectored by @ikatson in #423
- [refactor] remove a bunch of unused stuff and specialized some generics by @ikatson in #424
- [fix] upnp + IPv6: disable link-local responses by @ikatson in #427
- [perf] various lower level perf optimizations by @ikatson in #428
- [refactor] bencode: remove the hack for info hash computation by @ikatson in #430
- [fix] http trackers: support responses with trailing bytes by @ikatson in #431
- [fix] fix a recently introduced bug with ut_metadata by @ikatson in #432
- Fix build errors when sha1 is missing by @ikatson in #433
- various refactorings by @ikatson in #434
- [fix][feature] various small fixes and tweaks by @ikatson in #435
- [fix] bencode: parsing negative integers by @ikatson in #436
- [perf] decrease CPU usage due to disabling tracing in several places by @ikatson in #437
- [refactor] code reuse in rqbit's main.rs by @ikatson in #438
- [perf] upgrade librqbit-utp + remove deadlock detection by @ikatson in #442
- [perf] librqbit-utp vectored read + vectored write by @ikatson in #443
- [feature] add peer uploaded bytes stat by @ikatson in #444
- [feature] bind to a specific network device by @ikatson in #445
- [refactor] tweak blocklist code by @ikatson in #446
- [memory] blocklist - split into v4/v6 to save memory by @ikatson in #448
- [fixes] various small fixes by @ikatson in #449
- [feature] support filenames that are invalid utf-8 by @ikatson in #453
- [feat] librqbit: support ephemeral ports when listening. by @ikatson in #455
- [feature] detect non-utf8 character encodings + big refactor to validate the torrent once at init by @ikatson in #456
- Update README for Homebrew install by @rossmacarthur in #459
- Fix typo in shell completions command by @brendanny in #461
- Update deps by @ikatson in #467
- apply fmt 2024 (fix clippy warnings) by @oooo-ps in #475
- Fix cargo warnings by @exbit in #479
- Fix typos by @marsam in #480
- Allow specifying DHT bootstrap nodes from commandline or environment by @crass in #485
- Update dependencies by @ikatson in #488
- Allowlist option (based on the shared registry implementation) by @oooo-ps in #497
- require clippy + rustfmt for all targets by @oooo-ps in #498
- streaming: support ranges with end by @ikatson in #503
- Upgrade
console-subscriberto0.5by @bbb651 in #513 - Use
serde_derivedependency instead ofserde/derivefeature by @bbb651 in #511 - docs: AddTorrentOptions::overwrite required even with complete torrent by @angrynode in #515
- Introduce "block_in_place" concurrency limit by @ikatson in #521
- Async disk bitv flushing (remove mmap) by @ikatson in #522
- Streaming: blocking permit for the whole stream duration by @ikatson in #523
- PEX: kill the task as soon as peer dies by @ikatson in #530
- Compact UI v2 by @ikatson in #529
- Network Connectivity Improvements (Add Announce Port Override And ipv4-only Mode) by @alexmichaelkeith in #531
- fix: piece state tracking and peer connection handling improvement by @ikatson in #532
- refactor: migrate to workspace dependencies by @ikatson in #534
New Contributors
- @Jeidnx made their first contribution in #413
- @rossmacarthur made their first contribution in #459
- @brendanny made their first contribution in #461
- @oooo-ps made their first contribution in #475
- @exbit made their first contribution in #479
- @marsam made their first contribution in #480
- @crass made their first contribution in #485
- @bbb651 made their first contribution in #513
- @angrynode made their first contribution in #515
- @alexmichaelkeith made their first contribution in #531
Full Changelog: v9.0.0-beta.1...v9.0.0-beta.2