github transmission/transmission 4.0.0

latest releases: 4.0.6, 4.0.5, 4.0.4...
21 months ago

Transmission 4.0.0

Highlights

This is a major release, both in numbering and in effort! It's been in active development for over a year and has a huge list of changes -- over a thousand commits -- since Transmission 3.00. Some of the highlights include:

  • Resource Efficiency - Use less memory and fewer CPU cycles
  • Better Community - Pull requests welcomed and used
  • Code Modernization - Migrated from C90 to modern C++
  • New Features - What would a major release be without them?

Resource Efficiency

  • The code has been extensively profiled and improved to fix inefficient code and memory use. For example, a stress test of starting transmission-daemon with 25,000 torrents is almost entirely IO-bound, using 50% fewer CPU cycles and 70% fewer memory allocations than Transmission 3.00.

  • The remote control GUIs (transmission-qt and transmission-web) now use the RPC API "table" mode, resulting in smaller payloads / less bandwidth use.

  • RPC payloads are now compressed using libdeflate, a "heavily optimized [library that is] significantly faster than the zlib library."

Community

  • The project is much more responsive to bug reports and code submissions than it has been in the past.
  • There is a new group of volunteer contributors who are working on Transmission!
  • Transmission 4.0.0 includes over 350 new community commits (see the Thank You section below and in the previous 4.0.0 betas) since 3.00 and welcomes new contributors.
  • Documentation has been moved into the transmission/transmission so that contributors can submit PRs to improve it.

Code Modernization

  • The entire codebase has been migrated from C to C++. In the process, we've removed thousands of lines of custom code and used standard C++ tools instead. The core's code has shrunk by 18%. The core codebase has been extensively refactored to be more testable and maintainable.
  • The GTK client has been ported to gtkmm.
  • The Web client has been rewritten in modern JavaScript and no longer uses jQuery. The entire gzipped bundle is now 68K.
  • The unit tests have been expanded and ported to Google Test. Clang sanitizer builds are run during CI.
  • The core library is now fuzz tested.
  • Transmission now uses Sonarcloud, Coverity, LGTM, and clang-tidy static analysis on new code. Several hundred code warnings have been fixed compared to Transmission 3.00.

