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

Showing the top 4 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)
Prowlarr/Prowlarr

Version History

Version Downloads Last updated
2.0.0 456 5/4/2021
2.0.0-alpha.unstable.rev0193 74 4/3/2021
2.0.0-alpha.unstable.rev0192 72 4/2/2021
2.0.0-alpha.unstable.rev0167 76 3/18/2021
2.0.0-alpha.unstable.rev0147 86 3/13/2021
2.0.0-alpha.unstable.rev0132 83 2/25/2021
2.0.0-alpha.unstable.rev0123 79 2/20/2021
2.0.0-alpha.unstable.rev0122 55 2/18/2021
2.0.0-alpha.unstable.rev0112 80 2/17/2021
2.0.0-alpha.unstable.rev0107 66 2/10/2021
2.0.0-alpha.unstable.rev0037 133 12/19/2020
2.0.0-alpha.unstable.rev0031 93 12/18/2020
2.0.0-alpha.unstable.rev0017 105 12/10/2020
2.0.0-alpha.unstable.build1 123 12/7/2020
1.0.29 2,555 2/16/2021
1.0.28 1,399 11/25/2020
1.0.27 162 11/24/2020
1.0.26 156 11/24/2020
1.0.25 270 11/14/2020
1.0.24 1,023 8/12/2020
1.0.23 699 7/6/2020
1.0.22 3,064 5/26/2020
1.0.21 1,757 4/24/2020
1.0.20 667 4/13/2020
1.0.19 14,385 3/27/2020
1.0.18 1,176 3/16/2020
1.0.17 310 3/9/2020
1.0.16 281 3/3/2020
1.0.16-alpha 265 2/5/2020
1.0.15 357 2/2/2020
1.0.14 231 1/30/2020
1.0.13 295 1/30/2020
1.0.12 328 1/16/2020
1.0.11 2,656 1/8/2020
1.0.10 521 12/11/2019
1.0.9 370 12/2/2019
1.0.9-beta 251 11/28/2019
1.0.8 308 11/19/2019
1.0.7 316 11/2/2019
1.0.6 259 11/1/2019
1.0.5 272 11/1/2019
1.0.4 267 10/30/2019
1.0.3 337 10/16/2019
1.0.2 334 9/27/2019
1.0.1 354 9/6/2019
1.0.0 353 9/6/2019
0.99.136-beta 252 9/6/2019
0.99.134-beta 249 9/5/2019
0.99.119-alpha 246 9/4/2019
0.9.0 8,762 6/10/2011