v1.13.0
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
- feat(automations): add Move action to Automations (#1079) (@Barcode-eng)
- feat(automations): add hasMissingfiles condition (#1081) (@jabloink)
- feat(automations): add import button to empty state (#1111) (@jabloink)
- feat(automations): add include-cross-seeds mode with hardlink support, fix free-space projection (#1116) (@Barcode-eng)
- feat(automations): add tooltips to disabled conditions (#1286) (@jabloink)
- feat(automations): add uncategorized category filter option (#1268) (@aulterego)
- feat(automations): configurable FREE_SPACE source (qBit or path) (#1181) (@s0up4200)
- feat(backups): add tooltips and restore from lastest button (#1258) (@jabloink)
- feat(crossseed): add category affix with prefix/suffix modes (#1296) (@jabloink)
- feat(crossseed): add directory scanner for data-based matching (#1203) (@s0up4200)
- feat(dirscan): resumable scans with per-run limit (#1274) (@s0up4200)
- feat(dockerfile): add bash to Dockerfile (#903) (@ryanwalder)
- feat(docs): add browser extension links and URL shorteners (@s0up4200)
- feat(linking): add option to fallback on linking failure (#1056) (@Audionut)
- feat(orphanscan): protect shared save paths across instances (#1197) (@s0up4200)
- feat(rss): add native rss support (#801) (@s0up4200)
- feat(sort): add stable fallback sorting for timestamp fields (#1317) (@aulterego)
- feat(torrents): use custom tracker names in table (#1120) (@s0up4200)
- feat(ui): Use 4 column grid for dashboard instances on 2xl screens (#1195) (@ewenjo)
- feat(ui): add inline pieces progress bar visualization (#1050) (@s0up4200)
- feat(web): Improve performance for torrents with large file counts (#1252) (@0rkag)
- feat(web): allow merging trackers into existing groups (#1175) (@jabloink)
- feat(web): improve workflow modal mobile (#1302) (@jabloink)
- feat(web): make dashboard error counts clickable (#937) (@Gykes)
Bug Fixes
- fix(auth): recover cleanly behind upstream SSO (#1142) (@s0up4200)
- fix(automations): handle -1 value for incomplete torrent completion_on (#1186) (@s0up4200)
- fix(automations): include Move action in
rulesUseCondition(#1079) (#1287) (@Barcode-eng) - fix(automations): not being able to enter multiple tags in tag action (#1131) (@Winter)
- fix(automations): restore preview API and add loading state (#1194) (@s0up4200)
- fix(automations): speed up delete hardlink-copy expansion (#1187) (@s0up4200)
- fix(automations): support qBittorrent global/unlimited limits (#1134) (@s0up4200)
- fix(automations): validate local access for hasMissingFiles (#1281) (@jabloink)
- fix(crossseed): allow extra files in size mismatch check (#1149) (@s0up4200)
- fix(crossseed): correct match type for episode-from-pack cross-seeding (#1250) (@neelmehta247)
- fix(crossseed): normalize ampersand to "and" for title matching (#1202) (@s0up4200)
- fix(crossseed): prevent automation search stalls (#1272) (@s0up4200)
- fix(crossseed): prevent false cross-seed delete warnings (#1148) (@s0up4200)
- fix(crossseed): reduce false negatives for anime matching (#1243) (@s0up4200)
- fix(crossseed): restore reuse matched category option (#1150) (@s0up4200)
- fix(crossseed): support v2 hashes for recheck (#1237) (@s0up4200)
- fix(database): remove noisy stmt cache promotion log (#1307) (@s0up4200)
- fix(docs): correct autobrr integration documentation (@s0up4200)
- fix(docs): use absolute URLs for extension links (@s0up4200)
- fix(instances): auth bypass persistence in instance form (#1219) (@s0up4200)
- fix(makefile): make fmt target only format changed files (#1200) (@s0up4200)
- fix(orphanscan): avoid duplicate inode entries in scans (#1212) (@s0up4200)
- fix(orphanscan): gate scans until qBittorrent settled (#1193) (@s0up4200)
- fix(orphanscan): ignore .parts files from qBittorrent partial downloads (#1264) (@s0up4200)
- fix(orphanscan): ignore OS/NAS/k8s artifacts (#1259) (@s0up4200)
- fix(orphanscan): reduce MaxFilesPerRun and fix accordion chevrons (#1095) (@s0up4200)
- fix(qbittorrent): force sync+retry in BulkAction (#1097) (@s0up4200)
- fix(qbittorrent): strip URLs before tracker-down pattern matching (#1224) (@s0up4200)
- fix(reflinktree): fall back to FICLONERANGE when FICLONE unsupported (#1221) (@s0up4200)
- fix(search): handle magnet redirects from indexer downloads (#1211) (@s0up4200)
- fix(sort): truncate
last_activityto 60s for stability (#1318) (@aulterego) - fix(torznab): respect per-indexer caps limits (#1265) (@s0up4200)
- fix(trackericons): apply failure cooldown on timeouts (#1322) (@s0up4200)
- fix(web): add max-height to import workflow dialog (#1207) (@s0up4200)
- fix(web): hide redundant actions dropdown (#1305) (@jabloink)
- fix(web): improve Reannounce In column display (#1320) (@soggy-cr0uton)
- fix(web): make Add Instance dialog scrollable on small viewports (#1232) (@s0up4200)
- fix(web): make dialogs scrollable on small viewports (#1233) (@s0up4200)
- fix(web): prevent nested scroll containers on iOS (#1229) (@s0up4200)
- fix(web): redirect already authenticated users to dashboard (#1127) (@burritothief)
- fix(web): toast message when searching then adding cross-seeds (#1290) (@rybertm)
- fix(web): use fixed px for sidebar width instead of rem (#1313) (@soggy-cr0uton)
Other Changes
- chore(deps): bump the golang group across 1 directory with 16 updates (#1261) (@dependabot[bot])
- chore(docs): clarify tracker pattern necessity in documentation (@s0up4200)
- chore(lint): Add Linting workflow to CI (#1270) (@Barcode-eng)
- chore(lint): update linting base branch from main to develop (@s0up4200)
- chore: add Ko-fi funding and pre-commit config (#1315) (@s0up4200)
- chore: update copyright headers to 2025-2026 (#1303) (@s0up4200)
- docs(automations): clarify tag behavior (#1260) (@jabloink)
- refactor(build): cross platform building (#1060) (@Audionut)
- refactor(crosssed): require full recheck for disc based content (#1168) (@Audionut)
- refactor(filesmanager): improve logging messages for orphan cleanup process (@s0up4200)
- refactor(orphan): improve disc based content handling (#1167) (@Audionut)
- refactor(web): use TanStack Query for path autocomplete (#1309) (@soggy-cr0uton)
Full Changelog: https://github.com/autobrr/qui/compare/v1.12.0...v1.13.0