Areas we serve

Self-Hosted bitmagnet: DHT Crawler and Torznab for Your Servarr Stack

Your Sonarr library is only as good as the indexers Prowlarr can reach. Public trackers come and go. Private ones need invites. A metadata-only indexer you run yourself, fed by the BitTorrent DHT instead of a single site's API, is a different shape of backup plan.

bitmagnet (~4.4k GitHub stars, MIT) is that stack in one repo: DHT crawler, generic torrent indexer, content classifier, search UI, GraphQL API, and a Torznab endpoint for Prowlarr, Sonarr, and Radarr. Written in Go with PostgreSQL behind it. Alpha software; upstream is upfront about schema and API churn before any 1.0.

What the DHT crawler actually does

Most people know DHT as "find peers without a tracker." The other trick is crawling: walk the distributed hash table, collect info hashes, pull metadata for each torrent, and build a searchable catalog. bitmagnet does that continuously, then enriches rows with its classifier (release names parsed into language, resolution, source type, and optional TMDB matches for movies and TV).

You are not chained to one defunct indexer or a third-party API key for basic discovery. You can also import torrents via the /import API (RARBG backup dumps are the classic example in docs). The crawler plus imports land in the same Postgres library your UI and Torznab feed share.

BitTorrent is neutral plumbing. What you download and share still has to respect copyright and your local law. bitmagnet indexes metadata; your *arr apps and client decide what gets grabbed. We are describing infrastructure homelabbers run, not a piracy how-to.

What you get out of the box

  • Web UI at /webui (Angular, multilingual) plus an admin dashboard.
  • GraphQL at /graphql with GraphiQL playground; search is the main query surface today.
  • Torznab at /torznab for Generic Torznab in Prowlarr at something like http://bitmagnet:3333/torznab on a shared Docker network.
  • Workers you can run selectively: HTTP server, queue server, DHT crawler (bitmagnet worker run --all or pick keys).
  • Observability hooks: Prometheus /metrics, pprof, optional Grafana/Loki stack in the full compose example on GitHub.

On the roadmap but not done yet: auth, API keys, saved searches, and two-way Prowlarr sync so bitmagnet could also ingest other indexers you configure there. Today, lock the UI down with a reverse proxy and network policy; there is no built-in login wall.

Why self-host?

Your index, your disk. Metadata and classification live in your Postgres volume, not a SaaS that disappears when a domain gets seized.

Servarr-native. One Torznab indexer pointing at your own crawler beats maintaining five flaky public endpoints in Prowlarr.

Classifier you can tune. Rules and enrichment are part of the project; power users care about consistent parsing for release groups and languages.

Canadian VPS angle. If your media automation already runs on a Beauharnois or Toronto box, co-locating bitmagnet keeps indexer traffic and database backups in the same jurisdiction as the rest of your homelab stack. Many operators still route the BitTorrent side through VPN (the repo ships a gluetun example); that is policy, not a requirement of the app.

Reality check. DHT crawling is chatty on 3334/tcp and udp plus steady Postgres growth. Plan RAM for Postgres (shm_size: 1g in examples), disk for the library, and firewall rules so you do not expose an unauthenticated Torznab endpoint to the whole internet.

Minimal Docker Compose

services:
  bitmagnet:
    image: ghcr.io/bitmagnet-io/bitmagnet:latest
    ports:
      - "3333:3333"
      - "3334:3334/tcp"
      - "3334:3334/udp"
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - ./config:/root/.config/bitmagnet
    command: ["worker", "run", "--keys=http_server", "--keys=queue_server", "--keys=dht_crawler"]
    depends_on:
      postgres:
        condition: service_healthy

  postgres:
    image: postgres:16-alpine
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=bitmagnet
    shm_size: 1g

docker compose up -d, open http://your-host:3333, and give the crawler a minute to show first hits. Optional TMDB_API_KEY improves movie and TV matching. Upgrade by pulling the latest image and restarting the bitmagnet container.

Who it's for (and who should skip it)

Good fit: Servarr households that want a private metadata indexer; admins comfortable with Docker, Postgres backups, and reverse-proxy auth; tinkerers curious about DHT protocol work in Go.

Skip it: if you need production-grade ACLs today (wait for upstream auth or wrap it hard yourself); if shared hosting without UDP and long-running workers is your only option; if you do not want to think about copyright at all.

Hosting it in Canada

bitmagnet fits a modest CloudBox VPS with Docker, open BitTorrent ports if you crawl DHT, and nightly Postgres dumps. Put nginx or Caddy in front of 3333, keep Torznab off the public internet unless you know why it is exposed.

Talk with Swift Host if you want disk and egress sized for a crawler plus Sonarr on the same Canadian VM. We are in St. Albert and actually answer the phone.

Tags:
  • bitmagnet
  • BitTorrent
  • Servarr
  • Self-Hosted
  • DHT

Need Help With Your Hosting?

Tell us about your application — we respond within 1 hour with honest recommendations.