• Stars
    star
    5,494
  • Rank 7,479 (Top 0.2 %)
  • Language
    Go
  • License
    Mozilla Public Li...
  • Created almost 10 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Full-featured BitTorrent client package and utilities

torrent

PkgGoDev

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 downstream services since late 2014. The implementation was specifically created to explore Go's concurrency capabilities, and to include the ability to stream data directly from the BitTorrent network. To this end it supports seeking, readaheads and other features exposing torrents and their files with the various Go idiomatic io package interfaces. This is also demonstrated through torrentfs.

There is support for protocol encryption, DHT, PEX, uTP, and various extensions. There are several data storage backends provided: blob, file, bolt, mmap, and sqlite, to name a few. You can write your own to store data for example on S3, or in a database.

Some noteworthy package dependencies that can be used for other purposes include:

Installation

Install the library package with go get github.com/anacrolix/torrent, or the provided cmds with go install github.com/anacrolix/torrent/cmd/...@latest.

Library examples

There are some small examples in the package documentation.

Mentions

Downstream projects

There are several web-frontends, sites, Android clients, storage backends and supporting services among the known public projects:

  • cove: Personal torrent browser with streaming, DHT search, video transcoding and casting.
  • confluence: torrent client as a HTTP service
  • Gopeed: Gopeed (full name Go Speed), a high-speed downloader developed by Golang + Flutter, supports (HTTP, BitTorrent, Magnet) protocol, and supports all platforms.
  • Erigon: an implementation of Ethereum (execution layer with embeddable consensus layer), on the efficiency frontier.
  • exatorrent: Elegant self-hostable torrent client
  • bitmagnet: A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration.
  • TorrServer: Torrent streaming server over http
  • distribyted: Distribyted is an alternative torrent client. It can expose torrent files as a standard FUSE, webDAV or HTTP endpoint and download them on demand, allowing random reads using a fixed amount of disk space.
  • Mangayomi: Cross-platform app that allows users to read manga and stream anime from a variety of sources including BitTorrent.
  • Simple Torrent: self-hosted HTTP remote torrent client
  • autobrr: autobrr redefines download automation for torrents and Usenet, drawing inspiration from tools like trackarr, autodl-irssi, and flexget.
  • mabel: Fancy BitTorrent client for the terminal
  • webtor.io: free cloud BitTorrent-client
  • Android Torrent Client: Android torrent client
  • libtorrent: gomobile wrapper
  • Go-PeersToHTTP: Simple torrent proxy to http stream controlled over REST-like api
  • CortexFoundation/torrentfs: Independent HTTP service for file seeding and P2P file system of cortex full node
  • Torrent WebDAV Client: Automatic torrent download, streaming, WebDAV server and client.
  • goTorrent: torrenting server with a React web frontend
  • Go Peerflix: Start watching the movie while your torrent is still downloading!
  • hTorrent: HTTP to BitTorrent gateway with seeking support.
  • Remote-Torrent: Download Remotely and Retrieve Files Over HTTP
  • Trickl: torrent client for android
  • ANT-Downloader: ANT Downloader is a BitTorrent Client developed by golang, angular 7, and electron
  • Elementum (up to version 0.0.71)

Help

Communication about the project is primarily through Discussions and the issue tracker.

Command packages

Here I'll describe what some of the packages in ./cmd do. See installation to make them available.

torrent

torrent download

Downloads torrents from the command-line.

$ torrent download 'magnet:?xt=urn:btih:KRWPCX3SJUM4IMM4YF5RPHL6ANPYTQPU'
... lots of jibber jabber ...
downloading "ubuntu-14.04.2-desktop-amd64.iso": 1.0 GB/1.0 GB, 1989/1992 pieces completed (1 partial)
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
wow

torrent metainfo magnet

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

$ torrent metainfo testdata/debian-10.8.0-amd64-netinst.iso.torrent magnet
magnet:?xt=urn:btih:4090c3c2a394a49974dfbbf2ce7ad0db3cdeddd7&dn=debian-10.8.0-amd64-netinst.iso&tr=http%3A%2F%2Fbttracker.debian.org%3A6969%2Fannounce

See torrent metainfo --help for other metainfo related commands.

