Changelog
Breaking changes
- Start paused uses the qBittorrent preference. Make sure that the start paused preference in qBittorrent has the value that you want for new torrents.
- The preferences API returns a list of fields.
GET /api/instances/{instanceID}/preferencesreturns fields, not the preferences object.PATCHreturns 400 for an unknown, read-only, or hidden key, or for a value of the wrong type. If a script reads or writes preferences through the qui API, update the script. - Torrent list and stream frames no longer carry
preferences. If a client reads this field fromGET /api/instances/{instanceID}/torrentsor from the stream, readGET /api/instances/{instanceID}/preferencesinstead.
Highlights
- Preferences dialog in the qBittorrent layout. The instance settings dialog uses the tabs of the qBittorrent WebUI. The RSS settings are now in the RSS tab.
- Many more qBittorrent settings. You can now change the proxy, I2P, WebUI, email notification, network binding, Downloads, and Advanced settings in qui. Path fields suggest folders on qBittorrent 5.0+.
- Leftover folders are cleaned up. After a delete with files or a move, qui removes the empty folders that the torrent leaves behind. To keep a folder, add it to the orphan scan ignore paths.
- More cross-seed matches. Fansub groups with hyphens or bracket tags now match, and so do
HDRagainstHDR10, Season numeral packs, and absolute episodes with a leading zero. A cross-seed with an extra nfo or subtitles now shows as Content. - Torrent views recover from a stalled stream. If a view gets no data for two minutes, it loads from the server until the live updates return.
- Fixes and polish. Copy Full Path for renamed torrents, Tracker down instead of Unregistered for an
(unknown HTTP error), a Clear filters button on mobile, PWA reloads, tracker icons only from public addresses, and stricter automation rule import.
Breaking Changes
- feat(preferences)!: add the preference catalog and the view route (#3228) (@s0up4200)
- fix(preferences)!: make start paused use the qBittorrent preference (#3227) (@s0up4200)
- refactor(preferences)!: take preferences out of the torrent list and stream (#3239) (@s0up4200)
New Features
- feat(automations): check missing files on remote instances (#3300) (@s0up4200)
- feat(fsops): batch stat that follows links, with pipelined single stats (#3274) (@s0up4200)
- feat(fsops): exec tier and remote file identity (#3190) (@s0up4200)
- feat(preferences): add email notification and the test email button (#3250) (@s0up4200)
- feat(preferences): add network binding dropdowns (#3272) (@s0up4200)
- feat(preferences): add the WebUI tab (#3254) (@s0up4200)
- feat(preferences): add the missing Advanced settings (#3255) (@s0up4200)
- feat(preferences): add the missing Behavior, BitTorrent, and RSS settings (#3240) (@s0up4200)
- feat(preferences): add the missing Downloads settings and path autocomplete (#3246) (@s0up4200)
- feat(preferences): add the proxy and I2P settings (#3253) (@s0up4200)
- feat(preferences): draw the dialog from the catalog in the qBittorrent tab layout (#3232) (@s0up4200)
- feat(preferences): move the RSS settings into the RSS tab (#3234) (@s0up4200)
- feat(preferences): send only changed keys on save (#3225) (@s0up4200)
- feat(qbittorrent): clean up leftover folders after qui's deletes and moves (#3120) (@com6056)
- feat(triage): run triage on the Agent SDK in a capped Console workspace (#3203) (@s0up4200)
- feat(triage): send design questions to a maintainer and make every confirmed bug an issue (#3205) (@s0up4200)
- feat(triage): wait 1 day before closing a likely duplicate (#3191) (@s0up4200)
- feat(web): offer to clear filters when they hide every torrent on mobile (#3309) (@s0up4200)
Bug Fixes
- fix(automations): check tag and delete action modes in rule JSON (#3177) (@cestercian)
- fix(crossseed): decide local cross-seed matches per file (#3196) (@s0up4200)
- fix(crossseed): describe the ranked base dirs and cross-device retry in every locale (#3273) (@com6056)
- fix(crossseed): match a bracketed fansub against its hyphenated dash suffix (#3193) (@orshih6)
- fix(crossseed): match a space-joined group and collective against the bracket form (#3283) (@s0up4200)
- fix(crossseed): match fansub batches that carry a Ma10 tag (#3159) (@s0up4200)
- fix(crossseed): rank season pack base dirs and retry after cross-device link errors (#3156) (#3197) (@thejdubb02)
- fix(crossseed): read a generic HDR tag as HDR10 (#3248) (@s0up4200)
- fix(crossseed): use one Season numeral rule (#3294) (@s0up4200)
- fix(crossseed): use one absolute-episode reader and one seasonless-file rule (#3295) (@s0up4200)
- fix(dirscan): clear file IDs and update the directory in one transaction (#3183) (@nitrobass24)
- fix(fsops): never index a remote file ID without its instance (#3189) (@s0up4200)
- fix(goreleaser): use the Logins field in the changelog line format (#3311) (@s0up4200)
- fix(hardlinktree): match a Windows folder that is not empty by its error code (#3198) (@com6056)
- fix(jackett): keep a refreshed torznab torrent cache entry from a stale eviction (#3100) (@cestercian)
- fix(pwa): serve navigations from the SPA root instead of index.html (#3281) (@s0up4200)
- fix(qbittorrent): keep libtorrent's unknown HTTP error out of Unregistered (#3298) (@s0up4200)
- fix(qbittorrent): sync at most a second after the first pending hint (#3119) (@com6056)
- fix(sshpool): probe the login shell with the quoting shellQuote writes (#3275) (@com6056)
- fix(sshpool): report a cancelled SSH test as cancelled (#3301) (@s0up4200)
- fix(stream): fall back when torrent updates stall (#2508) (@Zariel)
- fix(testdb): fall back to the temp dir when the user cache dir is unusable (#3176) (@cestercian)
- fix(torrents): copy the content path for Copy Full Path (#3201) (@thejdubb02)
- fix(trackericons): download icons only from public addresses (#3251) (@s0up4200)
- fix(triage): read discussions with gh and fail a run that sets no outcome (#3280) (@s0up4200)
- fix(web): keep the dashboard instance card header inside the card (#3111) (@theluckystrike)
- fix(web): keep trackers with matching display names apart in tracker lists (#3171) (@thejdubb02)
- fix: report failed sftp sends as lost and keep season pack tests on one device (#3297) (@s0up4200)
Other Changes
- chore(deps): bump actions/setup-node from 7.0.0 to 7.1.0 in the github group across 1 directory (#3208) (@dependabot[bot])
- chore(github): make soup the only codeowner (#3277) (@s0up4200)
- chore(github): update CODEOWNERS (#3276) (@Audionut)
- chore(lint): forbid the go-qbittorrent torrent sort options (#3241) (@s0up4200)
- chore(lint): guard the cross-seed parser and the search gatherer (#3243) (@s0up4200)
- chore(lint): keep package imports pointing down with depguard (#3242) (@s0up4200)
- ci(goreleaser): leave the commit SHA out of the changelog lines (#3169) (@s0up4200)
- ci(release): leave PRs without a UI out of the Highlights (#3310) (@s0up4200)
- ci: require the PR template sections in the PR body (#3195) (@s0up4200)
- docs(agents): publish PR screenshots as brrbin Evidence (#3185) (@s0up4200)
- docs(agents): trace a guard before you suggest removing it, and describe when qui syncs (#3284) (@s0up4200)
- perf(web): drop the duplicate frontend type check pass (#3279) (@nitrobass24)
- refactor(crossseed): parse every release name through the matcher's release cache (#3083) (@s0up4200)
- refactor(crossseed): read release names once and group dedup and cross-match by Title key (#3299) (@s0up4200)
- refactor(fsops): tagged FileID, compared per filesystem (#3025) (@nitrobass24)
- refactor(preferences): read single preferences through typed hooks (#3226) (@s0up4200)
- test(web): echo i18n keys instead of the English defaultValue (#3202) (@thejdubb02)
Full Changelog: v1.32.0...v1.33.0
Docker images
docker pull ghcr.io/autobrr/qui:v1.33.0docker pull ghcr.io/autobrr/qui:latest
What to do next?
- Join our Discord server
Thank you for using qui!