New Features

  • Support for using BitTorrent v2 torrents and hybrid torrents. (Support for creating v2 and hybrid torrents is slated for an upcoming release.)
  • Users can now set "default" trackers that can be used to announce all public torrents.
  • Newly-added seeds can start immediately and verify pieces on demand, instead of needing a full verify before seeding can begin. (#2626)
  • Added an option to omit potentially-identifying information (e.g. User-Agent and date created) when creating new torrents. (#3452)
  • The Web client has been rewritten and now supports mobile use.
  • When creating new torrents, users can now specify the piece size. (#3768, #3145, #2805)
  • IPv6 blocklists are now supported. (#3835)
  • Beginning with 4.0.0-beta.1, Transmission releases now use semver versioning.
  • Dozens of other new features -- too many to list here! We've been working on this for a year!

What's New Since 4.0.0-beta.3

libtransmission (All Platforms)

  • Added a new setting, torrent-added-verify-mode, to force-verify added torrents. (#4611)
  • Improved handling of webseed servers that do not support Range requests or 206 Partial Content. (#4601)
  • Improved handling of webseed servers that return a content-encoding that was not requested. (#4609)
  • Fixed 4.0.0-beta.3 potential socket leak. (#4616)
  • Fixed 4.0.0-beta.3 regression that failed to detect largefile build flags on 32bit systems. (#4627)
  • Fixed 4.0.0-beta.1 UI bug when removing a tracker from the announce list. (#4635)
  • Improved error handling when receiving corrupt piece data from peers. (#4665)
  • Fixed 4.0.0-beta.1 FTBFS error on CentOS 7. (#4673, #4675)
  • Made small performance improvements in libtransmission. (#4577, #4679)
  • Dropped libiconv dependency in libtransmission. (#4565)
  • Updated 403 RPC error message. (#4567)
  • Bumped libdeflate snapshot to 1.17. (#4596)

macOS Client

  • Fixed two Help menus in macOS. (#4500)
  • Fixed bug that caused magnet links to always be paused when added. (#4528)
  • Fixed 4.0.0-beta.1 regression that broke the Piece View "blinking" when a piece completes. (#4587)
  • Ensured that the preferences window is centered the first time it is shown. (#4659)
  • Fixed 4.0.0-beta.1 regression that incorrectly handled corrupt blocklists. (#4705)
  • Increased the font size in the main window's torrent list. (#4557)
  • Fixed libpsl dependency build issue on macOS. (#4642)

Qt Client

  • Made display order of speed limits consistent between Properties, Details dialogs. (#4677)

GTK Client

  • Fixed 4.0.0-beta.1 regression making it impossible to close "Set location" dialog (GTK 3 only). (#4625)
  • Fixed 4.0.0-beta.2 regression leading to crash during progress bars rendering on some systems. (#4688)

Web Client

  • Fixed 4.0.0-beta.1 potential crash when detecting mime-types. (#4569)
  • Fixed 4.0.0-beta.1 regression that broke file priority buttons in the web client. (#4610)

Daemon

  • Fixed stderr logging issue when running as a systemd unit. (#4612)

transmission-remote

  • Fixed 4.0.0-beta.1 regression when displaying session info. (#4624)
  • Fixed 4.0.0-beta.1 regression when displaying tracker info. (#4633)

Thank You!

Last but certainly not least, a big Thank You to these people who contributed after 4.0.0-beta.3:

Contributions to libtransmission (All Platforms):

Contributions to macOS Client:

Contributions to Qt Client:

Contributions to Web Client:

Contributions to Daemon:

Contributions to transmission-remote:

Contributions to Everything Else:

New Contributors since 3.00

  • @1100101 made their first contribution in #2040
  • @acchang made their first contribution in #3729
  • @anacrolix made their first contribution in #2275
  • @anarcat made their first contribution in #4622
  • @AndreyPavlenko made their first contribution in #585
  • @azy5030 made their first contribution in #2805
  • @BENICHN made their first contribution in #1760
  • @Berbe made their first contribution in #1417
  • @bexnoss made their first contribution in #2201
  • @bkuhls made their first contribution in #2576
  • @buckmelanoma made their first contribution in #2179
  • @BunioFH made their first contribution in #2284
  • @candrews made their first contribution in #2573
  • @carandraug made their first contribution in #3452
  • @cfauchereau made their first contribution in #4500
  • @Chrool made their first contribution in #1447
  • @CodeWitchBella made their first contribution in #2874
  • @cpba made their first contribution in #1487
  • @Dachtire made their first contribution in #3736
  • @dareiff made their first contribution in #3985
  • @dbeinder made their first contribution in #2799
  • @deepwell made their first contribution in #1681
  • @dependabot made their first contribution in #1559
  • @depler made their first contribution in #2066
  • @dmantipov made their first contribution in #3766
  • @evils made their first contribution in #2204
  • @ewtoombs made their first contribution in #3049
  • @FallenWarrior2k made their first contribution in #2721
  • @federicobond made their first contribution in #1441
  • @FluxState made their first contribution in #2586
  • @foobar-d made their first contribution in #2847
  • @fxcoudert made their first contribution in #2234
  • @GaryElshaw made their first contribution in #2779
  • @GermanAizek made their first contribution in #4172
  • @ghazel made their first contribution in #3447
  • @github-actions made their first contribution in #4664
  • @goldsteinn made their first contribution in #2933
  • @guidocella made their first contribution in #1080
  • @guidovranken made their first contribution in #3600
  • @Harm133 made their first contribution in #3835
  • @ile6695 made their first contribution in #2508
  • @IMurzich made their first contribution in #3739
  • @InsaneKnight made their first contribution in #4616
  • @johman10 made their first contribution in #1682
  • @jonasmalacofilho made their first contribution in #2232
  • @JP-Ellis made their first contribution in #2812
  • @kakuhen made their first contribution in #2690
  • @Kobaxidze256 made their first contribution in #3552
  • @koro666 made their first contribution in #1405
  • @kvakvs made their first contribution in #1799
  • @Kwstubbs made their first contribution in #4125
  • @L2501 made their first contribution in #3750
  • @lajp made their first contribution in #2905
  • @Lanzaa made their first contribution in #3380
  • @lucaxvi made their first contribution in #3655
  • @luzpaz made their first contribution in #3743
  • @lvella made their first contribution in #1660
  • @MatanZ made their first contribution in #2761
  • @maxz made their first contribution in #2875
  • @meskobalazs made their first contribution in #3210
  • @mickaelifs made their first contribution in #1602
  • @mlopezfm made their first contribution in #2549
  • @mymedia2 made their first contribution in #1354
  • @Narthorn made their first contribution in #1638
  • @npapke made their first contribution in #1619
  • @Oleg-Chashko made their first contribution in #1923
  • @orbital-mango made their first contribution in #3124
  • @OscarCunningham made their first contribution in #3814
  • @pborzenkov made their first contribution in #1251
  • @pedrinho made their first contribution in #1313
  • @piec made their first contribution in #1328
  • @progiv made their first contribution in #4564
  • @pudymody made their first contribution in #3927
  • @pyrovski made their first contribution in #715
  • @razaqq made their first contribution in #2053
  • @robd003 made their first contribution in #3669
  • @rsekman made their first contribution in #3201
  • @saidinesh5 made their first contribution in #1161
  • @sammarcus made their first contribution in #459
  • @sandervankasteel made their first contribution in #1885
  • @Schlossgeist made their first contribution in #4676
  • @sewe2000 made their first contribution in #3121
  • @shelvacu made their first contribution in #1900
  • @shenhanc78 made their first contribution in #1282
  • @shric made their first contribution in #1326
  • @sio made their first contribution in #893
  • @sir-sigurd made their first contribution in #1040
  • @smrtrfszm made their first contribution in #4363
  • @stefantalpalaru made their first contribution in #4343
  • @subdan made their first contribution in #4245
  • @sweetppro made their first contribution in #2654
  • @tinselcity made their first contribution in #4409
  • @ToKe79 made their first contribution in #2071
  • @trainto made their first contribution in #1489
  • @tylergibbs2 made their first contribution in #1808
  • @uiryuu made their first contribution in #3962
  • @uprt made their first contribution in #857
  • @varesa made their first contribution in #1633
  • @vchimishuk made their first contribution in #1364
  • @ViktorOn made their first contribution in #3710
  • @vuori made their first contribution in #265
  • @wiz78 made their first contribution in #874
  • @wsy2220 made their first contribution in #4684
  • @xavery made their first contribution in #851
  • @Xist12gh made their first contribution in #3756
  • @yarons made their first contribution in #3996

Don't miss a new transmission release

NewReleases is sending notifications on new releases.