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

Dashboard — live counters, per-protocol rates, top torrents (test instance)
Dashboard — live counters, per-protocol rates, top torrents (test instance)

documentation 2 pages

open full docs →

stack

Rust io_uring AF_PACKET WebSocket SO_REUSEPORT

get started

quickstart
$ cargo build --release
$ ./tsunami -c tsunami.toml
▊