• v0.25.0 cdecc56478

    v0.25.0
    All checks were successful
    Cut release / changelog (push) Has been skipped
    Cut release / test (push) Successful in 2m11s
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 8s
    Roll release / plan (push) Successful in 7s
    Roll release / image (push) Successful in 1m34s
    Roll release / chart (push) Successful in 12s
    Roll release / release (push) Successful in 0s
    Stable

    mikluko released this 2026-10-22 23:50:08 +00:00 | 25 commits to main since this release

    Changed

    • Torznab titles end with [RUS] and the Russian dubbing studios found in the release's name or files, such as [RUS LostFilm HDRezka], when the release has a Russian audio marker or the classifier gives Russian audio a probability of at least 0.9, so Radarr and Sonarr release-title custom formats can score it.
    Downloads
  • v0.24.0 0232701315

    v0.24.0
    All checks were successful
    Cut release / changelog (push) Has been skipped
    Cut release / test (push) Successful in 2m13s
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 8s
    Roll release / plan (push) Successful in 7s
    Roll release / image (push) Successful in 1m18s
    Roll release / chart (push) Successful in 12s
    Roll release / release (push) Successful in 1s
    Stable

    mikluko released this 2026-10-22 20:46:48 +00:00 | 26 commits to main since this release

    Added

    • Calls to TypeSafe, TMDB and the Radarr and Sonarr APIs record OpenTelemetry client spans and carry the trace context.

    Changed

    • Torznab answers with the classifications and TMDB matches already stored instead of waiting up to SNIFFARR_SEARCH_CLASSIFY_WAIT for them; the search still starts them in the background, and later searches return their results. Searches from the web UI wait as before.
    • Searches running at the same time classify a release once between them.
    Downloads
  • v0.23.1 eb3117e9cc

    v0.23.1
    All checks were successful
    Cut release / changelog (push) Has been skipped
    Cut release / test (push) Successful in 3m24s
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 8s
    Roll release / plan (push) Successful in 8s
    Roll release / image (push) Successful in 1m21s
    Roll release / chart (push) Successful in 12s
    Roll release / release (push) Successful in 0s
    Stable

    mikluko released this 2026-10-22 16:27:54 +00:00 | 30 commits to main since this release

    Added

    • Torznab and the Radarr/Sonarr webhook record OpenTelemetry server spans and continue the caller's trace.
    Downloads
  • v0.23.0 4269e72545

    v0.23.0
    All checks were successful
    Cut release / changelog (push) Has been skipped
    Cut release / test (push) Successful in 1m23s
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 6s
    Roll release / plan (push) Successful in 5s
    Roll release / image (push) Successful in 1m12s
    Roll release / chart (push) Successful in 9s
    Roll release / release (push) Successful in 1s
    Stable

    mikluko released this 2026-10-22 14:34:04 +00:00 | 31 commits to main since this release

    Added

    • The chart's NetworkPolicy <release>-api, api.networkPolicy.enabled, true by default: only the release's own pods and the NetworkPolicyPeers in api.networkPolicy.from reach the API port, 8080; the api pod's other ports stay open.

    Removed

    • Breaking: SNIFFARR_INGEST_TOKEN and SNIFFARR_SEARCH_TOKEN are gone: IngestService, SearchService and BrowseService take no bearer token and authenticate no caller.
    • Breaking: the chart values ui.existingSecret, ui.secretKey, sniff.existingSecret, sniff.secretKey, fetch.existingSecret and fetch.secretKey; set, they fail the render. api.existingSecret is optional.
    Downloads
  • v0.22.1 7123fe5057

    v0.22.1
    All checks were successful
    Cut release / changelog (push) Has been skipped
    Cut release / test (push) Successful in 1m31s
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 7s
    Roll release / plan (push) Successful in 5s
    Roll release / image (push) Successful in 1m5s
    Roll release / chart (push) Successful in 10s
    Roll release / release (push) Successful in 0s
    Stable

    mikluko released this 2026-10-22 13:42:07 +00:00 | 33 commits to main since this release

    Added

    • Torznab items carry seeders and peers: the release's distinct peers over the last 7 days.
    • season and episode in SearchRequest: only releases whose name gives the season, and with episode that episode and the season's whole packs.

    Fixed

    • Torznab tvsearch honours season and ep: season selects the releases of that season, ep with it that episode and the season's whole packs, before offset and limit are applied; a name that gives no season matches none, and an invalid value answers error 201.
    Downloads
  • v0.22.0 54f5b8ec8f

    v0.22.0
    All checks were successful
    Cut release / changelog (push) Has been skipped
    Cut release / test (push) Successful in 1m37s
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 6s
    Roll release / plan (push) Successful in 6s
    Roll release / image (push) Successful in 1m7s
    Roll release / chart (push) Successful in 10s
    Roll release / release (push) Successful in 0s
    Stable

    mikluko released this 2026-10-22 11:53:36 +00:00 | 34 commits to main since this release

    Added

    • The Radarr and Sonarr webhook at POST /webhooks/arr, behind HTTP Basic with SNIFFARR_WEBHOOK_TOKEN as the password: Grab and Download events are recorded as grabs and imports in the new table arr_events, once per app, event and download ID; Test and other events are ignored.
    • SNIFFARR_RADARR_URL and SNIFFARR_RADARR_API_KEY, SNIFFARR_SONARR_URL and SNIFFARR_SONARR_API_KEY: the API imports the app's grab history once, then every 24 hours the grabs since the latest recorded one.
    • A grab or import with a TMDB ID, or Sonarr's TVDB ID looked up on TMDB, stores the work and matches the release of its infohash to it under the new layer arr, TMDB_LAYER_ARR, which no TMDB search or Jev choice replaces; an infohash not stored is queued with SOURCE_ARR, ahead of announced ones, and matched when stored.
    • grabs_week in WorkSummary: the work's grabs over the last 7 days.
    • Metrics sniffarr.arr.events and sniffarr.arr.outcomes.
    Downloads
  • v0.21.0 4b454096af

    v0.21.0
    All checks were successful
    Cut release / changelog (push) Has been skipped
    Cut release / test (push) Successful in 3m38s
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 7s
    Roll release / plan (push) Successful in 4s
    Roll release / image (push) Successful in 13s
    Roll release / chart (push) Successful in 6s
    Roll release / release (push) Successful in 1s
    Stable

    agent released this 2026-10-22 10:41:55 +00:00 | 39 commits to main since this release

    Added

    • SNIFFARR_STATS_INTERVAL, default 5m: how often the API recomputes the counts of BrowseService.Stats and Home.
    • computed_at in StatsResponse and HomeResponse; the data page shows how many minutes ago its counts were computed.

    Changed

    • The data page and the home page are served from a snapshot of the store's counts that the API computes at start and then every 5 minutes, instead of counting at each request; only the tokens spent today are read at the request.
    • Indexes torrent_releases (source, kind_layer, kind), torrent_releases (first_seen) and ingest_rejected (reason) cover the counts by kind, layer and source, of new torrents per day, and of rejections by reason; a migration builds them at start.
    Downloads
  • v0.20.0 88d7b435c2

    v0.20.0
    All checks were successful
    Cut release / changelog (push) Has been skipped
    Cut release / test (push) Successful in 3m22s
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 34s
    Roll release / plan (push) Successful in 43s
    Roll release / image (push) Successful in 4m3s
    Roll release / chart (push) Successful in 1m14s
    Roll release / release (push) Successful in 33s
    Stable

    mikluko released this 2026-10-22 08:29:51 +00:00 | 46 commits to main since this release

    Added

    • SQLite statements are traced as child spans of the request that runs them, with the statement text and without its arguments, and measured in db.client.operation.duration by db.pool, db.operation.name and code.function.name; db.sql.connection.* reports both pools.
    Downloads
  • v0.19.0 fd67c56667

    v0.19.0
    All checks were successful
    Cut release / changelog (push) Has been skipped
    Cut release / test (push) Successful in 3m49s
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 25s
    Roll release / plan (push) Successful in 33s
    Roll release / image (push) Successful in 3m44s
    Roll release / chart (push) Successful in 38s
    Roll release / release (push) Successful in 19s
    Stable

    mikluko released this 2026-10-22 01:23:14 +00:00 | 48 commits to main since this release

    Fixed

    • The chart's pods take fsGroup 65532, so api.persistence.type: pvc on a fresh volume owned by root is writable; litestream's restore failed on it with permission denied.

    Added

    • SNIFFARR_RETENTION_IDLE, default 168h: a stored torrent matched to no TMDB work is deleted once it has not been seen for that long; the others keep SNIFFARR_RETENTION. sniffarr.store.retention.deletions carries sniffarr.store.retention.class, idle or expired.

    Changed

    • The dead set keys an infohash by its first 8 bytes, about 40 bytes an entry with its index instead of 68; a migration converts the stored entries, keeping the latest expiry of the hashes that share a key. Two infohashes that share the first 8 bytes are kept out of the queue together.
    Downloads
  • v0.18.0 602082fca0

    v0.18.0
    Some checks failed
    Cut release / test (push) Successful in 7m18s
    Cut release / changelog (push) Has been skipped
    Cut release / ci (push) Successful in 0s
    Cut release / cut (push) Successful in 30s
    Roll release / plan (push) Successful in 6s
    Roll release / image (push) Successful in 13s
    Roll release / chart (push) Has been cancelled
    Roll release / release (push) Has been cancelled
    Stable

    agent released this 2026-10-21 17:53:47 +00:00 | 55 commits to main since this release

    Changed

    • The repository moves to https://forge.sarak.sh/arr/sniffarr, the image to sarak.sh/arr/sniffarr and the chart to oci://sarak.sh/arr/charts/sniffarr; the chart's default image.repository follows. Releases from 0.18.0 on are published there and no longer to ghcr.io/mikluko.
    Downloads