Skip to content


Repository files navigation


Ditto is (going to be) a BitTorrent client written in C# with .NET Core by Jeremy Banks and Chris Ronning (see LICENSE).



  • Ditto.CLInterface
    The basic command-line user interface we're initially experimenting with.
  • Ditto.BitTorrent.Client
    The high-level programming interface for using BitTorrent, encapsulating all of the details.
  • Ditto.Common
    Utilities and simple data types that shared used by everthing else.
  • Ditto.PeerProtocol
    Implemenetation of BitTorrent's TCP peer protocol.
  • Ditto.DHT
    Client/read-only implementation BitTorrent's BEP-5 UDP Distributed Hash Table protocol.
  • Ditto.Tests
    Our tests.

Development Tips

Using dotnet in the shell (maybe with Visual Studio Code)

./install will install our dependencies (locally).

./ditto will build and run our main command-line application. Run it to see a description of available subcommands.

test/all runs whatever tests we have.

test-peer/start and test-peer/stop will start and stop our test rTorrent Docker image using data from ./test-peer/state/. Our example/test programs may require this peer or use it for bootstrapping. You can control it directly through the web interface at http://localhost:8042. If you want to commit updated data/state, you need to test-peer/stop && rm -rf ./test-peer/state/ && mv ./test-peer/active-state/ ./test-peer/state/.

Using Visual Studio

Since this assumes Windows, you won't be able to use the above commands by default. I suggest using Docker Toolbox to get a Docker instance running. In the Docker Command Prompt, copy and paste the commands from .\test-peer\start. This should get you set up with our test rTorrent/ruTorrent Docker image, using data from .\test-peer\data\. Once this is set up, I recommend Kitematic, a nice GUI that will let you start and stop the Docker image, manage ports, etc.

Beyond that, you'll want to set up your Docker instance's IP Address as a command line argument in Visual Studio. Once you do that, you can run it like normal or with the debugger without ill effect.

BitTorrent References