Unpackerr v1 is the release after 0.16.1. It adds a web UI and HTTP API on port 5656, and it changes how config, Whisparr, folder watching, metrics, and a few extract limits work. Read this before you pull latest.
- Upgrade guide: https://unpackerr.zip/docs/install/upgrading
- Web UI: https://unpackerr.zip/docs/install/web-ui
Before you upgrade
- The HTTP server starts whenever
listen_addris set. The default is0.0.0.0:5656, so an old config that never set it turns the UI on. Setlisten_addr = ""to keep it off. First start with an emptyui_passwordprints a one-timeadminpassword in the log. Change it in the UI, or rununpackerr --reset. - Saving in the UI rewrites the config file. The process user has to be able to write that file. Docker and unRAID need a
/configmount or those saves disappear. - Whisparr is no longer its own app. Move
[[whisparr]]/UN_WHISPARR_*to a Radarr instance:[radarr.whisparr]andUN_RADARR_whisparr_*. - Starr apps, folders, webhooks, and command hooks are named keys (
[sonarr.uhd],UN_SONARR_uhd_URL). Old[[sonarr]]/[[folder]]tables still load as0,1, …. A Save in the UI rewrites them. - Env still wins. A field set by
UN_*is locked in the UI until you remove that variable. - Prometheus
/metricsnow requires an API key withsystem:metrics:read(Authorization: BearerorX-Api-Key). - Docker no longer auto-polls folders every second. Global
folders.interval/UN_FOLDERS_INTERVALis ignored. Each watch path has its owninterval(default off, fsnotify only). On Docker or CIFS setinterval = "1s"or new archives never show up. - unRAID: add an appdata path at
/config, publish 5656, and drop the oldUN_SONARR_*/UN_RADARR_*/UN_LIDARR_*variables after those apps exist in the config file. The Community Applications template update is selfhosters/unRAID-CA-templates#695 - you can just update the container. The golift image uses--user, notPUID/PGID.
Web UI and API
- Dashboard (live queue, retry / forget), history, logs, settings, system, and OpenAPI at
/api/openapi.json. - Settings can edit Starr apps, folders, webhooks, command hooks, and the web server. Each row has a Test button that probes without saving.
- Login is a local password, a reverse-proxy header, or
noauth. API keys have roles. A first start can generate an admin key for/metricsand scripts. - Queue and history survive a restart (JSONL). Starr WAITING comes back on the next poll. Folder rows restore, including delete-after, retries, and interrupted extracts.
- Tray / menu bar on Windows and macOS opens the UI, and can change the password.
- Languages: English, Spanish, Greek, Dutch.
Webhooks
- Paste a URL and the template is detected: Notifiarr, Discord, Telegram, Slack, Pushover, Gotify, ntfy, Apprise, Mattermost.
- Discord and Telegram edit the previous message as the extract moves (
update, default on). Setupdate = falsefor a new post per event. - Notifiarr:
https://notifiarr.com/api/v1/notification/unpackerrplusheaders.X-Api-Key. A key still sitting in the URL path is moved to that header on start. - Extra POST headers, global custom IDs (
[hooks.custom_ids]), and event titles.
Extractor
Ships xtractr v0.8.0 (0.16.1 shipped v0.6.0).
- Starr uncompressed ratio cap is 7.5:1 (was 5:1). Folders stay unlimited unless you set
max_ratio. - Nested archives no longer add the inner archive’s own bytes into that ratio, so packed-inside-packed downloads stop failing the cap.
- Electron
.asararchives extract. - Lidarr
split_flacsplits FLAC and APE cue sheets. APE output can be APE, WAV, or FLAC (ape_format). Older Monkey’s Audio (3.81–3.97) splits. - Watched folders can keep archive execute bits with
preserve_exec(default off). Starr stays onfile_modeonly. - An archive at the watch root is still found when recursion is off and an exclude suffix is set.
- ISO open failures no longer panic. A Blu-ray ISO reports the UDF error instead of a generic failure.
Also in this release
- Per-folder
wait_extensions(stay WAITING while.part/.crdownloadis in the item’s top folder) andskip_empty. - Queue shows extraction ETA, the archive, and delay countdowns.
- SIGHUP reopens log files for logrotate.
makeworks again for forks that are not on GoReleaser Pro.
Full Changelog: v0.16.1...v1.0.0
Merged Contributions
This list does not include the changes in the xtractr library.
- Give the daemon /etc/unpackerr and drop Python from release bash by @davidnewhall in #676
- reopen log files on SIGHUP for logrotate by @davidnewhall in #677
- Start the HTTP server from listen_addr, not metrics by @davidnewhall in #678
- Extract configdef and write live TOML from definitions.yml by @davidnewhall in #679
- Add UI password hashing, CLI reset, and tray change-password by @davidnewhall in #680
- Add named API keys, custom roles, and permission constants by @davidnewhall in #681
- Add HTTP login, sessions, and a generated admin API key by @davidnewhall in #682
- Add GET /api/stats, GET /api/system, and authenticated /metrics by @davidnewhall in #683
- Add JSONL extract history and GET /api/queue and /api/history by @davidnewhall in #685
- Add queue retry/forget and history delete/clear API actions by @davidnewhall in #686
- Add per-section GET /api/config/{section} by @davidnewhall in #687
- Add per-section PUT /api/config/{section} with main-loop apply and idle restart by @davidnewhall in #692
- Serve a committed OpenAPI 3 spec at /api/openapi.json by @davidnewhall in #693
- Cleaning up by @davidnewhall in #696
- Convert to stdlib mux by @davidnewhall in #697
- Keep signexe next to the other GitHub Actions scripts. by @davidnewhall in #695
- Reject new filepath: values on config PUT by @davidnewhall in #699
- Update module code.cloudfoundry.org/bytefmt to v0.88.0 by @renovate[bot] in #698
- Update docker/setup-qemu-action action to v4.3.0 by @renovate[bot] in #700
- Update module golang.org/x/mod to v0.41.0 by @renovate[bot] in #701
- Update module golang.org/x/sys to v0.48.0 by @renovate[bot] in #702
- Add GET /api/config/env and bump golift.io/cnfg to v0.4.0 by @davidnewhall in #704
- Require KDF for UI password PUT and expose Trust fields on /api/auth/me by @davidnewhall in #705
- Add GET/POST /api/browse for listing and creating folders by @davidnewhall in #706
- Add GET /api/config/help and GET /api/system/export by @davidnewhall in #707
- Restore Makefile and source-build Docker for forks by @davidnewhall in #708
- Put permission verbs last (area:resource:verb) by @davidnewhall in #710
- Pin docker/dockerfile Docker tag to ecfaec9 by @renovate[bot] in #709
- Share Starr validate/get/have behind starrApp by @davidnewhall in #711
- Share checkStarrQueue behind starrApp by @davidnewhall in #712
- Share logExtra, crossPlatformBase, and hookCounts by @davidnewhall in #713
- Move extract types into pkg/extract by @davidnewhall in #714
- Move webhook and command-hook runtime into pkg/hooks by @davidnewhall in #715
- Move folder watcher and path tracking into pkg/folders by @davidnewhall in #716
- Show each Starr max_bytes in the startup dump by @davidnewhall in #718
- Add optional Starr instance names for logs, hooks, and the dashboard by @davidnewhall in #719
- Fold Whisparr config into Radarr by @davidnewhall in #720
- Fix folder watcher dest re-extract and waiting queue by @davidnewhall in #721
- Do not panic when a Starr HTTP client is nil by @davidnewhall in #723
- Count forgotten deleted items and log forgotten imports by @davidnewhall in #724
- Drop Whisparr config and env support by @davidnewhall in #725
- Keep env-only list rows across config PUT by @davidnewhall in #722
- Expose Starr queue snapshots on GET /api/stats by @davidnewhall in #726
- Restore Starr queue from history JSONL after restart by @davidnewhall in #727
- Identify Starr, folder, and hook instances by map key by @davidnewhall in #729
- Refuse empty folder paths and name Starr skip errors by instance key by @davidnewhall in #730
- Update module golift.io/starr to v1.4.0 by @renovate[bot] in #732
- Update module code.cloudfoundry.org/bytefmt to v0.89.0 by @renovate[bot] in #734
- Add a live websocket hub and log file API by @davidnewhall in #731
- Map a proxy role header onto webserver roles by @davidnewhall in #735
- Do not restart general PUT for env clamp or mode padding by @davidnewhall in #736
- Update golift.io/rotatorr digest to a77ea24 by @renovate[bot] in #740
- Keep in-flight history rows as resume checkpoints by @davidnewhall in #737
- Add config section test probes without persisting by @davidnewhall in #738
- Set a urlbase cookie on the SPA index by @davidnewhall in #739
- Update module golang.org/x/crypto to v0.57.0 by @renovate[bot] in #746
- Wire Node into CI so go generate can embed the SPA by @davidnewhall in #741
- Add login and the hash-router shell so the UI can authenticate by @davidnewhall in #742
- Add the live dashboard so the UI shows the unpack queue by @davidnewhall in #743
- Add system, logs, and API docs to the embedded UI by @davidnewhall in #745
- Add settings forms so the UI can edit on-disk config by @davidnewhall in #744
- Fix a bug on the Trust UI page. by @davidnewhall in #748
- Update dependency @types/node to v22.20.2 by @renovate[bot] in #751
- Allow filepath: on PUT and slim the tray and System page by @davidnewhall in #749
- Translate extract statuses and fix dashboard accessibility by @davidnewhall in #755
- Copy folder retry counts onto history items by @davidnewhall in #754
- Ignore extra proxy groups and show Logins Disabled by @davidnewhall in #756
- Comment Sonarr and Radarr out of the default config by @davidnewhall in #757
- Restore watched-folder extracts after a restart by @davidnewhall in #758
- Skip JSONL without a log or config file, and lighten dark outline buttons by @davidnewhall in #762
- Update dependency vite to v8.3.0 by @renovate[bot] in #759
- Update dependency @types/node to v24 by @renovate[bot] in #760
- Show queue extraction ETA, archive, and delay countdowns by @davidnewhall in #761
- Move folder poll interval onto each watch path by @davidnewhall in #763
- Wait for incomplete downloads and skip empty folders by @davidnewhall in #764
- Show queue item details without file lists on every snapshot by @davidnewhall in #765
- Stamp Starr polls, keep hook extract Data, persist folder retry by @davidnewhall in #766
- Dashboard Starr ages, Windows path fold, quieter poll logs by @davidnewhall in #767
- Add global hook payload IDs and event titles by @davidnewhall in #768
- Add Create for webhook template files by @davidnewhall in #769
- Upgrade to typescript 6. by @davidnewhall in #770
- Count webhook and command-hook failures on each extract so item detail can show them. by @davidnewhall in #771
- Detect webhook templates from URL and add ntfy, Apprise, and Mattermost builtins. by @davidnewhall in #772
- Edit Discord and Telegram webhook messages as an extract progresses. by @davidnewhall in #773
- Reshape the webhook form to the detected template and add in-app setup guides. by @davidnewhall in #774
- Keep watched archives searchable when recursion is disabled by @davidnewhall in #778
- Build against the xtractr commit that keeps extracts when ReadDir is empty by @davidnewhall in #777
- Add extra HTTP headers on webhook POSTs. by @davidnewhall in #775
- Update module golift.io/starr to v1.4.1 by @renovate[bot] in #779
- Update module code.cloudfoundry.org/bytefmt to v0.90.0 by @renovate[bot] in #780
- Move Notifiarr path API keys into X-Api-Key. by @davidnewhall in #781
- Update docker/build-push-action action to v7.4.0 by @renovate[bot] in #782
- Update docker/setup-buildx-action action to v4.4.0 by @renovate[bot] in #783
- Update docker/setup-qemu-action action to v4.4.0 by @renovate[bot] in #785
- Update go deps by @davidnewhall in #784
- Update docker/setup-buildx-action action to v4.4.1 by @renovate[bot] in #786
- Update alpine:3.24 Docker digest to 294b683 by @renovate[bot] in #787
- Update golang:1.27-alpine Docker digest to 8a5910f by @renovate[bot] in #788
- Update golift.io/rotatorr digest to ca6f760 by @renovate[bot] in #790
- Bump brace-expansion from 5.0.9 to 5.0.12 in /frontend by @dependabot[bot] in #791
- Let Lidarr choose how an APE cue split is written by @davidnewhall in #789
- Update dependency @sveltejs/vite-plugin-svelte to v7.3.1 by @renovate[bot] in #792
- Update dependency vite to v8.3.1 by @renovate[bot] in #793
- Update dependency @types/node to v24.19.0 - autoclosed by @renovate[bot] in #794
- update go, go mods, linter, fix lint by @davidnewhall in #795
- Raise the Starr extract ratio and pick up the nested-archive xtractr fix by @davidnewhall in #797
- Bump devalue from 5.9.2 to 5.9.4 in /frontend by @dependabot[bot] in #798
- Update docker/dockerfile:1 Docker digest to 4edf897 by @renovate[bot] in #801
- Update module code.cloudfoundry.org/bytefmt to v0.93.0 by @renovate[bot] in #805
- Update module golang.org/x/sys to v0.49.0 by @renovate[bot] in #810
- Update actions/upload-artifact action to v7.0.2 by @renovate[bot] in #812
- Update actions/download-artifact action to v8.0.2 by @renovate[bot] in #811
- Update module github.com/prometheus/client_golang to v1.25.0 by @renovate[bot] in #814
- Update actions/setup-node action to v7.1.0 by @renovate[bot] in #813
- Update dependency vite to v8.3.4 by @renovate[bot] in #802
- Update dependency rapidoc to v10 by @renovate[bot] in #804
- Update dependency phosphor-svelte to v3.1.1 by @renovate[bot] in #815
- Update dependency @types/node to v24.19.1 by @renovate[bot] in #803
- Update dependency svelte to v5.57.2 by @renovate[bot] in #809
- Update module golang.org/x/crypto to v0.58.0 by @renovate[bot] in #816
- Update module golang.org/x/mod to v0.42.0 by @renovate[bot] in #818
- Update golang:1.27-alpine Docker digest to f92b6ef by @renovate[bot] in #819
- Update dependency @types/node to v24.19.2 by @renovate[bot] in #817
- Fix file_mode and dir_mode descriptions by @davidnewhall in #800
- Update module code.cloudfoundry.org/bytefmt to v0.94.0 by @renovate[bot] in #821
- Update goreleaser/goreleaser-action action to v7.3.0 by @renovate[bot] in #820
- Update dependency golangci/golangci-lint to v2.15 by @renovate[bot] in #824
- Gate npm automerge on frontend tests by @davidnewhall in #826
- Bump fast-uri from 3.1.8 to 3.1.9 in /frontend by @dependabot[bot] in #827
- Bump undici and @scalar/openapi-parser in /frontend by @dependabot[bot] in #828
- Bump zod from 4.6.5 to 4.6.7 in /frontend by @dependabot[bot] in #829
- Update dependency rapidoc to v11 by @renovate[bot] in #822
- Update dependency svelte-check to v4.7.7 by @renovate[bot] in #823
Full Changelog: v0.16.1...v1.0.0