Tsunami
A high-performance BitTorrent tracker — UDP-first, built for 50M+ peer swarms.
BETA Infrastructure & Ops
·
11 features
·
Rust · io_uring · AF_PACKET · WebSocket
overview
Tsunami is a BitTorrent tracker written in Rust for very large swarms: dense peer storage (~45 bytes/peer), sharded by info hash, io_uring multishot UDP I/O and SO_REUSEPORT workers.
It speaks BEP 15 over UDP, the classic HTTP tracker (BEP 3 announce / BEP 12 scrape), WebSocket for WebTorrent and browser peers, and even raw BEP-15-over-HTTP for tooling that can't do UDP. One unified store means stats stay consistent across every protocol.
features
- ▸UDP tracker (BEP 15) — connect/announce/scrape, IPv4 + IPv6
- ▸Two RX backends — io_uring (lowest CPU) or AF_PACKET kernel ring (lower burst loss)
- ▸HTTP tracker — BEP 3 announce, BEP 12 scrape, compact and non-compact peer_id echo
- ▸WebSocket tracker — BEP-15 binary inside WS frames for WebTorrent/browser peers
- ▸BEP-15 over HTTP — POST /bep15 for UDP-protocol tooling through proxies
- ▸Unified swarm store — UDP, HTTP and WebSocket peers share one view
- ▸Peer-state snapshot/restore — restarts don't cause re-announce storms
- ▸Rate limiting / DoS shedding — token buckets on expensive paths only
- ▸Full scrape — GET /scrape with no hashes returns every tracked torrent
- ▸Self-contained HTML dashboard + JSON stats API + Prometheus /metrics
- ▸Behind-proxy support — X-Forwarded-For real-IP, optional client-supplied announce IP
screenshots
documentation 2 pages
stack
Rust
io_uring
AF_PACKET
WebSocket
SO_REUSEPORT
get started
$ cargo build --release $ ./tsunami -c tsunami.toml ▊