Repository navigation
Changelog
Breaking changes
- Backup history uses a new storage format. If you plan to go back to an earlier qui after you upgrade, export the backup runs that you need first, because restore fails for every run after a downgrade. Exported archives import on any version.
- Automation rule JSON is decoded strictly. A create, update, import, or dry run now returns 400 for an unknown key, a key with the wrong case, or a value of the wrong type. An import with
intervalSecondsbelow 60 also fails, so remove these keys from your scripts and saved JSON files. - Rule conditions are checked against a field table. qui now rejects an unknown field or operator and a value that the field does not list, such as
seedingfor a state. To save a changed condition, fix the line that the error names. - Group IDs are checked on save. When you edit a rule, the save fails if
grouping.defaultGroupId, an actiongroupId, or a score rule names a group that does not exist, or a built-in ID with different capitals. Change the ID to an existing group in Edit as JSON.
Highlights
- Automation rules that say what is wrong. qui lists each mistake in a rule with its JSON path, so a typo no longer saves a rule that never matches.
- Byte and speed units in your language. Units, decimal separators, and bit rates follow the interface language, for example
1,5 Gioin French. - Lighter backups. Each backup stores only the torrents that changed, so backups write about 53x less WAL on Postgres.
- Update guidance for every setup. Install update shows on every setup, and the dialog explains why automatic installation is unavailable and gives manual steps.
- Hardlink and cross-seed fixes. Delete rules on
HARDLINK_SCOPE_CROSSnow delete the matching torrents, and season-less batches cross-seed against tracker names with a year. - Fixes and polish. Row actions stay in view in wide tables, a license portal link at the activation limit, correct size labels on the backups page, fewer cached search warnings in the log, and a release notes page in the docs.
New Features
- bb7a281: feat(automations): check condition fields, operators and values against a field table (#3112) (@s0up4200)
- 6ad07b9: feat(automations): decode rule JSON strictly and list every error (#3110) (@s0up4200)
- c1b6dc4: feat(automations): generate the JSON reference and check group IDs on save (#3122) (@s0up4200)
- f14ed35: feat(docs): add a release notes page from each GitHub release (#3099) (@s0up4200)
- 4bb1ed0: feat(docs): add a release notes page from each GitHub release (#3099) (@s0up4200)
- 30b3b58: feat(docs): show a Discord card for docs and release notes links (#3121) (@s0up4200)
- 3f59c29: feat(release): write release Highlights with Claude before publishing (#3130) (@s0up4200)
- 5803071: feat(triage): carry log links from discussions to issues (#3146) (@s0up4200)
- 01b203f: feat(web): localize byte and speed units (#2835) (@ColinHebert)
- 2a08eb8: feat(web): show update guidance for unsupported setups (#3085) (@s0up4200)
Bug Fixes
- a626891: fix(automations): rebuild the hardlink index once per TTL and check delete scope by kind (#3124) (@s0up4200)
- 0b0f02e: fix(crossseed): match season-less batches against tracker names with a year (#3162) (@s0up4200)
- 207354f: fix(crossseed): run the partial pool only on local filesystem access (#3079) (@com6056)
- 3c305a8: fix(crossseed): use the backend path dialect for link trees, season packs and local matches (#3140) (@com6056)
- 06e937d: fix(jackett): log the cached search fallback at trace (#3080) (@s0up4200)
- ce304f1: fix(sshtest): count a handshake before the client's dial returns (#3092) (@s0up4200)
- a8cdad0: fix(web): keep table row actions in view when the table scrolls sideways (#3096) (@s0up4200)
- 3f22b39: fix(web): send users who hit the license activation limit to the license portal (#3089) (@s0up4200)
Other Changes
- 45276b3: chore(ci): add a mojibake check and a review rule for Windows claims (#3084) (@s0up4200)
- 5b897ae: chore(docs): build faster and serve page Markdown from the site (#3102) (@s0up4200)
- e118b88: ci(release): run the Release workflow on every PR and skip its jobs for docs-only changes (#3131) (@s0up4200)
- 56f1f90: ci(triage): hand a discussion to a maintainer when logs decide (#3149) (@s0up4200)
- a755ccb: ci: add a Breaking change section to the PR template and give the Highlights job the claude environment (#3164) (@s0up4200)
- a225510: ci: keep the Claude token in the claude environment (#3161) (@s0up4200)
- bb8c8f2: docs(automations): test the JSON examples in CI and fix three sections (#3118) (@s0up4200)
- 98e9ea6: docs(proxy): explain how to exclude the proxy path from basic auth (#3163) (@s0up4200)
- 1ba9853: docs(proxy): explain how to exclude the proxy path from basic auth (#3163) (@s0up4200)
- ee5ecae: docs(triage): prove a cause live before a comment names it (#3160) (@s0up4200)
- 2d23992: docs: describe the tracker URL edit and the episode cleanup after a season pack (#3137) (@s0up4200)
- 64bd7b5: perf(backups): store each torrent's backup state once across runs (#2694) (@ColinHebert)
- 25790bb: refactor(web): generate the query builder field constants from the Go field table (#3128) (@s0up4200)
Full Changelog: v1.31.1...v1.32.0
Docker images
docker pull ghcr.io/autobrr/qui:v1.32.0docker pull ghcr.io/autobrr/qui:latest
What to do next?
- Join our Discord server
Thank you for using qui!