Highlights
- Native RSS support for feeds
- Cross-seed upgrades: directory scanning for data-based matching and category affix (prefix/suffix) modes
- Automations improvements: Move action support, uncategorized filter option, hasMissingFiles condition, include-cross-seeds mode, configurable FREE_SPACE source
- UI improvements: inline pieces progress bar, clickable dashboard error counts, better mobile workflow modal
- Orphan scan safeguards for shared save paths
- External programs: new {comment} placeholder
Notable bug fixes:
- More stable sorting for timestamp fields and last_activity
- Tracker icon fetching reliability and timeout cooldown handling
- Cross-seed matching fixes (anime/pack matching, size mismatch handling, V2 hash recheck)
- Orphan scan ignores .parts files and OS/NAS artifacts
- qBittorrent tracker-down matching improvements and magnet redirect handling
Changelog
New Features
- 9acd789: feat(automations): add Move action to Automations (#1079) (@Barcode-eng)
- 80aaf22: feat(automations): add hasMissingfiles condition (#1081) (@jabloink)
- f942a71: feat(automations): add import button to empty state (#1111) (@jabloink)
- 6b2831e: feat(automations): add include-cross-seeds mode with hardlink support, fix free-space projection (#1116) (@Barcode-eng)
- b152a6a: feat(automations): add tooltips to disabled conditions (#1286) (@jabloink)
- f36eb76: feat(automations): add uncategorized category filter option (#1268) (@aulterego)
- d7dcb58: feat(automations): configurable FREE_SPACE source (qBit or path) (#1181) (@s0up4200)
- d685bee: feat(backups): add tooltips and restore from lastest button (#1258) (@jabloink)
- 4c5a975: feat(crossseed): add category affix with prefix/suffix modes (#1296) (@jabloink)
- 28cd96d: feat(crossseed): add directory scanner for data-based matching (#1203) (@s0up4200)
- fe84eb0: feat(dirscan): resumable scans with per-run limit (#1274) (@s0up4200)
- 1af2a12: feat(dockerfile): add bash to Dockerfile (#903) (@ryanwalder)
- 5c84c3f: feat(docs): add browser extension links and URL shorteners (@s0up4200)
- 13c5461: feat(linking): add option to fallback on linking failure (#1056) (@Audionut)
- 5f7031f: feat(orphanscan): protect shared save paths across instances (#1197) (@s0up4200)
- 341092d: feat(rss): add native rss support (#801) (@s0up4200)
- 8d2a371: feat(sort): add stable fallback sorting for timestamp fields (#1317) (@aulterego)
- 28cf4ad: feat(torrents): use custom tracker names in table (#1120) (@s0up4200)
- e0d2bb4: feat(ui): Use 4 column grid for dashboard instances on 2xl screens (#1195) (@ewenjo)
- 7bc98e1: feat(ui): add inline pieces progress bar visualization (#1050) (@s0up4200)
- 0154226: feat(web): Improve performance for torrents with large file counts (#1252) (@0rkag)
- a91df70: feat(web): allow merging trackers into existing groups (#1175) (@jabloink)
- 132c512: feat(web): improve workflow modal mobile (#1302) (@jabloink)
- a7f59ab: feat(web): make dashboard error counts clickable (#937) (@Gykes)
Bug Fixes
- c6f86e2: fix(auth): recover cleanly behind upstream SSO (#1142) (@s0up4200)
- 0c19899: fix(automations): handle -1 value for incomplete torrent completion_on (#1186) (@s0up4200)
- 59a9120: fix(automations): include Move action in
rulesUseCondition(#1079) (#1287) (@Barcode-eng) - 618d945: fix(automations): not being able to enter multiple tags in tag action (#1131) (@Winter)
- bffecbd: fix(automations): restore preview API and add loading state (#1194) (@s0up4200)
- 9b3975b: fix(automations): speed up delete hardlink-copy expansion (#1187) (@s0up4200)
- 1549bcf: fix(automations): support qBittorrent global/unlimited limits (#1134) (@s0up4200)
- e31d4aa: fix(automations): validate local access for hasMissingFiles (#1281) (@jabloink)
- dba3419: fix(crossseed): allow extra files in size mismatch check (#1149) (@s0up4200)
- f7dced6: fix(crossseed): correct match type for episode-from-pack cross-seeding (#1250) (@neelmehta247)
- 007d87e: fix(crossseed): normalize ampersand to "and" for title matching (#1202) (@s0up4200)
- 048c034: fix(crossseed): prevent automation search stalls (#1272) (@s0up4200)
- 5c48ccb: fix(crossseed): prevent false cross-seed delete warnings (#1148) (@s0up4200)
- eda0eee: fix(crossseed): reduce false negatives for anime matching (#1243) (@s0up4200)
- 8b08b87: fix(crossseed): restore reuse matched category option (#1150) (@s0up4200)
- b69682d: fix(crossseed): support v2 hashes for recheck (#1237) (@s0up4200)
- 8fb16c1: fix(database): remove noisy stmt cache promotion log (#1307) (@s0up4200)
- c8d068b: fix(docs): correct autobrr integration documentation (@s0up4200)
- c6f4a4a: fix(docs): use absolute URLs for extension links (@s0up4200)
- 48510e9: fix(instances): auth bypass persistence in instance form (#1219) (@s0up4200)
- 0b71b46: fix(makefile): make fmt target only format changed files (#1200) (@s0up4200)
- 1f13b0e: fix(orphanscan): avoid duplicate inode entries in scans (#1212) (@s0up4200)
- fecfebd: fix(orphanscan): gate scans until qBittorrent settled (#1193) (@s0up4200)
- 77b2fd6: fix(orphanscan): ignore .parts files from qBittorrent partial downloads (#1264) (@s0up4200)
- 0f7e646: fix(orphanscan): ignore OS/NAS/k8s artifacts (#1259) (@s0up4200)
- b55881c: fix(orphanscan): reduce MaxFilesPerRun and fix accordion chevrons (#1095) (@s0up4200)
- 0cb682c: fix(qbittorrent): force sync+retry in BulkAction (#1097) (@s0up4200)
- aba9b7e: fix(qbittorrent): strip URLs before tracker-down pattern matching (#1224) (@s0up4200)
- a60076f: fix(reflinktree): fall back to FICLONERANGE when FICLONE unsupported (#1221) (@s0up4200)
- d79a0db: fix(search): handle magnet redirects from indexer downloads (#1211) (@s0up4200)
- 1e920c4: fix(sort): truncate
last_activityto 60s for stability (#1318) (@aulterego) - 931d720: fix(torznab): respect per-indexer caps limits (#1265) (@s0up4200)
- 6fe91e8: fix(trackericons): apply failure cooldown on timeouts (#1322) (@s0up4200)
- 35a50b5: fix(web): add max-height to import workflow dialog (#1207) (@s0up4200)
- 5bd2706: fix(web): hide redundant actions dropdown (#1305) (@jabloink)
- 307907f: fix(web): improve Reannounce In column display (#1320) (@soggy-cr0uton)
- 7881bdc: fix(web): make Add Instance dialog scrollable on small viewports (#1232) (@s0up4200)
- bec5433: fix(web): make dialogs scrollable on small viewports (#1233) (@s0up4200)
- 0e47b9e: fix(web): prevent nested scroll containers on iOS (#1229) (@s0up4200)
- f2f0616: fix(web): redirect already authenticated users to dashboard (#1127) (@burritothief)
- 7a633cf: fix(web): toast message when searching then adding cross-seeds (#1290) (@rybertm)
- da14100: fix(web): use fixed px for sidebar width instead of rem (#1313) (@soggy-cr0uton)
Other Changes
- c93a326: chore(deps): bump the golang group across 1 directory with 16 updates (#1261) (@dependabot[bot])
- d3de074: chore(docs): clarify tracker pattern necessity in documentation (@s0up4200)
- 2351097: chore(lint): Add Linting workflow to CI (#1270) (@Barcode-eng)
- e8436e3: chore(lint): update linting base branch from main to develop (@s0up4200)
- e36afc8: chore: add Ko-fi funding and pre-commit config (#1315) (@s0up4200)
- df4375e: chore: update copyright headers to 2025-2026 (#1303) (@s0up4200)
- 7a6f2d1: docs(automations): clarify tag behavior (#1260) (@jabloink)
- 05e2028: refactor(build): cross platform building (#1060) (@Audionut)
- 6355f4f: refactor(crosssed): require full recheck for disc based content (#1168) (@Audionut)
- 7466a98: refactor(filesmanager): improve logging messages for orphan cleanup process (@s0up4200)
- ad90209: refactor(orphan): improve disc based content handling (#1167) (@Audionut)
- 3b85f8a: refactor(web): use TanStack Query for path autocomplete (#1309) (@soggy-cr0uton)
Full Changelog: v1.12.0...v1.13.0
Docker images
docker pull ghcr.io/autobrr/qui:v1.13.0docker pull ghcr.io/autobrr/qui:latest
What to do next?
- Join our Discord server
Thank you for using qui!