• v0.11.0 e8648a1268

    v0.11.0 Stable

    github-actions[bot] released this 2026-10-20 19:13:02 +00:00 | 12 commits to main since this release

    Changed

    • Breaking: The titles extension is the TMDB extension. SNIFFARR_TITLES_CONCURRENCY, SNIFFARR_TITLES_RATE, SNIFFARR_TITLES_RETRY and SNIFFARR_SEARCH_TITLES_MAX are SNIFFARR_TMDB_CONCURRENCY, SNIFFARR_TMDB_RATE, SNIFFARR_TMDB_RETRY and SNIFFARR_SEARCH_TMDB_MAX. A release carries tmdb_layer and tmdb_confidence in place of title_layer and title_confidence, and the enum is TMDBLayer with TMDB_LAYER_UNSPECIFIED, TMDB_LAYER_SEARCH and TMDB_LAYER_CLASSIFIER. The metrics sniffarr.titles.matches and sniffarr.titles.requests are sniffarr.tmdb.matches and sniffarr.tmdb.requests, with the attributes sniffarr.tmdb.layer and sniffarr.tmdb.status. The tables titles and title_ids are tmdb_works and tmdb_ids; a migration renames them.
    Downloads
  • v0.10.0 e417cbbb6e

    v0.10.0 Stable

    github-actions[bot] released this 2026-10-20 18:37:44 +00:00 | 13 commits to main since this release

    Changed

    • Breaking: -public-ip is gone. -sniff asks a STUN server for its public address at start, -stun, default stun.l.google.com:19302; the node ID takes the BEP 42 prefix of the answer, and is used as stored when the server does not answer within 5 seconds or -stun is empty.

    Removed

    • The line under the charts of the data page that pointed at Grafana for the rest of the telemetry.
    Downloads
  • v0.9.0 b325465de9

    v0.9.0 Stable

    github-actions[bot] released this 2026-10-20 13:59:04 +00:00 | 14 commits to main since this release

    Added

    • The DHT node of -sniff serves the peers announced to it: get_peers replies carry up to 50 peers announced within the last 30 minutes, held in memory only, up to 100 per infohash and 200,000 infohashes. Metrics sniffarr.dht.infohashes and sniffarr.dht.peers.
    • The node answers BEP 51 sample_infohashes with up to 20 of the infohashes it holds, their count, the nodes nearest the target and an interval of 1800 seconds, one reply per source every 10 seconds. Metric sniffarr.dht.replies.
    • The node answers a get_peers with scrape by BEP 33: the reply carries the BFsd and BFpe bloom filters of the seeds and the other peers held for the infohash, the seed flag of announce_peer telling them apart.
    • The node's ID is kept across restarts: IngestService.HashKey returns node_id, 20 bytes the API generates once into its store, and -sniff waits for it before the node starts. -public-ip gives the ID the BEP 42 prefix of the node's public address.
    Downloads
  • v0.8.0 4eb8b0fd96

    v0.8.0 Stable

    github-actions[bot] released this 2026-10-20 12:20:42 +00:00 | 18 commits to main since this release

    Changed

    • A torrent's card links to TMDB and IMDb: the work's pages when its IDs are known, else searches for its title.
    • The work named on a torrent's card and in search results links to that work in the top with its releases open, in place of the top of its kind.
    Downloads
  • v0.7.1 12a8e13f93

    v0.7.1 Stable

    github-actions[bot] released this 2026-10-20 12:01:33 +00:00 | 19 commits to main since this release

    Fixed

    • A torrent stored by -api gets its work_key, year and season at insertion; a stored torrent that has none takes them at the next start.
    • The DHT node of -sniff puts a token in its get_peers replies, so it receives announce_peer: torrents are discovered with SOURCE_ANNOUNCE and their announcing peers are counted. It still serves no peers.
    Downloads
  • v0.7.0 4ff99cb86f

    v0.7.0 Stable

    github-actions[bot] released this 2026-10-20 11:21:25 +00:00 | 22 commits to main since this release

    Added

    • Peers per torrent, as HyperLogLog sketches and nothing else: -sniff counts the senders of announce_peer and -fetch the peers it meets, for stored torrents only, and both send their sketches to the API with IngestService.Peers every 3 minutes, hashing each IP:port with the key IngestService.HashKey gives. The store keeps hourly sketches for 8 days and daily ones for 65.
    • Works: work_key, year and season on every torrent; a movie or an album is its title and year, a series its title and season.
    • The top of works, BrowseService.Top and Work, recomputed every 10 minutes for movie, series and music over the windows 24h, 7d and 30d and the voice filters any, p50 and explicit, each entry with its peers, releases and change against the previous window.
    • BrowseService.Home; Page takes sort (peers, last_seen, size) and lists matching works; Card carries peers over three windows, the torrent's work, its releases and release_rank; Release carries peers_week.
    • SightResponse.stored says, per infohash sent, whether the torrent is stored.
    • Web UI: a home page at / with a summary, the top at /top and /top/w/{id}, a works block and a 7-day peers column in search results sorted by sort, peers over three windows and the work on a torrent's card, and ?lang=ru|en remembered in a cookie for a year.
    • Metrics sniffarr.ingest.sketches, sniffarr.sniff.peers and sniffarr.sniff.sketches.

    Changed

    • The search page does not poll for new torrents; the data page still does.
    • The web UI's English locale is en; C and POSIX resolve to it.
    Downloads
  • v0.6.0 32363c32ad

    v0.6.0 Stable

    github-actions[bot] released this 2026-10-20 09:22:09 +00:00 | 42 commits to main since this release

    Added

    • BrowseService, behind the search token: Page lists releases with the UI's filters, Card gives one release with its files, Stats gives the counts of the data page.
    • The chart's ui component: Deployment and Service <release>-ui running sniffarr -ui, with ui.service.targetPort naming a port of a proxy in ui.extraContainers and SNIFFARR_OIDC_ISSUER set through ui.env.
    • The chart's single.enabled: one Deployment <release> running -api with every enabled component of ui, sniff and fetch, with single.replicas fixed at 1.

    Changed

    • Breaking: one binary, sniffarr, whose components are the flags -api, -ui, -sniff and -fetch; sniffapi and sniffdht are gone, and the image's entrypoint is sniffarr. Every environment variable and DHT flag keeps its name.
    • Breaking: -discover is -sniff; the web UI is served by -ui, and SNIFFARR_UI_ADDR defaults to :8081.
    • The web UI reads through BrowseService: in a process with -api over an in-memory connection, else at SNIFFARR_URL with SNIFFARR_SEARCH_TOKEN. SNIFFARR_URL set in a process with -api is refused.
    • -log-level given wins over SNIFFARR_LOG_LEVEL.
    • Every component reports telemetry as the service sniffarr unless OTEL_SERVICE_NAME says otherwise.
    • The chart's containers are named api, sniff and fetch.

    Removed

    • Breaking: the chart's api.ui; ui replaces it, and a values file still setting api.ui fails to render.
    Downloads