MonoTorrent 2.0.0

MonoTorrent is a cross platform and open source implementation of the BitTorrent protocol. It supports many advanced features such as Encryption, DHT, Peer Exchange, Web Seeding and Magnet Links.
Notable features include:
-Encryption
-Dht
-Peer Exchange (uTorrent style)
-Local Peer Discovery
-Web Seeding (getright style)
-Magnet Links / Metadata download
-IPV6
-FAST Extensions
-Sparse files (NTFS file system)
-Multi-tracker torrents
-Compact tracker responses
-IP Address white listing / black listing
-Fast Resume
-Initial Seeding (super seeding)
-Selective downloading
-Prioritised downloading
-Full bittorrent tracker
-Dynamic request queue size
-Memory Cache
-Endgame mode
-Per torrent and global rate limiting
-Individual file relocation

Install-Package MonoTorrent -Version 2.0.0
dotnet add package MonoTorrent --version 2.0.0
<PackageReference Include="MonoTorrent" Version="2.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MonoTorrent --version 2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: MonoTorrent, 2.0.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install MonoTorrent as a Cake Addin
#addin nuget:?package=MonoTorrent&version=2.0.0

// Install MonoTorrent as a Cake Tool
#tool nuget:?package=MonoTorrent&version=2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

General

This is the first stable release of the 2.0 series. There are far too many changes between 1.x and 2.0 to list, but suffice it to say there have been numerous bug fixes and performance improvements across the board. In particular, there have been substantial improvements to the Streaming mode.

If you were using StreamProvider in past releases, the new approach is to use ClientEngine.AddStreamingAsync which will return a TorrentManager configured for streaming. Once you start the download you can create a stream to any of the files in the torrent using TorrentManager.StreamProvider, just like before.

MonoTorrent now uses an in-memory cache by default, which reduces the number of disk operations substantially. This feature works in tandem with incremental hashing, which means that even if some blocks in a given piece arrive out-of-order, it is still possible to hash all blocks before writing them to disk, eliminating the need to re-read them later.

Finally, the last big features are around how state is saved/restored. FastResume data for a torrent will, by default, be saved every 20-30 seconds. In the event of a crash you will be able to resume the torrent without having to run a complete hash check. This can be controlled by EngineSettings.FastResumeMode if you want to use one of the other behaviours. Additionally, you can serialize a ClientEngine to disk, and restore it, using ClientEngine.SaveStateAsync and the static method ClientEngine.RestoreStateAsync. This should be invoked just before your application closes, or whenever is appropriate. It will flush a fresh copy of fast resume data to disk for all loaded torrent, as well as capturing all mutable state in a TorrentManager so it can be restored later. For example, ITorrentFile.Priority will be maintained, and so will the paths where files are stored if you have used TorrentManager.MoveFileAsync.

General

This is the first stable release of the 2.0 series. There are far too many changes between 1.x and 2.0 to list, but suffice it to say there have been numerous bug fixes and performance improvements across the board. In particular, there have been substantial improvements to the Streaming mode.

If you were using StreamProvider in past releases, the new approach is to use ClientEngine.AddStreamingAsync which will return a TorrentManager configured for streaming. Once you start the download you can create a stream to any of the files in the torrent using TorrentManager.StreamProvider, just like before.

MonoTorrent now uses an in-memory cache by default, which reduces the number of disk operations substantially. This feature works in tandem with incremental hashing, which means that even if some blocks in a given piece arrive out-of-order, it is still possible to hash all blocks before writing them to disk, eliminating the need to re-read them later.

Finally, the last big features are around how state is saved/restored. FastResume data for a torrent will, by default, be saved every 20-30 seconds. In the event of a crash you will be able to resume the torrent without having to run a complete hash check. This can be controlled by EngineSettings.FastResumeMode if you want to use one of the other behaviours. Additionally, you can serialize a ClientEngine to disk, and restore it, using ClientEngine.SaveStateAsync and the static method ClientEngine.RestoreStateAsync. This should be invoked just before your application closes, or whenever is appropriate. It will flush a fresh copy of fast resume data to disk for all loaded torrent, as well as capturing all mutable state in a TorrentManager so it can be restored later. For example, ITorrentFile.Priority will be maintained, and so will the paths where files are stored if you have used TorrentManager.MoveFileAsync.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on MonoTorrent:

Package Downloads
H.Runners.TorrentRunner
Allows you to download torrents.
BitTorrentStorage
Bit Torrent Storage

GitHub repositories (5)

Showing the top 5 popular GitHub repositories that depend on MonoTorrent:

Repository Stars
Radarr/Radarr
A fork of Sonarr to work with movies à la Couchpotato.
Lidarr/Lidarr
Looks and smells like Sonarr but made for music.
Readarr/Readarr
Book Manager and Automation (Sonarr for Ebooks)
goatcorp/FFXIVQuickLauncher
Custom launcher for Final Fantasy XIV
Prowlarr/Prowlarr

Version History

Version Downloads Last updated
2.0.0 1,752 5/4/2021
2.0.0-alpha.unstable.rev0193 85 4/3/2021
2.0.0-alpha.unstable.rev0192 78 4/2/2021
2.0.0-alpha.unstable.rev0167 81 3/18/2021
2.0.0-alpha.unstable.rev0147 91 3/13/2021
2.0.0-alpha.unstable.rev0132 88 2/25/2021
2.0.0-alpha.unstable.rev0123 85 2/20/2021
2.0.0-alpha.unstable.rev0122 60 2/18/2021
2.0.0-alpha.unstable.rev0112 85 2/17/2021
2.0.0-alpha.unstable.rev0107 71 2/10/2021
2.0.0-alpha.unstable.rev0037 141 12/19/2020
2.0.0-alpha.unstable.rev0031 98 12/18/2020
2.0.0-alpha.unstable.rev0017 110 12/10/2020
2.0.0-alpha.unstable.build1 132 12/7/2020
1.0.29 4,789 2/16/2021
1.0.28 1,445 11/25/2020
1.0.27 175 11/24/2020
1.0.26 168 11/24/2020
1.0.25 282 11/14/2020
1.0.24 1,056 8/12/2020
1.0.23 737 7/6/2020
1.0.22 3,098 5/26/2020
1.0.21 1,770 4/24/2020
1.0.20 681 4/13/2020
1.0.19 15,924 3/27/2020
1.0.18 1,191 3/16/2020
1.0.17 322 3/9/2020
1.0.16 293 3/3/2020
1.0.16-alpha 273 2/5/2020
1.0.15 375 2/2/2020
1.0.14 245 1/30/2020
1.0.13 308 1/30/2020
1.0.12 341 1/16/2020
1.0.11 2,670 1/8/2020
1.0.10 536 12/11/2019
1.0.9 386 12/2/2019
1.0.9-beta 259 11/28/2019
1.0.8 322 11/19/2019
1.0.7 331 11/2/2019
1.0.6 272 11/1/2019
1.0.5 286 11/1/2019
1.0.4 281 10/30/2019
1.0.3 351 10/16/2019
1.0.2 348 9/27/2019
1.0.1 368 9/6/2019
1.0.0 380 9/6/2019
0.99.136-beta 261 9/6/2019
0.99.134-beta 258 9/5/2019
0.99.119-alpha 254 9/4/2019
0.9.0 8,804 6/10/2011