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 (3)

Showing the top 3 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)

Version History

Version Downloads Last updated
2.0.0 125 5/4/2021
2.0.0-alpha.unstable.rev0193 58 4/3/2021
2.0.0-alpha.unstable.rev0192 58 4/2/2021
2.0.0-alpha.unstable.rev0167 64 3/18/2021
2.0.0-alpha.unstable.rev0147 74 3/13/2021
2.0.0-alpha.unstable.rev0132 75 2/25/2021
2.0.0-alpha.unstable.rev0123 72 2/20/2021
2.0.0-alpha.unstable.rev0122 48 2/18/2021
2.0.0-alpha.unstable.rev0112 73 2/17/2021
2.0.0-alpha.unstable.rev0107 59 2/10/2021
2.0.0-alpha.unstable.rev0037 126 12/19/2020
2.0.0-alpha.unstable.rev0031 86 12/18/2020
2.0.0-alpha.unstable.rev0017 99 12/10/2020
2.0.0-alpha.unstable.build1 117 12/7/2020
1.0.29 1,624 2/16/2021
1.0.28 1,220 11/25/2020
1.0.27 140 11/24/2020
1.0.26 134 11/24/2020
1.0.25 238 11/14/2020
1.0.24 994 8/12/2020
1.0.23 673 7/6/2020
1.0.22 3,030 5/26/2020
1.0.21 1,731 4/24/2020
1.0.20 647 4/13/2020
1.0.19 13,674 3/27/2020
1.0.18 1,152 3/16/2020
1.0.17 289 3/9/2020
1.0.16 260 3/3/2020
1.0.16-alpha 244 2/5/2020
1.0.15 336 2/2/2020
1.0.14 211 1/30/2020
1.0.13 275 1/30/2020
1.0.12 308 1/16/2020
1.0.11 2,636 1/8/2020
1.0.10 499 12/11/2019
1.0.9 349 12/2/2019
1.0.9-beta 230 11/28/2019
1.0.8 287 11/19/2019
1.0.7 294 11/2/2019
1.0.6 238 11/1/2019
1.0.5 251 11/1/2019
1.0.4 245 10/30/2019
1.0.3 316 10/16/2019
1.0.2 311 9/27/2019
1.0.1 330 9/6/2019
1.0.0 327 9/6/2019
0.99.136-beta 232 9/6/2019
0.99.134-beta 228 9/5/2019
0.99.119-alpha 226 9/4/2019
0.9.0 8,711 6/10/2011