torrentfs

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

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

More Repositories

1

dms

A UPnP DLNA Digital Media Server that includes basic video transcoding. Tested on a Panasonic Viera television, several Android UPnP apps, and Chromecast.
Go
610
star
2

dht

dht is used by anacrolix/torrent, and is intended for use as a library in other projects both torrent related and otherwise
Go
306
star
3

confluence

Torrent client as a HTTP service
Go
232
star
4

utp

Use anacrolix/go-libutp instead
Go
173
star
5

go-libutp

Go wrapper of libutp reference uTP C implementation
C++
88
star
6

missinggo

Stuff that's missing in Go stdlib, or hasn't made it into its own repo.
Go
83
star
7

possum

concurrent disk-backed cache supporting efficient direct file I/O, transactions, and snapshots using file cloning and sparse files
Rust
76
star
8

stm

Software Transactional Memory in Go
Go
74
star
9

godo

godo is an improved `go run`
Go
36
star
10

cove

A combined BitTorrent frontend and DHT indexer for personal use
33
star
11

btlink

a HTTP(s) addressing scheme for BitTorrent
Go
32
star
12

squirrel

Go sqlite3 cache
Go
18
star
13

envpprof

Allows run time configuration of Go's pprof features and default HTTP mux using environment variables.
Go
17
star
14

castlink

Web Chromecast player
Elm
12
star
15

tagflag

declarative flag parsing for Go using struct tags
Go
11
star
16

sqlrpc

SQL over RPC, specifically for SQLite
Go
10
star
17

ffprobe

Go ffprobe wrapper
Go
9
star
18

mmsg

Exposes batch message receives (recvmmsg)
Go
8
star
19

gasp

Clojure-inspired LISP implemented in Go
Go
8
star
20

sync

A sync package clone that provides pprof debugging of sync.Mutex to help with diagnosing deadlocks.
Go
8
star
21

transcoder

http transcoder microservice
Haskell
8
star
22

archive

Dumping ground for code from before I really used VCS, or doesn't go anywhere else
Visual Basic
6
star
23

log

context-style logging for Go. similar to zerolog but with lots of allocations
Go
6
star
24

various

Some code I muck about with.
Erlang
6
star
25

go-libp2p-dht-tool

readline-like CLI utility to operate on stand-alone libp2p DHT node instance
Go
6
star
26

generics

wow
Go
5
star
27

imdbrt

Show RT rating on IMDB pages
JavaScript
4
star
28

lsan

Go leak sanitizer/memory address sanitizer helper
Go
3
star
29

webtorrent-public

Public parts of anacrolix/webtorrent
Go
3
star
30

chansync

Go
2
star
31

dog

Go
2
star
32

dms-gtk-gui

GTK+ GUI for anacrolix/dms
Go
2
star
33

thinfs

A modern "FAT64" with better performing design.
C
2
star
34

harkon

A whitespace lisp interpretter
C++
2
star
35

http-ping

An actually useful HTTP ping tool
Go
2
star
36

wat

Tests of behaviour in the language and standard library
Go
2
star
37

ipfslog

A minimal wrapper around IPFS logging
Go
2
star
38

bargle

Aleena beware!
Go
2
star
39

notel

Simple telemetry clients and server for user defined data
Rust
2
star
40

bitmap

1
star
41

gorond

GROND!! GROND!! Code formatter for Go
Go
1
star
42

gostdapp

Go
1
star
43

goanna

Yet another Go dumping ground.
Go
1
star
44

haskell-dht

Mucking around with DHT using Haskell
Haskell
1
star
45

publicip

Go
1
star
46

multiless

Helper for partial ordering in Go
Go
1
star
47

parser

Go
1
star
48

porssh

i did a haskell
Haskell
1
star
49

sassy

trippa snippa filesystem trimmer
Go
1
star
50

haskell

Haskell
1
star
51

boltextra

Enhancements and utilities for bolt
Go
1
star
52

goproxy

HAProxy but not arcane
Go
1
star
53

tlsterm

TLS termination with just command-line flags
Go
1
star
54

pydlnadms

Automatically exported from code.google.com/p/pydlnadms
Python
1
star
55

aragorn

BitTorrent tracker using Redis and Go
1
star