transmission/news/news-4.0.0-beta-1.md

46 KiB

Transmission 4.0.0-beta.1 (2022-08-06)

Highlights

Welcome to the first beta release of Transmission 4.0.0! It's been in active development for over a year and has a huge list of changes -- over 1,000 commits -- since Transmission 3.00. Some of the highlights include:

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

[All Platforms] [macOS Client] [Qt Client] [GTK Client] [Daemon] [Web Client] [Utils] [Everything Else!]

All Platforms

  • 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)

macOS Client

  • Transmission is now a Universal (Apple Silicon and Intel) app.
  • Refresh of the UI to better fit into modern macOS.
  • A new icon designed for Big Sur by Rodger Werner.

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)

Daemon

TODO

Web Client

The web client has been given a major overhaul. (#1476)

User-visible highlights include:

  • Mobile is now fully supported.
  • Added fullscreen support on mobile.
  • Better support for dark mode.
  • Added mime icons to the torrent list.
  • Improved theme consistency across the app.

Maintainer highlights include:

  • Updated code to use ES6 APIs.
  • No longer use jQuery UI.
  • No longer use jQuery.
  • Use Webpack to bundle the Javascript, CSS, and assets together -- the entire bundle size is now 68K gzipped.
  • Added eslint / prettier / stylelint tooling.
  • Uses torrent-get's 'table' mode for more efficient RPC calls.

Utils

  • Allow webseed URLs when creating torrents in transmission-create
  • Display more progress information during torrent creation in transmission-create (#1405)

Everything Else!

Thank You

Last but certainly not least, a big Thank You to the people who contributed to this release: acchang, Ali, Andrey, Balázs Meskó, beizmos, Berbe, bexnoss, bkuhls, buckmelanoma, Carles Pastor Badosa, Charles Kerr, Chris Young, Chrool, Cœur, Colin B, Craig Andrews, C.W. Betts, Dachtire, Daniel Kamil Kozar, Dan Walters, David Beinder, David Miguel Susano Pinto, dependabot[bot], depler, Dinesh Manajipet, Dmitry Antipov, Dmitry Serov, Dmytro Lytovchenko, dubhater, Dzmitry Neviadomski, Esa Varemo, evils, ewtoombs, FallenWarrior2k, Federico Bond, FluxState, Frank Aurich, FX Coudert, Gary Elshaw, goldsteinn, Greg Hazel, Guido Cella, Guido Vranken, Hakjoon Sim, Han Shen, Harm133, Ilkka Kallioniemi, IMurzich, Isabella Skořepová, Jelle van der Waa, Johan, Jonas Malaco, JP-Ellis, kakuhen, Kirill Ovchinnikov, Kobaxidze256, Koro, L2501, LaserEyess, Lucas Clemente Vella, lucaxvi, Luukas Pörtfors, luzpaz, Mark Deepwell, Markus Amalthea Magnuson, Matan Ziv-Av, Matt Joiner, maxz, Max Zettlmeißl, Michael Lopez, Michal Kubiak, mickaelifs, Mike Gelfand, Mike Gilbert, Mitchell Livingston, Nathan Benichou, Nicholas Guriev, Noobsai, Norbert Papke, Oleg Chashko, orbital-mango, OscarCunningham, Pavel Borzenkov, Pedro Scarapicchia Junior, Peter Bailey, Petrprogs, Pierre Carru, qu1ck, razaq, RobCrowston, Robert Palmer, Robin Seth Ekman, Rosen Penev, Sam Marcus, Sander van Kasteel, Sergey Fedoseev, sewe2000, shelvacu, Simone Tellini, Stefan Talpalaru, SweetPPro, Tomáš Kelemen, Tyler, Viacheslav Chimishuk, Vik, Vincent Vinel, Vitaly Potyarkin, vuori, wiz78, and Xist12gh!

These release notes were compiled manually. Since 4.0.0 has been in development for so long, this has been a time-consuming and error-prone process. If you contributed to Transmission and aren't listed here or below, we apologise in advance!

Notable Code Contributions

Core contributions (libtransmission):

  • 1100101 (Frank Aurich):
    • Fix overflow bugs on 32bit platforms with torrents larger than 4GB (#2391, #2378)
    • Fix RPC 'table' mode not being properly activated (#2058)
    • Fix RPC response payload when removing torrents (#2040)
  • anacrolix (Matt Joiner):
    • Reject cancels when fast extension enabled (#2275)
  • AndreyPavlenko (Andrey Pavlenko):
    • use new environment variable TR_CURL_PROXY_SSL_NO_VERIFY (#2622)
  • lajp (Luukas Pörtfors):
    • Add renaming support in transmission-remote (#2905)
  • AndreyPavlenko (Andrey Pavlenko):
    • Use android logger on Android (#585)
  • bkkuhls:
    • Fix cross-compile build error (#2576)
  • carandraug (David Miguel Susano Pinto):
    • Added transmission-create option to omit potentially-identifying information, such as User-Agent and date created, when creating torrents. (#3452)
  • cfpp2p:
    • add an option to run a script when a torrent is added (#1896)
  • Chrool
    • Make anti-brute force RPC server configurable (#1447)
  • clickyotomy (Srinidhi Kaushik):
    • magnet link improvements incl. regression tests for invalid magnets (#2483)
  • dbeinder (David Beinder):
    • Fix unreleased regression that broke RPC bitfield values (#2768)
    • Return correct bitfield when fully downloaded (#2799)
  • Dan Walters:
    • Apply optional peer socket TOS to UDP sockets (#1043)
  • deepwell (Mark Deepwell):
  • dgcampea:
    • support DSCP classes in socket iptos (#2594)
  • Dmitry Antipov:
    • C++ify UDP core object (#3794)
    • Fix warning issued during LTO builds (#3766)
  • goldsteinn:
    • Performance improvements to bitfield.cc (#2933, #2950)
  • guidovranken
    • Fix out-of-bounds read in torrent parsing (#3600)
  • Harm33:
    • Blocklists now support IPv6 (#3835)
  • Ivella (Lucas Clemente Vella):
    • Implement latest version of BEP-7 for HTTP requests (#1661)
  • ile6695 (Ilkka Kallioniemi):
    • Fix filename reserved prefix detection. (#3541)
    • Add more decimals for low wratios (#2508)
    • Add regression tests for tr_strlcpy (#2679)
  • johman10 (Johan):
    • Add total disk space to free-space RPC request (#1682)
  • JP-Ellis (JP Ellis):
    • Fix detection of PSL library (#2812)
  • kakuhen:
    • Clarify documentation on torrent-add result on duplicate torrents (#2690)
  • kvakvs (Dmytro Lytovchenko):
  • L2501:
    • Add recognition for more Peer IDs of other clients (#3750, #3838)
  • lanzaa (Colin B):
    • Add basic support for BitTorrent v2 hashes (#3380, #3388a
    • Support single-file hybrid torrents (#3446)
  • LaserEyess:
    • Add labels to torrent-add RPC method (#2539)
    • Support binding RPC to a Unix socket (#2574)
    • Add bind-address-ipv4 to UPnP (#845)
  • MatanZ (Matan Ziv-Av):
  • mhadam (Michael Hadam):
    • Add support for torrent-get calls with the key percentComplete (#2615)
  • miickaelifs:
    • NAT-PMP private/public port and lifetime fix (#1602)
  • narthorn:
    • Don't follow symlinks when removing junk files (#1638)
  • neheb (Rosen Penev):
    • fix runtime with wolfSSL and fastmath (#1950)
  • noobsai:
    • Fix building for XFS (#2192)
  • npapke (Norbert Papke) and cfpp2p:
    • Fix "IPv4 DHT announce failed" error message (#1619)
  • pyrovski (Peter Bailey):
    • Allow stopping torrents in verification states (#715)
  • qu1ck:
    • Add label support to the core (#822, #868)
    • Fix unreleased fields handling regression in RPC (#2972)
    • Fix peer port change in session rpc (#3573)
  • razaq:
    • add TR_TORRENT_TRACKERS env variable to script call (#2053)
  • RobCrowston (Rob Crowston):
    • Add in-kernel file copying for several platforms. (#1092)
    • Allow the OS to set the size of the listen queue connection backlog. (#922)
    • Refactor tr_torrentFindFile2() (#921)
    • Don't set thet path attribute when setting a cookie. (#1893)
  • sandervankasteel (Sander van Kasteel):
    • Added primitive CORS header support (#1885)
  • sio (Vitaly Potyarkin):
    • Lift 1024 open files limit (switch to curl polling API) (#893)
  • stefantalpalaru (Ștefan Talpalaru):
    • Add support for default public trackers (#2668)
  • TimoPtr:
    • Add support for running a script when done seeding (#2621)
  • uprt (Kirill):
    • Replace NULL back with nullptr (mistake after auto-rebase) (#1933)
    • Slashes fixes (#857)
  • Xist12gh:
    • Add fallback for EXDEV error on Linux kernel 5.18 (#3756)
  • vchimishuk (Viacheslav Chimishuk):
    • Add announce-ip and announce-ip-enabled parameters. (#3461)
    • Fix broken tr_sessionSetPeerPortRandom() function. (#3569)
    • Fix IPv6 socket binding interface. (#3692)
  • vjunk:
    • Add support for adding torrents by raw hash values (#2608)
  • vuori:
    • Fixed wrong ipv6 addr used in announces. (#265)

macOS Client code contributions:

  • alimony ((Markus Amalthea Magnuson):
    • Added ability to filter on error status. (#19)
  • azy5030 (Ali):
    • Add ability to change piece size during torrent creation (#2416)
  • Coeur (Cœur):
  • DevilDimon (Dmitry Serov):
    • Optimize framework imports (#3323)
    • Use standard macOS toolbar buttons (#3356)
    • macOS client code modernization (#2453, #509)
  • federicobond (Federico Bond):
    • Replace deprecated NSRunAlertPanel call in Controller.m (#1441)
  • floppym (Mike Gilbert):
    • Restore support for the INSTALL_LIB option (#1756)
  • fxcoudert (FX Coudert):
    • Update deprecated macOS code (#3330)
    • Update links in macOS credits (#3329)
    • Improve crash report debug information (#2471)
    • Change accent color to match macOS red choice
    • Mac client uses freed memory (#2234)
    • macOS: remove quitting badge (#2495)
    • fix build warnings (#3174)
  • GaryElshaw (Gary Elshaw):
  • MaddTheSane (Charles W. Betts):
    • Move private interfaces to interface extensions (#932)
    • macOS: use SDK's libCurl. (#1542)
  • maxz (Max Zettlmeißl):
  • nevack (Dzmitry Neviadomski):
    • Revamp Toolbar Segments (#3512)
    • Use NSAlert APIs to show alert suppression checkbox (#3360)
    • Apply ObjC modernization (#3358)
    • Hide NSPopover arrow for Torrent options (#3294)
    • Fix group auto-assigning based on NSPredicate (#3289)
    • Xcode wrangling (#2141, #3266, #3267)
    • Update info window (#2269)
    • Update blocklist downloader (#2101, #2191)
    • Fix macOS client deprecation warnings (#2038, #2074, #2090, #2113)
    • Fix CMake + Ninja builds on macOS (#2036)
    • Update Preferences window sizing for Russian locale (#3291)
    • Fix global popover clipping (#3264)
    • Use DDG favicons service and migrate to NSURLSession #3270)
  • Oleg-Chashko (Oleg Chashko):
  • rsekman (Robin Seth Ekman):
    • fix daemon invocation regression: deprecated --log-error -> --log-level=error (#3201)
  • SweetPPro SweetPPro:
    • Unify the margin between headers and content on the Activity tab and the Options tab in the Info Window (#3522)
    • macOS layout improvements (#3326, #3472, #3497, #3559, #3604)
    • macOS disable green maximize button on Inspector window (#3563)
    • OS fix clipping and crashing on the Info Inspector Options tab (#3473)
    • macOS internationalization of xibs (#3409)
    • Use the default toolbar button size on macOS 11+ (#3433)
    • Remove gradient from PiecesView (#3342)
    • macOS fix quicklook in the Torrent Inspector files view (#3321)
    • macOS fullscreen and autosize fixes (#3315)
    • macOS client icon improvements (#3221, #3113
    • Update macOS group indicators (#3183)
    • Fullscreen mode fixes (#195)
    • Fix for editing magnet links' tracker lists (#2793)
    • Fix some window drawing issues #3278)
    • Replace Groups indicators with dots. #3268)
    • Fix a number of UI render issues in the torrent creator window #3205)
    • Magnet link improvements (#3205, #2702)
  • wiz78 (Simone Tellini):
    • Disable App Nap. (#874)
  • xavery (Daniel Kamil Kozar):
    • Add support for creating torrents with a source flag (#443)

GTK Client code contributions:

  • bexnoss:
    • Fix conflicting hotkeys (#2201, #3720)
    • Remember 4 recent relocate folders (#3691)
  • cpba (Carles Pastor Badosa):
    • Add content_rating to appdata (#1487)
  • jonasmalacofilho (Jonas Malaco):
    • Accept dropping URLs from browsers onto the main window (#2232)
  • meskoabalazs (Balázs Meskó):
    • Fix xgettext markup issues (#3210)
  • noobsai:
    • Fixed showing popup menu on RMB at tray icon (#1210)
    • Use correct variable for uploading speed (#3560)
  • okias (David Heidelberg):
    • Use metainfo folder instead of appdata (#2624)
  • orbital-mango:
    • Allow piece size selection during torrent creation (#3771)
    • Add missing accelerators in File menu (#3213)
    • Add piece size selection when creating torrents (#3145)
    • Show torrent-added date/time in Torrent Details dialog (#3124)
  • sir-sigurd (Sergey Fedoseev):
    • Add Sort by Queue menu item to popup menu (#1040)
  • stefantalpalaru (Ștefan Talpalaru):
    • Add support for default public trackers (#2668)
  • TimoPtr (Timothy Nibeaudeau):
    • Add support for running a script when done seeding (#2621)
  • xavery (Daniel Kamil Kozar):
    • Add a "Start Now" action for newly added torrent notifications (#849)
    • Add support for creating torrents with a source flag (#443)
    • Remove unnecessary "id" member of TrNotification in gtk/notify.c (#851)
  • lucaxvi
    • Use symbolic icons in status bar (#3655)

Qt Client code contributions:

  • buckmelanoma:
    • Set stock icon for speed, options and statistics buttons in Qt (#2179)
  • dubhater:
    • Move icon after "Alternative Speed Limits" label (#503)
    • Use file selector in Set Location if session is local (#502)
    • Qt: Add tooltips for Options, Statistics buttons (#501)
  • GaryElshaw (Gary Elshaw):
  • IMurzich:
    • Fix a progressBar direction for QT 5.15 for paused torrents (#3739)
  • OscarCunningham:
    • Fix "sort by progress" for seeding torrents (#3814)
  • saidinesh5 (Dinesh Manajipet):
    • Feature: Support Batch Adding Tracker Urls in Qt UI (#1161)
  • sewe2000 (Seweryn Pajor):
    • Show torrent-added date/time in Torrent Details dialog (#3121)
  • stefantalpalaru (Ștefan Talpalaru):
    • Add support for default public trackers (#2668)
  • TimoPtr:
    • Add support for running a script when done seeding (#2621)
  • xavery (Daniel Kamil Kozar):
    • Add a "Start Now" action for newly added torrent notifications (#849)
    • Add support for creating torrents with a source flag (#443)
  • varesa (Esa Varemo):
    • Add the option of auto-adding URLs from the clipboard on window focus (#1633)

Web Client code contributions:

  • 1100101 (Frank Aurich):
    • Fix display of size values in web interface (#2703)
  • CodeWitchBella (Isabella Skořepová):
    • Add magnet link support to transmission web (#2874)
  • deepwell (Mark Deepwell):
    • Fix webpack start dev server (#2579)
  • jfredrickson (Jeff Fredrickson):
    • Allow decimal values in seedRatioLimit input (#2618)
  • moben (Benedikt McMullin):
    • Fix sorting of renamed torrents by name (#1892)
  • stefantalpalaru (Ștefan Talpalaru):
    • Add support for default public trackers (#2668)
  • trainto (Hakjoon Sim):
    • CSS fixes (#2609)
    • Fix overflow menu should be closed when click it once again (#1485)
  • ToKe79 (Tomáš Kelemen):
    • Add support for incomplete-dir (#2183)
    • Add option to alter the download queue (#2071)
  • vchimishuk (Viacheslav Chimishuk):
    • Fix broken state and labels filter (#3311)
    • Add label support (#2596, #1406, #3311)
    • Fix broken Cancel and Rename buttons on RenameDialog. (#2577)
  • xavery (Daniel Kamil Kozar):
    • Add support for creating torrents with a source flag (#443)

transmission-daemon code contributions:

  • candrews (Craig Andrews):
    • Deny memory wx in transmission-daemon.service (#2573)
  • catadropa:
    • Small fixes to i18n markup formatting (#2901)
  • ewtoombs:
    • Wrote a guide on headless usage. (#3049)
  • Dmitry Antipov:
    • C++ify transmission-daemon code (#3767, #3815)
    • Use signalfd-based signal handling if available (#3778)
    • Do not fsync() log messages when they are written to a tty (#3785)
  • FallenWarrior2k:
    • Delay start of daemon systemd service until network is configured (#2721)
  • jelly (Jelle van der Waa):
    • Add ProtectSystem and PrivateTmp to systemd service (#1452)
  • piec (Pierre Carru):
    • add magnet file support to watchdir (#1328)
  • rsekman (Robin Seth Ekman):
    • fix daemon invocation regression: deprecated --log-error -> --log-level=error (#3201)
  • timtas (Tim Tassonis):
    • add pid-file to transmission-daemon manpage (#2784)

utils code contributions:

  • 1100101 (Frank Aurich):
    • Fix size display for torrents larger than 4GB (#2029)
  • BunioFH (Michal Kubiak):
    • Allow multiple calls to --tracker-add/or --tracker-remove in transmission-remote (#2284)
  • Kobaxidze256:
    • Add a new flag in transmission-remote for connecting through a Unix domain socket (#3552)
  • lajp (Luukas Pörtfors):
    • Add renaming support in transmission-remote (#2905)
  • LaserEyess:
    • Add option to dump RPC responses as JSON (#3819)
  • MatanZ (Matan Ziv-Av):
    • Filtering torrents in transmission-remote (#3125)
    • Allow control of transmission-show output (#2825)
  • orbital-mango:
    • transmission-edit can now edit the torrent 'source' tag (#3760)
  • TimoPtr:
    • Add seeding-done script to transmission-remote (#2621)
  • vchimishuk (Viacheslav Chimishuk):
    • Fix Labels section in transmission-remote output. (#2597)
  • xavery (Daniel Kamil Kozar):
    • Add support for creating torrents with a source flag (#443)

Documentation