# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.22.1] - 2026-11-10 ### Fixed - **hls**: tighten the encoder failure report after review - **hls**: write init.mp4 into the session dir on Windows ## [1.22.0] - 2026-11-04 ### Added - **desktop**: offer to keep sent logs in the user's account ### Fixed - **engine**: keep tasks without API status out of the sync ### Other - **release**: 1.22.0 ## [1.21.1] - 2026-10-31 ### Fixed - **usenet**: parse NZBs declared as iso-8859-1 ### Other - **release**: 1.21.1 ## [1.21.0] - 2026-10-29 ### Added - **desktop**: change download folder from the tray; fix Windows toast body ### Fixed - **config**: keep comments, order and unknown keys when saving config.toml - **desktop**: address review of the download-folder change ### Other - **release**: 1.21.0 ## [1.20.4] - 2026-10-28 ### Fixed - **funnel**: bump pinned cloudflared to 2026.10.5 and refresh cached binaries ### Other - **release**: 1.20.4 ## [1.20.3] - 2026-10-28 ### Fixed - **login**: point unarr.app users at the agents tab, not the hidden API-key tab ### Other - **release**: 1.20.3 ## [1.20.2] - 2026-10-27 ### Fixed - **docker**: copy third_party before go mod download ### Other - **release**: 1.20.2 ## [1.20.1] - 2026-10-27 ### Fixed - **daemon**: absorber SIGPIPE desde el PersistentPreRun de start/up - **daemon**: SIGHUP/SIGPIPE ya no dejan firma de crash falsa - **torrent**: floor the tracker announce interval to stop the dispatcher spinning ### Other - **release**: 1.20.1 ### Build - **go**: bump the toolchain directive to 1.26.10 ## [1.20.0] - 2026-10-16 ### Added - **agent**: PublishSessions contra POST /api/internal/agent/sessions - **config**: [metrics] publish, activo por defecto - **daemon**: publica el snapshot de sesiones a la web - **metrics**: publisher del snapshot de sesiones hacia la web - **metrics**: vista unificada de sesiones, salud y endpoint Prometheus ### Documentation - **metrics**: vida de la sesión mount y snapshot vacío al parar - **metrics**: sección "Publishing to the web" en README y SCHEMA.md ### Fixed - **backup**: el archivo sin secretos también vacía [metrics] token - **backup**: no fiarse de un archivo sin cifrar que trae credenciales - **backup**: avisar del api_url aunque el config local no parsee - **config**: config check falla si config.toml no carga - **engine**: servedWriter conserva io.ReaderFrom - **metrics**: snapshot vacío final al parar el publisher - **metrics**: la sesión mount sobrevive 15 s a su última lectura - **metrics**: Title acotado a 200 runas y comentarios de session.go - **metrics**: unarr status --json vuelve a dar el texto de siempre - **metrics**: el reload avisa de que [metrics] necesita reinicio - **metrics**: timeouts en /metrics y en el control plane - **metrics**: vpn, states y onStall fuera del lock del hub - **metrics**: bytes de la sesión, no los acumulados del proceso - **metrics**: la primera muestra no cuenta como flujo parado - **metrics**: clave (kind,id) para que download y stream no se pisen ### Other - **release**: 1.20.0 ## [1.19.0] - 2026-10-15 ### Added - **backup**: comando `unarr backup` y backups programados en el daemon - **backup**: archivo verificado del estado local, sin secretos por defecto - **config**: tabla [backup] para backups programados del estado ### Documentation - **backup**: restore todo o nada y salida al merge que falla ### Fixed - **backup**: rutas absolutas de la plataforma en los tests de config - **backup**: avisar si las credenciales conservadas irían a otro servidor - **backup**: restore no anuncia "Backup OK" antes de validar el contenido - **backup**: validar la cola con el tipo de tarea del daemon - **backup**: el snapshot pre-restore no aplica el tope por fichero - **backup**: tope por fichero y validar el contenido antes de restaurar - **backup**: no emparejar el agent id del archivo con credenciales locales - **backup**: reintentar la lectura que Windows bloquea un instante - **backup**: prometer conservar credenciales solo cuando las hay - **backup**: rechazar miembros del zip que no son ficheros regulares - **backup**: una sola cota de tamaño para create y restore - **backup**: retencion de los snapshots pre-restore - **backup**: conservar el agent id local al restaurar un archivo sin secretos - **backup**: rechazar un [backup] dir relativo en create/list/prune ### Other - **release**: 1.19.0 ## [1.18.2] - 2026-10-12 ### Fixed - **usenet**: streaming Usenet activado por defecto ### Other - **release**: 1.18.2 ## [1.18.1] - 2026-10-11 ### Fixed - **arr**: saltar ficheros huerfanos y reintentar 429/5xx en arr sync - **release**: descargar ffmpeg con varias fuentes, backoff y cache ### Other - **release**: 1.18.1 ## [1.18.0] - 2026-10-09 ### Added - **arr**: add `unarr arr sync` to flag TrueSpec-verified imported files ### Other - **release**: 1.18.0 ## [1.17.1] - 2026-10-08 ### Fixed - **release**: prepare 1.17.1 with portable platform test fixtures ## [1.17.0] - 2026-10-08 ### Documentation - **mount**: remove link to unpublished review report ### Fixed - **agent**: retain HTTP denial after body read failure - **agent**: allow paced remote mount metadata - **daemon**: allow safe Windows uninstall without config parent - **daemon**: wait for Windows mount cleanup before restart - **mount**: detach owned macOS mounts before stopping rclone - **mount**: restrict Windows owner rights on remote folders - **mount**: preserve Linux daemon cleanup during service restart - **mount**: reconcile disabled live mount sessions - **mount**: preserve agent identity and activation ownership - **remotefs**: bound reads and preserve catalog recovery - **usenet**: bound replies and parse exact yenc fields - **usenet**: validate and bound article transport ### Other - **release**: 1.17.0 - merge main into remote mount branch ## [1.16.1] - 2026-10-05 ### Other - **release**: 1.16.1 ## [1.16.0] - 2026-10-05 ### Added - **organize**: FileBot-style naming templates for the library layout ### Fixed - **library**: read 3-4 digit episode numbers and drop {id} tags from titles ### Other - **release**: 1.16.0 ## [1.15.4] - 2026-10-05 ### Fixed - **torrent**: download every episode of a season pack ### Other - **release**: 1.15.4 ## [1.15.3] - 2026-10-05 ### Documentation - **agent**: copyVideoCodecs ships to agents >= 1.15.2 ### Fixed - **torrent**: release a metadata-starved slot after 10 min, not 30 - **vpn**: harden the reconnect-proof tracker socket - **vpn**: keep UDP tracker sockets alive across a tunnel reconnect ### Other - **release**: 1.15.3 ## [1.15.2] - 2026-09-24 ### Fixed - **srcproxy**: close the single-upstream connection before dialing the next ### Other - **release**: 1.15.2 ## [1.15.1] - 2026-09-23 ### Added - **stream**: play IPTV movies and episodes in the browser over one provider connection ### Other - **release**: 1.15.1 ## [1.15.0] - 2026-09-23 ### Added - **engine**: download IPTV VOD, one at a time, paused while IPTV plays ### Fixed - **engine**: harden IPTV downloads after review ### Other - **release**: 1.15.0 ## [1.14.11] - 2026-09-23 ### Fixed - **service**: a stopped or removed service is not resumed by a later sign-in - **service**: park the installed service instead of restart-looping without a credential ### Other - **release**: 1.14.11 ## [1.14.10] - 2026-09-23 ### Fixed - **usenet**: fallback downloads the release the user chose ### Other - **release**: 1.14.10 ## [1.14.9] - 2026-09-23 ### Fixed - **daemon**: download queue never blocks startup or sync ### Other - **release**: 1.14.9 ## [1.14.8] - 2026-09-23 ### Fixed - **transcode**: keep the GPU render group in Docker and fall back to libx264 ### Other - **release**: 1.14.8 ## [1.14.7] - 2026-09-22 ### Fixed - **docker**: a dashboard delete survives a container restart ### Other - **release**: 1.14.7 ## [1.14.6] - 2026-09-22 ### Fixed - **docker**: reconnect a revoked agent by restarting the container ### Other - **release**: 1.14.6 ## [1.14.5] - 2026-09-21 ### Fixed - **hls**: subtitle sidecars — delta fetches, truncated reads, 404 for unknown tracks ### Other - **release**: 1.14.5 ## [1.14.4] - 2026-09-21 ### Fixed - **hls**: subtitle windows — seek priority, spaced retries, idle-safe status ### Other - **release**: 1.14.4 ## [1.14.3] - 2026-09-21 ### Added - **hls**: extract remote subtitles in windows, the viewer's position first - **hls**: expose subtitle extraction status; make bulk yielding process-wide - **mount**: keep remote folder active - **mount**: automate dependency setup with informed installation consent ### Fixed - **downloads**: keep in-flight downloads on reconcile and shutdown - **hls**: don't log an abandoned segment request as a generation failure - **hls**: serve subtitle sidecars one-shot again; streaming stalled playback - **hls**: stream growing subtitle sidecars so tracks never freeze partial - **hls**: stop remote copy playback stalling on bandwidth-bound links - **mount**: recover partial NZBs and honor API mirrors - **mount**: validate native setup and handle legacy dependencies ### Other - **release**: 1.14.3 ### Performance - **hls**: extract remote subtitles alongside each segment, not the whole file ## [1.14.2] - 2026-09-18 ### Added - **mount**: add optional paid remote folders with web-managed accounts ### Fixed - **diagnostics**: keep report delivery available - **hls**: preserve segment continuity for remote copy playback ### Other - **release**: 1.14.2 ## [1.14.1] - 2026-09-18 ### Fixed - **daemon**: recover macOS launchd and add private diagnostic reports ### Other - **release**: 1.14.1 ## [1.14.0] - 2026-09-17 ### Added - **desktop**: record the host going down in crash reports ### Fixed - **agent**: fail over on the edge's 404 instead of failing the sync - **library**: skip zero-content stubs instead of indexing them as playable - **stream**: don't panic when a stream is requested before metadata ### Other - **release**: 1.14.0 ## [1.13.0] - 2026-09-16 ### Added - **agent**: resume debrid downloads across providers ### Fixed - **stream**: reuse debrid connections across seeks ### Other - **release**: 1.13.0 ## [1.12.1] - 2026-09-15 ### Fixed - **engine**: keep storage Close out of guarded writes already in flight - **release**: use the first GOPATH entry when looking for golangci-lint - **release**: find golangci-lint before bumping the version ### Other - **release**: 1.12.1 ## [1.12.0] - 2026-09-15 ### Fixed - **usenet**: recognise RAR volumes that roll over past .r99 and .s99 - **usenet**: keep a dead NNTP pool unless its credentials changed - **usenet**: treat missing articles as final and keep the NNTP pool healthy - **usenet**: fall back to host on TLS name mismatch and recover dead NNTP pools - **usenet**: reuse offset index and decoded articles across stream requests ### Other - **release**: 1.12.0 ### Performance - **usenet**: serve an article's bytes while it downloads - **usenet**: race a second fetch when a seek's article is slow - **usenet**: read ahead from where a seek lands, not after it - **usenet**: keep decoded articles off the Go heap - **usenet**: share eight read-ahead slots across every reader - **usenet**: keep the connection pool busy for fast consumers - **usenet**: cut streaming memory for small hosts ## [1.11.11] - 2026-09-14 ### Fixed - **docker**: build with Go 1.26 to match go.mod ### Other - **release**: 1.11.11 - **release**: name the remote main tracks in the push hint ## [1.11.10] - 2026-09-14 ### Added - **desktop**: add the Windows event log's side of a daemon death to reports ### CI/CD - keep the Windows harness scripts ASCII, and enforce it - shellcheck scripts/release.sh in CI and pre-commit ### Fixed - **daemon**: answer a Resume while the Windows shim waits to relaunch - **daemon**: consume the stop intent only once the instance lock is held - **desktop**: show the schtasks error instead of a bare exit status - **desktop**: do not report a Windows sign-out as a daemon crash - **torrent**: walk past a listen port Windows has reserved instead of failing ### Other - **release**: 1.11.10 ### Build - silence git-cliff parse-error warning for merge commits - allow parallel golangci-lint runners in hook and make ## [1.11.9] - 2026-09-14 ### Added - **desktop**: open support reports with the daemon run and log freshness ### Fixed - **daemon**: treat a boot log held by the task's shim as a daemon already owned - **daemon**: fall back to a detached daemon when the Windows task will not run - **desktop**: judge log staleness from the run start, mark crashes only when sent - **desktop**: run one tray at a time and report each crash once - **desktop**: start the supervised daemon on Windows Resume ### Other - **release**: 1.11.9 ## [1.11.8] - 2026-09-07 ### Documentation - **windows**: record the final piece-completion harness run ### Fixed - **torrent**: harden the piece-completion pre-flight after review - **torrent**: check, salvage or quarantine the piece-completion db before opening it - **torrent**: own bolt piece-completion backend, synced and freelist-less ### Other - **release**: 1.11.8 ## [1.11.7] - 2026-09-07 ### Fixed - **stream**: probe only accepts 206, and HEAD no longer eats the budget - **stream**: stop aborting a debrid stream when HEAD reveals no size - **torrent**: put the completion test on the same scale as the guard - **torrent**: measure the completion guard against the selected files ### Other - **release**: 1.11.7 ## [1.11.6] - 2026-09-03 ### Fixed - **windows**: scope the firewall rule to the program, drop the DHT probe - **windows**: open the peer port and report DHT reachability at startup ### Other - **release**: 1.11.6 ## [1.11.5] - 2026-08-26 ### Fixed - **agent**: serialise every daemon-state write behind a mutex - **config**: reject malformed paths instead of filing them as permission errors - **crash-report**: stop reporting a Windows shutdown as an agent crash ### Other - **release**: 1.11.5 ## [1.11.4] - 2026-08-26 ### Fixed - **desktop**: read logs off disk when the CLI cannot be exec'd - **mediainfo**: wait out a blocked rename on Windows instead of failing - **mediainfo**: install downloaded tools atomically; accept newer ass-muxer wording - **torrent**: refuse chunk writes after storage close instead of panicking ### Other - **release**: 1.11.4 ## [1.11.3] - 2026-08-25 ### Fixed - **funnel**: detect and restart a tunnel that died at the edge ### Other - **release**: 1.11.3 ## [1.11.2] - 2026-08-19 ### Added - **engine**: verify debrid downloads against the server-resolved file size ### Fixed - **engine**: cancel must never delete another task's files - **engine**: reap orphaned sidecars for real, and stop trusting a bare validator - **engine**: close the gaps the download-integrity review found - **engine**: make downloads corruption-proof (torrent stale-completion + debrid resume splicing) ### Other - **release**: 1.11.2 ## [1.11.1] - 2026-08-19 ### Fixed - **subs**: restrict tag stripping to the WebVTT tag vocabulary - **subs**: drop drawing cues that ffmpeg wrapped in inline markup ### Other - **release**: 1.11.1 ## [1.11.0] - 2026-08-19 ### Added - **subs**: serve raw .ass + embedded fonts, and filter drawing cues from WebVTT ### Fixed - **subs**: survive slow remuxes, aborted dumps and non-ass sources honestly - **subs**: harden the ASS/fonts endpoints and the drawing filter after review ### Other - **release**: 1.11.0 ## [1.10.4] - 2026-08-14 ### Added - **hls**: clear the segment cache on a config change, and expose it to clean ### Fixed - **hls**: key the sealing guard on what this session encoded, not where it is - **hls**: finish the cache reuse that left playback stalled at the splice - **hls**: reportar las sesiones que morían en silencio ### Other - **release**: v1.10.4 ## [1.10.3] - 2026-08-12 ### CI/CD - refuse to publish a release whose CI is not green ### Fixed - **torrent**: make the busy-port walk work on Windows, and stop leaking the DB on failure - **upgrade**: wait out a Windows holder instead of failing the install ### Other - **release**: 1.10.3 ## [1.10.2] - 2026-08-11 ### CI/CD - let CI be dispatched, because a missed push cannot be replayed - run the architectural gate, which CI never did ### Documentation - **logs**: say that log_max_size_mb bounds nothing under systemd ### Fixed - **arch**: run the gate once per GOOS, so platform code stops slipping through - **config**: treat an explicit empty api_url as unset - **desktop**: stop crash reports describing an agent that is not the one that died - **doctor**: keep the closing tip inside 60 columns - **logs**: keep every log line ASCII, and guard the rule mechanically - **upgrade**: install the binary atomically, so nothing ever execs a prefix - **vpn**: say WHICH server disabled the VPN, and stop blaming the account ### Other - **release**: 1.10.2 - untrack docs/ — notas internas fuera de un repo publico ## [1.10.1] - 2026-08-06 ### Added - **doctor**: check for an archive extractor, and stop gating the warning on usenet - **postprocess**: unpack archives in-process, no unrar/7z required ### Fixed - **engine**: reap stale ".tmp" unpack holders on every path, not only seeding - **engine**: make an unpack visible only once it has finished - **engine**: unpack a seeding release to a sibling, never inside the torrent - **engine**: keep archive parts while the torrent is seeding - **engine**: extract packed releases on the torrent path - **hls**: honour the resume position when COPY-VOD is unavailable - **postprocess**: match each volume family on its own, not via an optional group - **postprocess**: key archive volumes by set identity, not just base name - **postprocess**: stop archiveStem from eating a segment of the release name - **postprocess**: delete only the volumes we unpacked, never the user's files ### Other - **release**: 1.10.1 ## [1.10.0] - 2026-08-06 ### Added - **bench**: expose the transcode ceiling the code already measures, plus disk and net - **config**: report unknown and out-of-range keys instead of dropping them - **docker**: add a HEALTHCHECK, and `unarr doctor --quick` to drive it - **doctor**: probe the download methods that are actually in use (A1.6) - **doctor**: check the library directories and the streaming ports (A1.3, A1.5) - **doctor**: add a Media group, because a host with no ffmpeg passed every check - **funnel**: download cloudflared on Windows, and fix what the CI was hiding - **logs**: give the daemon ownership of its log, add `unarr logs`, make rotation opt-in - **support**: add `unarr support-bundle`, allowlist-redacted and never uploaded ### Changed - **doctor**: make the checks data, and add `unarr doctor --json` ### Fixed - **ci**: make the windows and macos jobs pass, and fix the bug they were hiding - **daemon**: write the service file atomically so a reinstall cannot destroy a working install - **desktop**: make a crash report carry the crash, and stop calling a reboot one - **doctor**: par2 said "not needed" on a machine that downloads usenet - **doctor**: a wildcard bind is not proof a port is free on Windows - **doctor**: three defects the review of A1.6 found in its own code - **doctor**: report out-of-range config values, not just misspelled keys - **doctor**: spell out the pass case so exhaustive keeps guarding the switch - **engine**: a cross-device move that cannot delete its source is a duplication, not a move - **engine**: serialise every Task field access behind its mutex - **funnel**: stop retrying a download the code knows can never succeed - **logs**: keep every log line ASCII, so every reader can read it - **status**: reject a state file written before this host booted - **support**: stop the bundle publishing the user's name, and publish the agent ID instead ### Other - **release**: 1.10.0 ## [1.9.0] - 2026-08-04 ### Added - **downloads**: local control plane, `unarr downloads`, and a way out of a stuck download ### Fixed - **usenet-stream**: bound the header probe and reserve budget before the wire - **usenet-stream**: make the cost guards hold what their comments promise - **usenet-stream**: keep each segment's own size estimate in the offset index - **usenet-stream**: stop the stream path overfetching hundreds of MB ### Other - **release**: 1.9.0 ## [1.8.2] - 2026-08-03 ### CI/CD - **deps**: bump actions/upload-artifact from 4 to 7 (#27) ### Fixed - **docs**: update development status from "Beta" to "Active development" in README - **portability**: repair the macOS/Windows bugs the new CI matrix exposed - **windows**: do not let a shutting-down daemon stop its own replacement - **windows**: stop the daemon that is RUNNING, not the one the state file names - **windows**: supervise the daemon in the shim, and check process liveness for real - **windows**: make the daemon survivable — respawn on death, and stop faking crashes ### Other - **release**: 1.8.2 ## [1.8.1] - 2026-07-29 ### Fixed - **windows**: re-register the autostart task on update so it adopts the new launcher ### Other - **release**: 1.8.1 ## [1.8.0] - 2026-07-28 ### Added - **library**: detect zero-content corrupt videos (opt-in) - **library**: add `unarr library stats` — health, composition, quality - **library**: native hygiene sweep + fix content-management leaks ### Other - **release**: 1.8.0 ## [1.7.7] - 2026-07-28 ### Fixed - **windows**: stop console window flashing at boot via wscript VBS launcher ### Other - **release**: 1.7.7 ## [1.7.6] - 2026-07-27 ### Fixed - **windows**: address code-review findings + fix task-XML encoding regression - **windows**: stop console windows flashing on spawned children + harden autostart ### Other - **release**: 1.7.6 ## [1.7.5] - 2026-07-25 ### Other - **release**: 1.7.5 ### Build - **packages**: publish signed .deb and .rpm for amd64 and arm64 ## [1.7.4] - 2026-07-25 ### Other - **release**: 1.7.4 ### Build - **desktop**: publish the tray for linux/arm64 and windows/arm64 ## [1.7.3] - 2026-07-25 ### Fixed - **onboarding**: make install/start failures honest and stop leaving root behind - **onboarding**: stop pointing container users at the interactive wizard - **onboarding**: remove install and first-run dead ends ### Other - **release**: 1.7.3 ## [1.7.2] - 2026-07-24 ### Added - **telemetry**: agent lifecycle events + telemetry opt-out ### Other - **release**: 1.7.2 ## [1.7.1] - 2026-07-24 ### Added - **agent**: report install_type on register (cli/desktop/docker) - **desktop**: play served sting+feature .m3u via playlist= deep-link param ### Fixed - **engine**: classify storage faults distinctly to stop the re-download loop ### Other - **release**: 1.7.1 ## [1.7.0] - 2026-07-23 ### Added - **desktop**: accept sub= in the play deeplink and pass it to the player ### Other - **release**: 1.7.0 ## [1.6.2] - 2026-07-22 ### Fixed - **stream**: unbreak QSV transcodes that produced zero bytes ### Other - **release**: 1.6.2 ## [1.6.1] - 2026-07-21 ### Added - **desktop**: deep-link "Configure agent" to this machine's card - **desktop**: stop making the player list a requirement ### Documentation - **scan**: plan for a resumable, storage-aware library scan - stop offering the browser as a selectable player - document the [desktop] player settings ### Fixed - **desktop**: drop the web player as a selectable choice - **desktop**: honor the configured player, and offer the web one - **desktop**: make "Pause agent" actually stop the agent - **scan**: check the files whose integrity probe runs out of time - **scan**: stop a partial scan from erasing other roots' cached work - **scan**: never report an inconclusive probe as a damaged file ### Other - **release**: 1.6.1 ## [1.6.0] - 2026-07-21 ### Added - **agent**: coexist multiple downloaded versions instead of overwriting - **desktop**: sign in from the tray, without a terminal - **desktop**: show a dialog when a control the user asked for fails - **desktop**: open the web app on a left click of the tray icon - **desktop**: per-item icons for the tray menu - **desktop**: adaptive player-only tray menu - **desktop**: activity badge, player picker, and trial countdown - **desktop**: surface downloads in the tray - **desktop**: unarr:// protocol handler + signed self-update channel - **desktop**: account, plan and version rows with an upgrade CTA - **desktop**: "Start at login" autostart backends - **stream**: keep the HTTPS port published so remote playback has a stable host - **stream**: fMP4-only cast flag + copy→transcode fallback (#23) - **usenet**: stream web-dispatched tasks via the on-the-fly usenet streamer ### CI/CD - **deps**: bump actions/checkout from 4 to 7 (#19) - **deps**: bump actions/download-artifact from 4 to 8 (#18) - **deps**: bump actions/setup-go from 5 to 7 (#17) - **deps**: bump golangci/golangci-lint-action from 7 to 9 (#13) - **deps**: bump docker/login-action from 3 to 4 (#11) ### Changed - **agent**: give the daemon's credential a single owner - **agent**: drop unused LocalState disk persistence - **desktop**: make the modeTray case explicit in main's switch - **desktop,upgrade**: clear the pre-existing arch-gate debt - gofmt sync.go and daemon.go ### Fixed - **agent**: surface the three failures that still rendered as a healthy agent - **agent**: close the gaps a review found in the parking path - **agent**: keep wiping a tombstoned credential when the daemon parks - **agent**: treat terminal failures as questions for the user, not crashes - **agent**: report the HTTPS port the listener actually bound (#25) - **arch**: resolve the gate's base rev instead of hardcoding origin/main (#24) - **ci**: sign and attach the desktop manifest on the dispatch path - **ci**: chain the desktop tray build into the release pipeline - **desktop**: keep the tray usable when a daemon control fails - **desktop**: report a restart loop once, and name it as one - **desktop**: offer sign-in from the account row, whenever there is no account - **desktop**: fail sign-in fast, and offer to report every failure - **desktop**: translate an outdated agent's flag error into what to do - **desktop**: report why a daemon control failed instead of nothing - **desktop**: close player-only mode races from code review - **engine**: clear a task's stale error when it recovers into a live state - **usenet**: assemble segments at their real yEnc offsets - **usenet**: displace a still-probing prior stream on a new claim - **usenet**: serialize progress flushes and reap them on Remove - **webdav**: serve the library mount to the local network only ### Other - **release**: 1.6.0 ### Performance - **usenet**: probe rar-store volume headers concurrently ## [1.5.2] - 2026-07-18 ### Added - **desktop**: stateful tray icon, pause marker, and support/crash reporting ### Changed - **notify**: move desktop notifications to shared internal/notify ### Fixed - **ci**: darwin/amd64 desktop build on macos-15-intel - **daemon**: unarr stop cleans up the stale state a dead daemon left - **daemon**: reap orphaned state file after stop - **desktop**: reap tray-initiated stop orphans regardless of CLI version - **desktop**: build the Windows tray with the GUI subsystem ### Other - **release**: 1.5.2 ## [1.5.1] - 2026-07-17 ### Fixed - **agent**: report config the server can act on, and reload for real ### Other - **release**: 1.5.1 ## [1.5.0] - 2026-07-17 ### Added - **usenet**: direct streaming from Usenet with resilient fallback - **usenet**: activate par2 verify/repair + de-obfuscation on the usenet path - **vpn**: optional P2P kill-switch (downloads.vpn.required) - **webdav**: read-only WebDAV export of the agent library ### Fixed - **vpn**: show exit server after a fail-closed tunnel heals - **webdav**: symlink-safe root check, season-pack grouping, UPnP warning - **webdav**: deterministic collision suffix + drop redundant nolint ### Other - **release**: 1.5.0 ### Merge - read-only WebDAV library export (feat/webdav-readonly) - VPN P2P kill-switch (feat/vpn-killswitch) ## [1.4.0] - 2026-07-16 ### Added - **stream**: auto-pause P2P background download when the stream goes idle ### Other - **release**: 1.4.0 ## [1.3.9-beta] - 2026-07-15 ### Added - **search**: interactive picker + --stream/--no-interactive ### Other - **release**: 1.3.9-beta ## [1.3.8-beta] - 2026-07-15 ### Added - **doctor**: add --fix self-repair for common misconfigurations ### Fixed - **discovery**: route search/stats to TorrentClaw hosts, not unarr.app ### Other - **release**: 1.3.8-beta ## [1.3.7-beta] - 2026-07-12 ### Documentation - /version + /releases/download kept as GitHub redirects, not removed ### Fixed - **hls**: report source_unreachable for remote probe failures + explicit ffprobe timeout ### Other - **release**: 1.3.7-beta - **release**: remove self-hosted ship pipeline; GitHub Actions is the only path ## [1.3.6-beta] - 2026-07-09 ### Fixed - **hls**: wait for subtitle sidecar first byte instead of instant 404 ### Other - **release**: 1.3.6-beta ## [1.3.5-beta] - 2026-07-09 ### Fixed - **hls**: harden copy-vod pass — stat-guard fallback + honor prewarm index budget - **hls**: reset copy-vod watermark on pass restart + dedup codec check - **hls**: kill copy-vod echo via segment-muxer pass + mp4 annexb bsf ### Other - **release**: 1.3.5-beta - **release**: deprecate make ship — releases run on GitHub Actions ### Performance - **hls**: cache copy-vod keyframe index as a scan-time sidecar ## [1.3.4-beta] - 2026-07-07 ### Changed - **library**: gofmt integrity + types doc comments ### Fixed - **docker**: bundle Intel QSV runtime so h264_qsv doesn't core-dump ### Other - **release**: 1.3.4-beta ## [1.3.3-beta] - 2026-07-03 ### Added - **library**: flag truncated/damaged files at scan time ### Other - **release**: 1.3.3-beta ## [1.3.2-beta] - 2026-07-02 ### Fixed - **acme**: re-issue direct-TLS cert when agent_hash no longer matches - **daemon**: harden cert re-issue gate + funnel backoff reset (review findings) - **ship**: define HOMEBREW_TAP_TOKEN for local goreleaser runs ### Other - **release**: 1.3.2-beta ## [1.3.1-beta] - 2026-06-29 ### Added - **config**: default to unarr.app primary, TorrentClaw as failover - **release**: auto-publish Homebrew formula in CI; drop dead Forgejo prune - **stream**: allow Google Cast receiver + wildcard CORS ### Changed - **release**: migrate Homebrew brews → homebrew_casks ### Documentation - **dockerhub**: rewrite for unarr brand + GitHub-native releases ### Fixed - **ci**: check out the dispatched tag in the release workflow - **ship**: run buildx on a host-network builder for CDN egress ### Other - **brew**: prep goreleaser tap block for Unarr-app/homebrew-tap - **release**: 1.3.1-beta ## [1.3.0-beta] - 2026-06-26 ### Added - **agent**: `unarr up --auth-key` redeems a short-lived key for a durable credential - **hls**: remote COPY-VOD — full duration + seek-anywhere for connector/IPTV ### CI/CD - **deps**: bump goreleaser/goreleaser-action from 6 to 7 (#5) - **deps**: bump docker/build-push-action from 6 to 7 (#4) - **deps**: bump actions/checkout from 4 to 7 (#3) - **deps**: bump docker/setup-qemu-action from 3 to 4 (#2) - **deps**: bump docker/setup-buildx-action from 3 to 4 (#1) ### Changed - **engine**: extract COPY-VOD segment generation into its own file - **upgrade**: extract verifyArchive to flatten checksum nesting ### Fixed - **cmd**: make merged up.go build & pass the gate after rebrand ### Other - **release**: 1.3.0-beta ## [1.2.4-beta] - 2026-06-25 ### Documentation - **release**: mirrors are independent, not byte-identical ### Other - **rebrand**: migrate to Unarr-app/unarr-cli + unarr Docker org - **release**: 1.2.4-beta ## [1.2.3-beta] - 2026-06-25 ### Documentation - **readme**: point repo references at Unarr-app/unarr-cli ### Fixed - **upgrade**: pin one mirror per update, never mix checksums across hosts ### Other - **release**: 1.2.3-beta ### Build - reproducible release builds (trimpath + mod_timestamp + pinned toolchain) ## [1.2.2-beta] - 2026-06-25 ### Added - **desktop**: real unarr logo icon + logs via `unarr daemon logs` - **desktop**: agent control + manage/config/logs/docs in the tray menu - **desktop**: minimal system-tray companion (unarr-desktop) — spike - **upgrade**: fail over to the web origin (Hetzner) when GitHub is unreachable - **upgrade**: pull self-update releases directly from GitHub ### CI/CD - **desktop**: GitHub Actions matrix to build unarr-desktop on linux/macOS/windows - **github**: bump golangci-lint-action to v7 for golangci-lint v2 - **github**: migrate release + CI from forgejo/Hetzner to GitHub Actions ### Documentation - **release**: document GitHub-primary + Hetzner-backup dual-publish ritual ### Fixed - **changelog**: point cliff remote_url at Unarr-app/unarr-cli - **desktop**: label 'Open unarr.app' (clearer than 'Open unarr') - **desktop**: run click loop in a goroutine so onReady returns (empty-menu bug) - **engine**: guard task.ResolvedMethod with the task mutex (data race) - **upgrade**: pick latest release by max semver, not the API's first ### Other - **lint**: clear pre-existing golangci v2.11.4 findings for CI green - **release**: 1.2.2-beta ## [1.2.1-beta] - 2026-06-23 ### Added - **hls**: emit WebVTT subtitle sidecars in the EVENT-copy pass (remote sources) ### Other - **release**: 1.2.1-beta ## [1.2.0-beta] - 2026-06-18 ### Added - **agent**: report max_stream_sessions in the register payload - **hls**: seek-anywhere copy-vod via on-demand MPEG-TS segments - **stream**: configurable max concurrent HLS sessions (max_stream_sessions) ### Fixed - **stream**: evict the same-content predecessor before unrelated viewers - **stream**: trust unarr dev origin :3029 in default CORS allowlist ### Other - **release**: 1.2.0-beta - ignore graphify-out/ ### Build - **lint**: add SOLID/complexity gate for new Go code ## [1.1.7-beta] - 2026-06-17 ### Fixed - **engine**: cross-backend integrity guard with retry-then-damaged - **usenet**: fsync delivered files before reporting complete ### Other - **release**: 1.1.7-beta ## [1.1.6-beta] - 2026-06-15 ### Documentation - **install**: point install one-liners at unarr.app - clarify auto mode prefers cached debrid when configured - document preferred_methods ordered download-method list ### Fixed - **debrid**: fsync before verify to stop NFS write-back truncation ### Other - **release**: 1.1.6-beta ## [1.1.5-beta] - 2026-06-14 ### Added - **downloads**: ordered preferred_methods list honored for web tasks ### Other - **release**: 1.1.5-beta ## [1.1.4-beta] - 2026-06-12 ### Added - **agent**: el auto-update difiere hasta que no haya stream activo - **library**: detección de intro/créditos post-scan (skip segments) ### Other - **release**: 1.1.4-beta ## [1.1.3-beta] - 2026-06-11 ### Added - **daemon**: telemetría de salud continua + heartbeat de sesiones copy - **daemon**: lock de instancia única por config dir (flock) ### Other - **release**: 1.1.3-beta ## [1.1.2-beta] - 2026-06-11 ### Added - **stream**: HLS-copy — reemplazo resiliente del remux progresivo ### Fixed - **stream**: hallazgos de la revisión crítica del modo copy - **stream**: no copiar AAC multicanal en modo copy (WebKit lo rechaza igual) - **stream**: downmix estéreo en el audio re-encodeado del modo copy - **stream**: EXT-X-START=0 en el playlist copy mientras crece - **stream**: el modo copy ignora StartSec (offset EVENT rompe iOS nativo) ### Other - **release**: 1.1.2-beta ## [1.1.1-beta] - 2026-06-10 ### Added - **stream**: UPnP-map the HTTPS port for remote direct-TLS (best-effort) ### Fixed - **stream**: iOS exige total concreto en el Content-Range del remux ### Other - **release**: 1.1.1-beta ## [1.1.0-beta] - 2026-06-10 ### Added - **hls**: full-GPU scale_cuda for NVENC SDR downscales ### Fixed - **stream**: delay_moov en el remux para audio AAC con dts negativo - **stream**: no anunciar un total falso mientras el remux crece (loop de re-seek) ### Other - **release**: 1.1.0-beta ## [1.0.9-beta] - 2026-06-10 ### Changed - **daemon**: revisión crítica del reporte de errores de sesión ### Fixed - **daemon**: reportar fallos de arranque de sesión a la web + scan en sesión única ### Other - **release**: 1.0.9-beta ## [1.0.8-beta] - 2026-06-10 ### Added - **hls**: resume-aware first spawn + capped-CRF/CQ rate control - **subtitles**: subtitle-fetch jobs vía sync + auto-fetch opcional en scan ### Fixed - **hls**: forced-idr en NVENC/QSV — los segmentos ignoraban force_key_frames - **hls**: los prewarms ya no desalojan la sesión del espectador + trickplay 12x ### Other - **release**: 1.0.8-beta ## [1.0.7-beta] - 2026-06-08 ### Added - **subs**: resilient subtitle extraction — sidecars, charset, torrent/debrid ### Other - **release**: 1.0.7-beta ## [1.0.6-beta] - 2026-06-07 ### Added - **agent**: per-machine key handoff + revocation handling ### Fixed - **agent**: only treat explicit 410/403 as revocation; honour --config ### Other - **release**: 1.0.6-beta ## [1.0.5-beta] - 2026-06-07 ### Added - **agent**: per-agent direct-TLS cert client + HTTPS listener wiring - **stream**: live transcode telemetry from ffmpeg speed= ### Documentation - **docker**: explain why GPU Vulkan tonemap can't init in-container ### Fixed - **docker**: derive bundled dep arch from dpkg, not TARGETARCH default - **torrent**: suppress noisy UPnP AddPortMapping warnings ### Other - **release**: 1.0.5-beta ## [1.0.4-beta] - 2026-06-04 ### Fixed - **stream**: self-heal host→container path skew in HLS + sidecar handlers ### Other - **release**: 1.0.4-beta ## [1.0.3-beta] - 2026-06-04 ### Fixed - **trickplay**: stop scan-time sprite generation from saturating the host ### Other - **release**: 1.0.3-beta ## [1.0.2-beta] - 2026-06-03 ### Added - **stream**: debrid passthrough for mode=stream tasks (external players) - **trickplay**: scan-time montage sprite for the web scrubber ### Fixed - **release**: keep prerelease suffix in docker smoke-check version compare ## [1.0.1-beta] - 2026-06-03 ### Added - **agent**: report isDocker so the web shows a docker pull command - **release**: sign release checksums (ed25519), enforce + bake pubkey ### Fixed - **stream**: retry thumbnail extraction with output-seek on seek-index failure - **stream**: clamp out-of-range audio-track index to 0:a:0 ### Other - **release**: 1.0.1-beta ## [1.0.0-beta] - 2026-06-03 ### Added - **agent**: event-driven uplink — sync on every state transition - **agent**: hybrid SSE downlink with long-poll fallback - **agent**: give the public API client mirror failover - **agent**: auto-resume interrupted downloads after a daemon restart - **docker**: glibc base with nvenc ffmpeg + par2/7z extractors - **downloads**: pre-flight free-disk guard before each download (hueco medio) - **library**: content fingerprint + path-resilient sync + stream self-heal - **library**: detect corrupt/incomplete files during scan - **seeding**: wire seed ratio/time lifecycle into the torrent daemon - **stream**: enable GPU libplacebo in prod image + gate to real GPU - **stream**: benchmark software encode ceiling at startup - **stream**: GPU HDR tonemap via libplacebo - **stream**: /speedtest endpoint for agent-path bandwidth probing - **stream**: cache scan-time thumbnail frames to the .unarr sidecar - **stream**: cache extracted subtitles to a hidden .unarr sidecar - **stream**: serve embedded text subtitles as on-demand WebVTT - **stream**: optional per-agent HTTPS listener with hot-reloadable cert - **stream**: burn bitmap (PGS/DVB) subtitles into the video via overlay - **stream**: bitrate-sized readahead for play-while-download - **stream**: on-demand frame thumbnails via /thumbnail (hueco medio) - **stream**: refresh expired debrid links mid-stream (hueco #2/2c) - **stream**: transcode debrid sources to HLS from a URL (hueco #2/2b) - **stream**: serve /stream from a debrid HTTPS link (hueco #2/2a) - **stream**: device-aware remux (HEVC/AV1 + non-aac audio) + TTFF timers - **stream**: progressive fMP4 remux source for /stream (hueco #3 / 3b-i) - **stream**: direct-play passthrough for browser-native files - **stream**: authenticate /stream and /hls with signed tokens - **transcode**: tonemap HDR sources to SDR (zscale-gated) ### Documentation - **docker**: add docker-compose.yml for one-command setup - **roadmap**: close the realtime hueco + mark Tailscale-Funnel note stale - **roadmap**: mark unarr localized-route 404 fixed - **roadmap**: mark hueco #2 closed (2a+2b+2c) - **roadmap**: mark hueco #2/2b (HLS-from-URL) closed - **roadmap**: hueco #3 fully closed — 3d resolved as 3d-lite auto-downshift - **roadmap**: hueco #3 3c closed (capability negotiation) + TTFF diagnosis - **roadmap**: hueco #3 phase 3b closed (progressive fMP4 remux) + smoke - **roadmap**: 3b approach = progressive fMP4 remux via /stream - **roadmap**: hueco #3 3a smoke e2e passed + brand-isolation fix noted - **roadmap**: add hueco #4 (pre-transcode on download) design - **roadmap**: hueco #3 phase 3a closed (direct-play) - **roadmap**: design hueco #3 (device-profile + direct-play + ABR) - **roadmap**: design hueco #2 (debrid in the streaming path) ### Fixed - **agent**: surface par2/install/NFS failures instead of degrading silently - **stream**: don't cache transient libplacebo probe timeouts - **stream**: functional libplacebo probe + benchmark hardening - **stream**: clean HLS segments — no B-frames, no scene-cut, CFR - **stream**: report stream failures via StreamError + retry transient stat - **stream**: honor client network-caching in the M3U playlist - **stream**: /critico review fixes for the sidecar cache - **stream**: derive H.264 level from frame macroblocks, not height - **stream**: derive H.264 level from frame macroblocks, not height - **stream**: allow unarr.app origins for /stream + /hls CORS ### Other - **release**: 1.0.0-beta - **release**: 1.0.0-beta - bump version to 0.10.0 (direct-play floor; local build only, no publish) ### Performance - **stream**: run the subtitle/thumbnail prewarm at idle I/O priority - **stream**: extract all text subtitles of a file in one ffmpeg pass ## [0.9.19] - 2026-05-30 ### Fixed - **docker**: three streaming/reliability bugs found in live docker test ### Other - **release**: 0.9.19 ## [0.9.18] - 2026-05-29 ### Fixed - **stream**: make completed torrent files readable (mmap creates 0000) ### Other - **release**: 0.9.18 ## [0.9.17] - 2026-05-27 ### Added - **scripts**: prune Forgejo releases >90 days in ship.sh ### Fixed - **hls**: drop nvenc -tune ll — kills hls segmentation, bump 0.9.17 ### Other - **release**: 0.9.17 ## [0.9.15] - 2026-05-27 ### Added - **sentry**: enhance error handling by skipping user input errors in CaptureError ### Changed - **ci**: point Forgejo URLs at torrentclaw org (post-transfer) - **sentry**: decouple agent import via string-match, rename predicate ### Documentation - **positioning**: reframe unarr around download/stream/transcode, drop misleading search-first wording ### Fixed - **ci**: unset GITHUB_TOKEN so goreleaser uses GITEA_TOKEN - **sentry**: skip "daemon not running" stop/reload errors ### Other - **release**: 0.9.15 - **scripts**: harden release.sh against double-release and inline version bumps - untrack .claude/ (private local config) ## [0.9.14] - 2026-05-27 ### Added - **vaapi**: hybrid CPU-scale + hwupload encode path (QW2, 0.9.14) ### CI/CD - port workflows from .github/ to .forgejo/ (Forgejo Actions) ### Fixed - **daemon**: defensive IsClosed check in watchSessionReady poll loop - **daemon**: use parent ctx for MarkSessionReady so cancel propagates - **release**: move gitea_urls to top-level (goreleaser v2 schema) ## [0.9.13] - 2026-05-27 ### Added - **agent**: session-ready webhook for SSE-driven player handshake (0.9.13) - **agent**: send full transcoder diagnostic in register payload (0.9.12) ### Fixed - **daemon**: defer probeCancel so a panic mid-diagnostic still releases ctx ### Other - **release**: add ship.sh end-to-end pipeline as GH Actions backup - **skills**: add /publish slash command + allow .claude/ in git ## [0.9.11] - 2026-05-27 ### Added - **hls**: pre-segmentación delantada — 2 s segments + async session start (0.9.10) - **hls**: faster first-start — probe cache + tighter encoder presets (0.9.9) ### Changed - **hls**: critico-driven hardening of fase 3.2 ### Fixed - **cors**: allow play from .to / staging / onion mirrors - **library**: classify resolution by width + height, not height alone - **transcode**: make preset libx264-only + restore quality opt-in ### Other - **release**: 0.9.11 ## [0.9.8] - 2026-05-27 ### Fixed - **upgrade**: break auto-apply restart loop (0.9.8) ## [0.9.7] - 2026-05-26 ### Added - **hls**: persistent fMP4 segment cache + integrity + stats (0.9.7) ## [0.9.6] - 2026-05-26 ### Added - **daemon**: auto-apply upgrades when server signals (0.9.6) ## [0.9.5] - 2026-05-26 ### Added - **funnel**: cloudflare quick tunnel embedded subprocess (0.9.5) ## [0.9.4] - 2026-05-26 ### Added - **stream**: retire WebRTC, HLS-only, bump 0.9.4 (**BREAKING**) ## [0.9.3] - 2026-05-26 ### Added - **usenet**: warn at startup when par2 or extractor is missing ### Fixed - **engine**: truncate errorMessage before reporting status - **hls**: clamp ffmpeg bitrate to the level we derive from outputHeight ## [0.9.2] - 2026-05-22 ### Added - **vpn**: unarr vpn command + report/arbitrate the WireGuard slot ## [0.9.1] - 2026-05-21 ### Added - **mirror**: update fallback URLs to use IPFS and remove GitHub Pages ### Fixed - **security**: bump golang.org/x deps and add container CVE scan gate ### Other - **release**: 0.9.1 ## [0.9.0] - 2026-05-21 ### Added - **agent**: add mirror failover, agent client refactor, status 401 detection - **vpn**: local config_file for self-hosted/personal VPN testing - **vpn**: split-tunnel torrent traffic through managed WireGuard ### CI/CD - deploy install scripts to GitHub Pages ### Documentation - **docker**: refresh Docker Hub README + sync description in CI ### Fixed - **security**: CORS allowlist, URL scheme guard, state perms, ZIP slip, mirror docs - **security**: UPnP opt-in, bounded SSE reader, signed self-update - **security**: harden HLS session IDs, /health disclosure, archive password handling - **upgrade**: fetch releases from TorrentClaw app, not GitHub ### Other - **pages**: add .nojekyll to disable Jekyll processing - **pages**: set custom domain unarr.torrentclaw.com - **release**: 0.9.0 ## [0.8.1] - 2026-05-08 ### Added - **config**: set default values for WebRTC and transcoding in minimal TOML config - **transcode**: dynamic H.264 level + HW probe + capability reporting ### Changed - **streaming**: improve signal handling and remove unused components ### Fixed - **self-update**: auto-restart live daemon after upgrade - **streaming**: allow HLS sessions when webrtc disabled ### Other - **gitignore**: add dist-ffbinaries to ignored files - **release**: 0.8.1 ## [0.8.0] - 2026-05-08 ### Added - **mediainfo**: ResolveFFmpeg + DownloadFFmpeg mirroring ffprobe pattern - **release**: bundle ffmpeg + ffprobe in tarballs and Docker image - **seed-file**: unarr-side handler for browser-on-demand seeding (Fase 4.7.c) - **stream**: per-session quality cap from web - **stream**: real-time transcoding for non-browser-decodable codecs - **stream**: pion-based WebRTC byte streamer for browser playback - **streaming**: seek-restart, single-session, idle sweeper, probe.json - **streaming**: add HLS transport pipeline (daemon side) - **streaming**: ffmpeg transcoding pipeline (direct play / fMP4 / HW accel) - **torrent**: act as WebTorrent peer for browser ↔ unarr P2P streaming - **wstracker-probe**: -seed FILE mode for browser ↔ unarr e2e validation ### Fixed - **streaming**: bounded ffmpeg auto-restart + tmpdir gc + probe/stderr safety - **transcoder**: force aac stereo 48khz + frag_duration for mse compat - **transcoder**: force main profile + setparams Rec.709 + serveRange wait - **transcoder**: correct scale filter + always force yuv420p ### Other - **release**: 0.8.0 - **streaming**: post-review fixes — race lock, dead branch, stderr cap - **torrent**: bump anacrolix log level Critical → Warning for visibility ## [0.7.0] - 2026-04-10 ### Added - **daemon**: enhance service management with start, stop, restart, and status commands for Windows ### Other - **release**: 0.7.0 ## [0.6.8] - 2026-04-10 ### Added - **library**: add server-driven file deletion with allow_delete config ### Other - **release**: 0.6.8 ## [0.6.7] - 2026-04-10 ### Added - **scan**: always scan downloads + organize dirs, deduplicate child paths ### Other - **release**: 0.6.7 ## [0.6.6] - 2026-04-09 ### Fixed - **docker**: switch ffprobe download from johnvansickle.com to BtbN/FFmpeg-Builds - **stream**: fix black screen on remote/Tailscale streaming ### Other - **release**: 0.6.6 ## [0.6.5] - 2026-04-09 ### Fixed - **upgrade**: retry download on transient network errors with user feedback ### Other - **release**: 0.6.5 ## [0.6.4] - 2026-04-09 ### Fixed - **daemon**: report error status when stream path is rejected ### Other - **release**: 0.6.4 ## [0.6.3] - 2026-04-09 ### Fixed - **library**: use native arm64 ffprobe on Apple Silicon (osx-arm-64) ### Other - **release**: 0.6.3 ## [0.6.2] - 2026-04-09 ### Added - **library**: resilient scan for large libraries and better ffprobe errors ### Other - **release**: 0.6.2 - ignore local config/ directory ## [0.6.1] - 2026-04-08 ### Added - **wake**: long-poll wake listener for instant CLI sync ### Fixed - resolve deadlock, data races and path traversal vulnerabilities ## [0.6.0] - 2026-04-08 ### Added - **sync**: replace WS+DO transport with unified HTTP sync ### Fixed - **ws**: add ping/pong keepalive and read deadline to detect zombie connections ### Other - **release**: 0.6.0 ## [0.5.5] - 2026-04-07 ### Added - **agent**: send stream port and IPs in register request - **stream**: report duration and position in watch progress - **stream**: trackingReader with byte-based progress and rate limiting ### Fixed - **daemon**: cancel watch reporter on stream switch and re-notify ready ### Other - **release**: 0.5.5 ## [0.5.4] - 2026-04-07 ### Fixed - **stream**: use platform-specific socket options for Windows cross-compilation ### Other - **release**: 0.5.4 ## [0.5.3] - 2026-04-07 ### Added - **stream**: persistent stream server with file swapping ### Other - **release**: 0.5.3 ## [0.5.2] - 2026-04-07 ### Added - **stream**: report multi-network URLs for smart resolution ### Other - **release**: 0.5.2 ## [0.5.1] - 2026-04-07 ### Added - **daemon**: add on-demand library scan via heartbeat and WebSocket ### Fixed - **agent**: add retry with backoff and WebSocket connect for daemon registration - **daemon**: report failed status on stream request errors - **daemon**: use correct systemd user target and isolate test cache - **stream**: prevent duplicate events from killing active stream server ### Other - **release**: 0.5.1 ## [0.5.0] - 2026-04-06 ### Added - **organize**: use server metadata for file organization and subtitle handling - **stream**: add NAT-PMP port mapping for remote downloads ### Other - **release**: 0.5.0 - **release**: add changelog generation and release automation ## [0.4.1] - 2026-04-01 ### Added - **cli**: add login command and refactor shared helpers - **stream**: report watch progress to API via HTTP Range tracking ### Fixed - **ci**: fix lint errors and pin CI to Go 1.25 - **lint**: remove unused newStubCmd function ### Other - **cli**: remove moreseed stub command - **cli**: remove redundant stub commands (monitor, open, add, compare) ## [0.4.0] - 2026-03-31 ### Added - **cli**: upgrade command, rich status, and version cache ### Fixed - **progress**: always report status transitions and poll for control signals ## [0.3.7] - 2026-03-31 ### CI/CD - **docker**: remove dockerhub-description sync step ## [0.3.6] - 2026-03-31 ### CI/CD - **deps**: bump docker/metadata-action from 5 to 6 - **deps**: bump docker/setup-qemu-action from 3 to 4 - **deps**: bump docker/login-action from 3 to 4 - **deps**: bump docker/build-push-action from 6 to 7 - **deps**: bump codecov/codecov-action from 5 to 6 - **docker**: add Docker Hub description sync and DOCKERHUB.md ### Fixed - **ci**: upgrade golangci-lint to v2.11.3 for Go 1.25 support - **docker**: upgrade alpine packages to patch CVE-2025-60876 and CVE-2026-27171 - **lint**: use default:none to disable errcheck, fix all gofmt and exhaustive - **lint**: disable errcheck, tune gosec/exclusions for codebase state - **lint**: configure linters for codebase maturity, fix gofmt and ineffassign - **lint**: exclude common fire-and-forget patterns from errcheck - **lint**: resolve errcheck and bodyclose warnings for golangci-lint v2 ## [0.3.5] - 2026-03-30 ### Changed - migrate lint config to v2, remove daemon auto-upgrade, add trust badges ## [0.3.3] - 2026-03-30 ### Fixed - **ci**: remove go-client checkout steps ## [0.3.2] - 2026-03-30 ### Added - **init**: add 60s countdown, skip key, and cancel detection to browser auth ### CI/CD - **release**: add Docker Hub publish and VirusTotal scan jobs ### Documentation - add beta notice, fix install URLs to get.torrentclaw.com ### Fixed - **ci**: fix virustotal job condition syntax - **docker**: simplify Dockerfile for CI builds (no local go-client) - **release**: disable homebrew tap (needs PAT, not GITHUB_TOKEN) ### Other - re-enable homebrew tap in goreleaser ## [0.3.1] - 2026-03-30 ### Fixed - **build**: unused variable in Windows process check - **release**: disable homebrew tap until repo is created ### Other - rename module from torrentclaw-cli to unarr ### Build - remove UPX compression (antivirus false positives, startup penalty) ## [0.3.0] - 2026-03-29 ### Added - **agent**: add WebSocket transport with HTTP fallback - **auth**: browser-based CLI authentication (like Claude Code) - **daemon**: add auto-scan, force start, and stall timeout default - **debrid**: add HTTPS downloader for debrid direct URLs - **stream**: UPnP port forwarding for remote video playback - **usenet**: implement full NNTP download pipeline - add migrate command, media server detection, and debrid auto-config - replace setup with init wizard + interactive config menu - add clean command to remove temp files, logs, and cached data - add Sentry error reporting - improve daemon resilience, streaming, and usenet downloads - initial commit — unarr CLI ### Changed - extract BuildSyncItems to library package, remove duplication ### Documentation - improve CLI help, shell completion, and README ### Fixed - **torrent**: expand tracker list, add DHT persistence and configurable timeouts - force-start tasks bypass HasCapacity check in dispatch loop - add panic recovery to auto-scan, cap DHT nodes at 200 - harden usenet/debrid downloaders from critico review ### Build - add -s -w -trimpath to Makefile, add build-small target with UPX [1.22.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.22.0...v1.22.1 [1.22.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.21.1...v1.22.0 [1.21.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.21.0...v1.21.1 [1.21.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.20.4...v1.21.0 [1.20.4]: https://github.com/Unarr-app/unarr-cli/compare/v1.20.3...v1.20.4 [1.20.3]: https://github.com/Unarr-app/unarr-cli/compare/v1.20.2...v1.20.3 [1.20.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.20.1...v1.20.2 [1.20.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.20.0...v1.20.1 [1.20.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.19.0...v1.20.0 [1.19.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.18.2...v1.19.0 [1.18.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.18.1...v1.18.2 [1.18.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.18.0...v1.18.1 [1.18.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.17.1...v1.18.0 [1.17.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.17.0...v1.17.1 [1.17.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.16.1...v1.17.0 [1.16.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.16.0...v1.16.1 [1.16.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.15.4...v1.16.0 [1.15.4]: https://github.com/Unarr-app/unarr-cli/compare/v1.15.3...v1.15.4 [1.15.3]: https://github.com/Unarr-app/unarr-cli/compare/v1.15.2...v1.15.3 [1.15.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.15.1...v1.15.2 [1.15.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.15.0...v1.15.1 [1.15.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.11...v1.15.0 [1.14.11]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.10...v1.14.11 [1.14.10]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.9...v1.14.10 [1.14.9]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.8...v1.14.9 [1.14.8]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.7...v1.14.8 [1.14.7]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.6...v1.14.7 [1.14.6]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.5...v1.14.6 [1.14.5]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.4...v1.14.5 [1.14.4]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.3...v1.14.4 [1.14.3]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.2...v1.14.3 [1.14.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.1...v1.14.2 [1.14.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.14.0...v1.14.1 [1.14.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.13.0...v1.14.0 [1.13.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.12.1...v1.13.0 [1.12.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.12.0...v1.12.1 [1.12.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.11...v1.12.0 [1.11.11]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.10...v1.11.11 [1.11.10]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.9...v1.11.10 [1.11.9]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.8...v1.11.9 [1.11.8]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.7...v1.11.8 [1.11.7]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.6...v1.11.7 [1.11.6]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.5...v1.11.6 [1.11.5]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.4...v1.11.5 [1.11.4]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.3...v1.11.4 [1.11.3]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.2...v1.11.3 [1.11.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.1...v1.11.2 [1.11.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.11.0...v1.11.1 [1.11.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.10.4...v1.11.0 [1.10.4]: https://github.com/Unarr-app/unarr-cli/compare/v1.10.3...v1.10.4 [1.10.3]: https://github.com/Unarr-app/unarr-cli/compare/v1.10.2...v1.10.3 [1.10.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.10.1...v1.10.2 [1.10.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.10.0...v1.10.1 [1.10.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.9.0...v1.10.0 [1.9.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.8.2...v1.9.0 [1.8.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.8.1...v1.8.2 [1.8.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.8.0...v1.8.1 [1.8.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.7.7...v1.8.0 [1.7.7]: https://github.com/Unarr-app/unarr-cli/compare/v1.7.6...v1.7.7 [1.7.6]: https://github.com/Unarr-app/unarr-cli/compare/v1.7.5...v1.7.6 [1.7.5]: https://github.com/Unarr-app/unarr-cli/compare/v1.7.4...v1.7.5 [1.7.4]: https://github.com/Unarr-app/unarr-cli/compare/v1.7.3...v1.7.4 [1.7.3]: https://github.com/Unarr-app/unarr-cli/compare/v1.7.2...v1.7.3 [1.7.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.7.1...v1.7.2 [1.7.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.7.0...v1.7.1 [1.7.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.6.2...v1.7.0 [1.6.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.6.1...v1.6.2 [1.6.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.6.0...v1.6.1 [1.6.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.5.2...v1.6.0 [1.5.2]: https://github.com/Unarr-app/unarr-cli/compare/v1.5.1...v1.5.2 [1.5.1]: https://github.com/Unarr-app/unarr-cli/compare/v1.5.0...v1.5.1 [1.5.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.4.0...v1.5.0 [1.4.0]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.9-beta...v1.4.0 [1.3.9-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.8-beta...v1.3.9-beta [1.3.8-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.7-beta...v1.3.8-beta [1.3.7-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.6-beta...v1.3.7-beta [1.3.6-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.5-beta...v1.3.6-beta [1.3.5-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.4-beta...v1.3.5-beta [1.3.4-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.3-beta...v1.3.4-beta [1.3.3-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.2-beta...v1.3.3-beta [1.3.2-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.1-beta...v1.3.2-beta [1.3.1-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.3.0-beta...v1.3.1-beta [1.3.0-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.2.4-beta...v1.3.0-beta [1.2.4-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.2.3-beta...v1.2.4-beta [1.2.3-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.2.2-beta...v1.2.3-beta [1.2.2-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.2.1-beta...v1.2.2-beta [1.2.1-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.2.0-beta...v1.2.1-beta [1.2.0-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.1.7-beta...v1.2.0-beta [1.1.7-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.1.6-beta...v1.1.7-beta [1.1.6-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.1.5-beta...v1.1.6-beta [1.1.5-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.1.4-beta...v1.1.5-beta [1.1.4-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.1.3-beta...v1.1.4-beta [1.1.3-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.1.2-beta...v1.1.3-beta [1.1.2-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.1.1-beta...v1.1.2-beta [1.1.1-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.1.0-beta...v1.1.1-beta [1.1.0-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.9-beta...v1.1.0-beta [1.0.9-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.8-beta...v1.0.9-beta [1.0.8-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.7-beta...v1.0.8-beta [1.0.7-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.6-beta...v1.0.7-beta [1.0.6-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.5-beta...v1.0.6-beta [1.0.5-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.4-beta...v1.0.5-beta [1.0.4-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.3-beta...v1.0.4-beta [1.0.3-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.2-beta...v1.0.3-beta [1.0.2-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.1-beta...v1.0.2-beta [1.0.1-beta]: https://github.com/Unarr-app/unarr-cli/compare/v1.0.0-beta...v1.0.1-beta [1.0.0-beta]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.19...v1.0.0-beta [0.9.19]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.18...v0.9.19 [0.9.18]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.17...v0.9.18 [0.9.17]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.15...v0.9.17 [0.9.15]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.14...v0.9.15 [0.9.14]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.13...v0.9.14 [0.9.13]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.11...v0.9.13 [0.9.11]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.8...v0.9.11 [0.9.8]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.7...v0.9.8 [0.9.7]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.6...v0.9.7 [0.9.6]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.5...v0.9.6 [0.9.5]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.4...v0.9.5 [0.9.4]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.3...v0.9.4 [0.9.3]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.2...v0.9.3 [0.9.2]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.1...v0.9.2 [0.9.1]: https://github.com/Unarr-app/unarr-cli/compare/v0.9.0...v0.9.1 [0.9.0]: https://github.com/Unarr-app/unarr-cli/compare/v0.8.1...v0.9.0 [0.8.1]: https://github.com/Unarr-app/unarr-cli/compare/v0.8.0...v0.8.1 [0.8.0]: https://github.com/Unarr-app/unarr-cli/compare/v0.7.0...v0.8.0 [0.7.0]: https://github.com/Unarr-app/unarr-cli/compare/v0.6.8...v0.7.0 [0.6.8]: https://github.com/Unarr-app/unarr-cli/compare/v0.6.7...v0.6.8 [0.6.7]: https://github.com/Unarr-app/unarr-cli/compare/v0.6.6...v0.6.7 [0.6.6]: https://github.com/Unarr-app/unarr-cli/compare/v0.6.5...v0.6.6 [0.6.5]: https://github.com/Unarr-app/unarr-cli/compare/v0.6.4...v0.6.5 [0.6.4]: https://github.com/Unarr-app/unarr-cli/compare/v0.6.3...v0.6.4 [0.6.3]: https://github.com/Unarr-app/unarr-cli/compare/v0.6.2...v0.6.3 [0.6.2]: https://github.com/Unarr-app/unarr-cli/compare/v0.6.1...v0.6.2 [0.6.1]: https://github.com/Unarr-app/unarr-cli/compare/v0.6.0...v0.6.1 [0.6.0]: https://github.com/Unarr-app/unarr-cli/compare/v0.5.5...v0.6.0 [0.5.5]: https://github.com/Unarr-app/unarr-cli/compare/v0.5.4...v0.5.5 [0.5.4]: https://github.com/Unarr-app/unarr-cli/compare/v0.5.3...v0.5.4 [0.5.3]: https://github.com/Unarr-app/unarr-cli/compare/v0.5.2...v0.5.3 [0.5.2]: https://github.com/Unarr-app/unarr-cli/compare/v0.5.1...v0.5.2 [0.5.1]: https://github.com/Unarr-app/unarr-cli/compare/v0.5.0...v0.5.1 [0.5.0]: https://github.com/Unarr-app/unarr-cli/compare/v0.4.1...v0.5.0 [0.4.1]: https://github.com/Unarr-app/unarr-cli/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/Unarr-app/unarr-cli/compare/v0.3.7...v0.4.0 [0.3.7]: https://github.com/Unarr-app/unarr-cli/compare/v0.3.6...v0.3.7 [0.3.6]: https://github.com/Unarr-app/unarr-cli/compare/v0.3.5...v0.3.6 [0.3.5]: https://github.com/Unarr-app/unarr-cli/compare/v0.3.3...v0.3.5 [0.3.3]: https://github.com/Unarr-app/unarr-cli/compare/v0.3.2...v0.3.3 [0.3.2]: https://github.com/Unarr-app/unarr-cli/compare/v0.3.1...v0.3.2 [0.3.1]: https://github.com/Unarr-app/unarr-cli/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/Unarr-app/unarr-cli/releases/tag/v0.3.0