Full-featured BitTorrent client package and utilities

bittorrent, go, magnet-link, p2p, streaming, torrent, tracker
go get



Join the chat at Build Status GoDoc Coverage

This repository implements BitTorrent-related packages and command-line utilities in Go. The emphasis is on use as a library from other projects. It's been used 24/7 in production by a downstream, private service since late 2014.

There is support for protocol encryption, DHT, PEX, uTP, and various extensions. See the package documentation for a more complete list. There are several data storage backends provided: blob, file, and mmap, and you can write your own, such as to store data on S3, or in a database. You can use the provided binaries in ./cmd, or use torrent as a library for your own applications.

Many of the sub-packages can be used for other purposes: dht, bencode, and tracker, in particular.


Install the library package with go get, or the provided cmds with go get

Library example

There is a small example in the package documentation.

Other projects using Torrent


Here I'll describe what some of the provided commands in ./cmd do.

Note that the godo command which is invoked in the following examples builds and executes a Go import path, like go run. It's easier to use this convention than to spell out the install/invoke cycle for every single example.


Downloads torrents from the command-line.

$ go get
$ torrent 'magnet:?xt=urn:btih:KRWPCX3SJUM4IMM4YF5RPHL6ANPYTQPU'
2015/04/01 02:08:20 main.go:137: downloaded ALL the torrents
$ md5sum ubuntu-14.04.2-desktop-amd64.iso
1b305d585b1918f297164add46784116  ubuntu-14.04.2-desktop-amd64.iso
$ echo such amaze


torrentfs mounts a FUSE filesystem at -mountDir. The contents are the torrents described by the torrent files and magnet links at -torrentPath. Data for read requests is fetched only as required from the torrent network, and stored at -downloadDir.

$ mkdir mnt torrents
$ godo -mountDir mnt -torrentPath torrents &
$ cd torrents
$ wget
$ cd ..
$ ls mnt
$ pv mnt/ubuntu-14.04.2-desktop-amd64.iso | md5sum
996MB 0:04:40 [3.55MB/s] [========================================>] 100%
1b305d585b1918f297164add46784116  -


Creates a magnet link from a torrent file. Note the extracted trackers, display name, and info hash.

$ godo < ubuntu-14.04.2-desktop-amd64.iso.torrent


Pings DHT nodes with the given network addresses.

$ godo ./cmd/dht-ping
2015/04/01 17:21:23 main.go:33: dht server on [::]:60058
32f54e697351ff4aec29cdbaabf2fbe3467cc267 ( 648.218621ms
ebff36697351ff4aec29cdbaabf2fbe3467cc267 ( 873.864706ms
2/2 responses (100.000000%)