Show HN: I wrote a new BitTorrent tracker in Elixir
The Bittorrent Tracker made in Elixir
👷♂️This project is a Work In Progress. While not ready for full industrial usage it does work.
There is a testing instance running at extracker.dahrkael.net:6969 with all current features enabled (Live statistics).
Features
Implementation Legend: 🔲 Not Yet 🔰 Partially ✅ Done ❌ Won't do
Important Features
- ✅ High performance (uses ALL the available cores, in-memory storage)
- ✅ Low memory usage (~200MB of RAM for each 1.000.000 peers)
- ✅ Zero setup (launch it and it just works)
Tracker-related BitTorrent Enhancement Proposals
Final and Active Process BEPs
Accepted BEPs
- ✅ BEP 15: UDP Tracker Protocol
- ✅ BEP 23: Tracker Returns Compact Peer Lists
- 🔲 BEP 27: Private Torrents
Draft BEPs
- ✅ BEP 7: IPv6 Tracker Extension
- 🔲 BEP 21: Extension for partial seeds
- ✅ BEP 24: Tracker Returns External IP
- 🔲 BEP 31: Tracker Failure Retry Extension
- ✅ BEP 41: UDP Tracker Protocol Extensions
- 🔰 BEP 48: Tracker Protocol Extension: Scrape
- ✅ BEP 52: The BitTorrent Protocol Specification v2
Deferred BEPs
- ❌ BEP 8: Tracker Peer Obfuscation
Other Features
- ✅ HTTPS support
- ✅ Database backups to disk
- ❌ WebTorrent
- 🔰 Infohash whitelist/blacklist
- 🔰 Peer management (interval enforcement, cleanup, banning, etc)
- 🔰 Metrics
- 🔰 GeoIP support (statistics, peer restrictions)
- Feel free to propose features in the Issues
Setup
There are 3 main ways of running ExTracker currently
Straight from source code
For this method to work you need to have Erlang and Elixir installed on your system
- Clone the repository:
git clone https://github.com/Dahrkael/ExTracker.git && cd ExTracker
- If needed, modify the configuration in config/runtime.exs to fit your needs
- run
MIX_ENV=prod iex -S mix
From Releases
Currently there are no official releases built (soon™️). You can however make your own and deploy it where needed:
- Clone the repository:
git clone https://github.com/Dahrkael/ExTracker.git && cd ExTracker
- run
MIX_ENV=prod mix release extracker
for Linux orMIX_ENV=prod mix release extrackerw
for Windows - Find the release files inside the _build/prod/rel/extracker folder (if its a different machine make sure the OS and architecture is the same!)
- Copy the folder to its final destination
- If needed, modify the configuration in releases/{VERSION}/runtime.exs to fit your needs
- Run
bin/extracker start
Docker
For this method you can directly run the available docker image: docker run ghcr.io/dahrkael/extracker:latest
or use it as part of docker-compose. Theres an example compose file available.
Note
Since modifying the runtime.exs file to tune the configuration inside the container is not easy you can also configure it using Environment Variables, see the example compose file for the complete list.
Copyright and license
Copyright (c) Dahrkael
Distributed under the terms of the Apache License, Version 2.0. Please refer to the LICENSE file in the repository root directory for details.
What's Your Reaction?






