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-beta.1 includes over 300 new community commits (see the Thank You section below for a list) and is welcoming 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 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!
Other Changes:
Fix small scrape/announce packet size that could trip SYN flood detection on some systems (#3236)
Remove the 1024 open files limit previously required by how libcurl was used (#893)
Add configurable anti-brute force settings (#1447)
Fetch metadata of stopped magnets (#1080)
Stop logging excessive error messages after they repeat too many times. In some cases, repetitive messages had been spamming syslogs. (#2756)
Qt Client:
Support both Qt5 and Qt6 (#2069)
Nicer error handling when duplicate torrents are added (#1410)
More efficient use of RPC (#1234, #1322, #1333)
More efficient state updates (#1334, #1335, #1336, #1428, #1430, #1432, #1433, #1234)
Slightly more efficient RPC requests (#1373)
Better caching of tracker favicons (#1402)
Fix memory leaks (#1378)
Fix FreeSpaceLabel crash (#1604)
Add remote server version info in the About dialog (#1603)
Support TR_RPC_VERBOSE environment variable for debugging RPC calls (#1435)
Allow filtering by info hash (#1763)
GTK Client:
Ported to GTKMM
When creating new torrents, their piece size can be specified.
The File menu now incorporates normal quick key operations.
The Details dialog now includes the date a torrent was added.
The Details dialog now renders large file lists faster. ([#2992](
https://github.com/transmission/transmission/pull/2992], #2993
Better i18n of phrases for past, present, and future tense (#3214)