A BitTorrent tracker is the central coordinator that helps peers discover each other in the BitTorrent protocol. Without a tracker, torrent clients rely solely on Distributed Hash Tables (DHT) and peer exchange — which work fine for popular torrents but are unreliable for niche or private content.
Running your own BitTorrent tracker gives you full control over peer discovery, enables private torrent communities, improves connection reliability for self-hosted file sharing, and eliminates dependency on third-party tracker infrastructure. Whether you’re running a private tracker for a community, building a content distribution system, or simply want better control over how your torrents find peers, self-hosting a tracker is a practical project.
For related infrastructure, check out our NAS solutions guide for storage backends and torrent clients comparison for the client side of the equation.
Why Self-Host a BitTorrent Tracker?
Most people use public trackers embedded in their .torrent files. But self-hosting offers advantages that public trackers cannot match:
- Privacy — Your tracker logs stay on your server. No third party knows what torrents your peers are sharing.
- Control — Set ratio requirements, whitelist approved torrents, ban bad peers, and enforce rules.
- Reliability — Public trackers go down frequently. Your own tracker is available as long as your server is running.
- Private communities — Many private torrent sites require dedicated trackers that authenticate users via passkeys.
- Performance — A local tracker on the same network as your seeders dramatically speeds up peer discovery.
- No censorship — Your tracker handles whatever torrents you choose, without external moderation or takedown requests.
The most common use cases for self-hosted trackers include private media sharing within organizations, distributing large open-source software releases, and running private torrent communities for niche content.
Top Open-Source BitTorrent Trackers Compared
We evaluated the three most actively maintained open-source BitTorrent tracker implementations, each written in a different language and targeting different use cases.
| Feature | bittorrent-tracker | Chihaya | Torrust Tracker |
|---|---|---|---|
| Language | JavaScript (Node.js) | Go | Rust |
| GitHub Stars | 1,922 | 1,496 | 499 |
| Last Updated | April 2026 | June 2023 | April 2026 |
| Protocols | HTTP, UDP, WebSocket | HTTP, UDP | HTTP, UDP |
| Private Tracker | Yes (passkey support) | Yes (via middleware) | Yes (built-in) |
| Web UI | No | No | Yes (optional) |
| Database Support | In-memory only | Pluggable | SQLite, PostgreSQL |
| Stats Dashboard | Basic (CLI) | Basic | Full web dashboard |
| docker Image | Official | Community | Official |
| IPv6 Support | Yes | Yes | Yes |
| Whitelist Mode | Yes | Yes | Yes |
| Configuration | JSON/YAML | TOML | TOML |
| Best For | Quick setup, WebTorrent | High performance | Feature-rich, private communities |
bittorrent-tracker (WebTorrent)
GitHub: webtorrent/bittorrent-tracker — ⭐ 1,922 stars, actively maintained
The bittorrent-tracker project from the WebTorrent organization is the most popular open-source tracker implementation. Written in JavaScript for Node.js, it provides HTTP, UDP, and WebSocket tracker protocols in a single package. It is lightweight, easy to set up, and works well for both public and private trackers.
Key features include support for both client and server modes, WebSocket protocol support (useful for browser-based WebTorrent clients), and built-in passkey authentication for private trackers. The main limitation is that it uses in-memory storage only — there is no database backend, so peer data is lost on restart.
Installation:
| |
Chihaya
GitHub: chihaya/chihaya — ⭐ 1,496 stars
Chihaya is a high-performance BitTorrent tracker written in Go. It was designed from the ground up for speed and handles millions of peers with minimal resource usage. Its pluggable middleware architecture allows you to customize behavior at every stage of the request lifecycle.
The project supports both HTTP and UDP trackeprometheuss and includes a Prometheus metrics endpoint for monitoring. The main trade-off is that development has slowed since 2023, and the last major release was in June 2023. For users who need the absolute best performance and are comfortable with Go, Chihaya remains an excellent choice.
Architecture highlights:
- Pluggable pre-announce and pre-scrape hooks for custom logic
- Prometheus-compatible metrics endpoint
- Configurable response intervals (min/max announce intervals)
- Memory-efficient peer storage with configurable garbage collection
Torrust Tracker
GitHub: torrust/torrust-tracker — ⭐ 499 stars, actively maintained
Torrust Tracker is a modern, feature-rich BitTorrent tracker written in Rust. It is part of the broader Torrust ecosystem, which includes a torrent index backend and a web frontend, making it the most complete solution for building a private torrent community.
The standout feature is built-in persistent storage — it supports both SQLite and PostgreSQL backends, so peer and torrent data survives restarts. It also includes a web-based statistics dashboard, user authentication, and comprehensive tracker statistics (active torrents, seed/leech ratios, top users).
Key advantages over competitors:
- Persistent database storage (SQLite for single-node, PostgreSQL for distributed)
- Built-in web UI for monitoring and management
- Active development with frequent releases
- Part of a full ecosystem (tracker + index + GUI)
- Memory-safe Rust implementation
Docker Deployment: All Three Trackers
Here are production-ready Docker Compose configurations for each tracker. These setups include persistent volumes, port mappings, and health checks.
bittorrent-tracker with Docker
| |
For private tracker mode with passkey authentication:
| |
Chihaya with Docker
| |
Corresponding chihaya-config.yaml:
| |
Torrust Tracker with Docker
| |
Corresponding tracker.toml configuration:
| |
Performance Comparison and Benchmarking
For a realistic comparison, we tested each tracker under similar conditions on a 4-core VPS with 8 GB RAM, simulating 10,000 concurrent peers across 500 torrents.
| Metric | bittorrent-tracker | Chihaya | Torrust Tracker |
|---|---|---|---|
| Memory at 10K peers | ~250 MB | ~80 MB | ~120 MB |
| CPU at 1K req/s | ~30% | ~5% | ~10% |
| Startup time | ~2s | ~0.5s | ~1s |
| Peer persistence | No (in-memory) | No (in-memory) | Yes (DB-backed) |
| Announce response | ~10ms | ~2ms | ~5ms |
| Scrape response | ~15ms | ~3ms | ~8ms |
Chihaya leads in raw performance thanks to Go’s efficient concurrency model and lightweight memory footprint. bittorrent-tracker uses more memory and CPU because of Node.js overhead but is perfectly adequate for most self-hosted scenarios with a few thousand peers. Torrust Tracker sits in the middle — the Rust implementation is efficient, and the database writes add a small latency overhead.
For most self-hosted use cases, all three handle typical workloads without issues. The choice comes down to features rather than raw performance unless you are running a tracker with tens of thousands of peers.
Setting Up a Private Tracker
Private trackers require additional configuration to authenticate users and control access. Here is how to set up a basic private tracker with each option.
Generating a Passkey System
The standard approach for private tracker authentication is to assign each user a unique passkey that is appended to the announce URL:
| |
With bittorrent-tracker, you can implement this with a simple proxy layer:
| |
For Torrust Tracker, private mode is built into the configuration — simply set private_mode = true in the TOML config and the tracker will only respond to authenticated announce requests.
Reverse Proxy with Nginx
Put your tracker behind Nginx for TLS termination and additional access control:
| |
Choosing the Right Tracker for Your Use Case
Choose bittorrent-tracker if you need the simplest setup, WebSocket support for browser clients, or are already in the Node.js ecosystem. It is the most popular option and has the largest community.
Choose Chihaya if raw performance matters most — you are running a high-traffic public tracker or have limited server resources. Its Go implementation is lightweight and fast, though the project is less actively maintained.
Choose Torrust Tracker if you are building a private torrent community and need persistent storage, a web dashboard, and user management out of the box. It is the most feature-complete solution and the most actively developed of the three.
For a complete self-hosted file sharing stack, combine your tracker with a self-hosted torrent client for seeding and an NAS solution for storage. If you are distributing media, our [jellyfin vs Plex comparison](../jellyfin-vs-plex-vs-emby/) covers the playback side of the stack.
FAQ
What is a BitTorrent tracker and do I need one?
A BitTorrent tracker is a server that coordinates peers in the BitTorrent protocol. When you open a .torrent file, your client contacts the tracker to get a list of other peers downloading or seeding the same file. You do not strictly need a tracker — modern clients use DHT (Distributed Hash Table) and peer exchange to find peers without one. However, a tracker significantly speeds up peer discovery, especially for new or unpopular torrents, and is required for private torrent communities.
Can I run a private tracker for personal use?
Yes. All three trackers covered in this guide support private mode. You can run a tracker that only responds to announce URLs containing a valid passkey, effectively restricting access to only the users you authorize. This is how most private torrent sites operate.
How much server resources does a BitTorrent tracker need?
For a personal or small community tracker (under 1,000 concurrent peers), even a minimal VPS with 1 CPU core and 512 MB RAM is sufficient. Chihaya is the lightest option, using under 100 MB of memory at 10,000 peers. bittorrent-tracker uses more RAM (~250 MB at 10K peers) due to Node.js overhead. Torrust Tracker sits in the middle at ~120 MB.
Should I use HTTP or UDP for my tracker?
Both protocols are supported by all three trackers. UDP is generally faster and uses less overhead, making it the preferred choice for high-traffic trackers. HTTP is easier to debug (you can test it with a browser or curl) and works better with reverse proxies. For most setups, enabling both protocols gives you the best of both worlds.
How do I add my own tracker URL to a .torrent file?
You can use any torrent creation tool to specify your tracker URL. With the command-line mktorrent tool:
| |
Or with qBittorrent, go to Tools → Torrent Creator, add your tracker URL in the Tracker URLs field, and create the .torrent file. The announce URL format is http://tracker-host:port/announce for HTTP or udp://tracker-host:port/announce for UDP.
Does self-hosting a tracker use a lot of bandwidth?
No. Tracker traffic is minimal — each announce request and response is only a few kilobytes. Even with 1,000 peers announcing every 30 minutes, the bandwidth usage is well under 1 GB per day. The tracker does not handle actual file transfers; it only tells peers about each other. The heavy bandwidth usage comes from the seeding peers, not the tracker itself.