Skip to main content

v1.22.0

Changelog​

New Features​

  • feat(web): add copy path option to content tab context menu (#933) (@lenisko)
  • feat(web): add kanagawa themes (#2069) (@notmarek)
  • feat(web): shift+click range select in torrent content tab (#2081) (@jussaw)

Bug Fixes​

  • fix(sync): keep SSE aggregates fresh without tracker hydration (#2072) (@Audionut)

Other Changes​

  • chore(deps): bump the github group with 5 updates (#2073) (@dependabot[bot])

Full Changelog: https://github.com/autobrr/qui/compare/v1.21.0...v1.22.0

v1.21.0

Changelog​

New Features​

  • feat(api): add GET /api/version reporting the running version (#2060) (@s0up4200)
  • feat(automations): add RLS_YEAR release-year condition (#2003) (@nitrobass24)
  • feat(automations): add tracker status and message conditions (#2006) (@luckylittle)
  • feat(automations): list configured indexer trackers in workflow selector (#2005) (@nitrobass24)
  • feat(i18n): add Italian (it) translation (#2011) (@s0up4200)
  • feat(i18n): add Korean (ko) translation (#2042) (@jussaw)
  • feat(i18n): add Ukrainian (uk) translation (#2032) (@rodion981)
  • feat(sse): keep cached torrents with a staleness badge when qBittorrent is slow (#2057) (@s0up4200)
  • feat(web): add file priority controls to torrent file views (#2062) (@jussaw)

Bug Fixes​

  • fix(ci): skip release binary build on main pushes (#2008) (@s0up4200)
  • fix(crossseed): drop resolution token from TV search queries (#2017) (@nitrobass24)
  • fix(crossseed): inject rootless single-file adds into matched folder (#2029) (@nitrobass24)
  • fix(crossseed): re-query indexers with no usable hit in the alternate connector pass (#2002) (@nitrobass24)
  • fix(database): prevent int4 sequence exhaustion in Postgres string interning (#2015) (@s0up4200)
  • fix(db): index string_pool FK columns so GC stops timing out (#2051) (@s0up4200)
  • fix(docs): use relative file paths for markdown links (#2013) (@nasenov)
  • fix(i18n): improve French translation, fix hardcoded UI statuses, and update agent rules (#2014) (@OlziYT)
  • fix(jackett): decouple cache persistence from SkipHistory (#2056) (@jussaw)
  • fix(pprof): bind to configurable loopback address instead of :6060 (#2044) (@s0up4200)
  • fix(qbittorrent): serve stale app info/preferences when refresh fails (#2054) (@s0up4200)
  • fix(sse): resolve sync-error staleness stamp off the sync-loop callback (#2065) (@s0up4200)
  • fix(sse): send torrent page deltas instead of full snapshots (#2047) (@s0up4200)
  • fix(sse): size full-sync timeout to prevent permanent disconnect on large instances (#2037) (@nitrobass24)
  • fix(torrents): route unified view exports to the owning instance (#2018) (@s0up4200)
  • fix(web): move instance status bar back to bottom of screen (#2024) (@OlziYT)
  • fix(web): prevent framer-motion tab indicator from triggering layout shifts (#2025) (@OlziYT)

Other Changes​

  • chore(deps): bump anthropics/claude-code-action from 1.0.140 to 1.0.148 in the github group (#2045) (@dependabot[bot])
  • chore(deps): bump the github group with 2 updates (#2031) (@dependabot[bot])
  • docs: document frontend testing conventions (#1984) (@nitrobass24)
  • docs: promote multi-language support (#2009) (@s0up4200)
  • test(web): add coverage for hooks and lib/api.ts contract layer (#1931) (#1998) (@nitrobass24)

Full Changelog: https://github.com/autobrr/qui/compare/v1.20.0...v1.21.0

v1.20.0

Changelog​

New Features​

  • feat(automations): add include/exclude for trackers (#1953) (@martylukyy)
  • feat(ci): build binaries for develop branch (#1969) (@martylukyy)
  • feat(crossseed): match cross-tracker relabels and alternate and/& title spellings (#1990) (@nitrobass24)
  • feat(crossseed): route season packs to categories by resolution and source (#1972) (@s0up4200)
  • feat(i18n): add French translation, dynamic loading, and browser locale auto-detect (#1956) (@OlziYT)
  • feat(i18n): add German (de) translation (#1965) (@s0up4200)
  • feat(i18n): add multi-language support with Simplified Chinese (#1732) (@s0up4200)
  • feat(sse): stream torrent and activity updates, replacing background polling (#551) (@s0up4200)
  • feat(torrents): filter for torrents with other tracker errors (#1945) (@martylukyy)
  • feat(web): virtualized and memoized the indexer search results (#1944) (@GtwoK)

Bug Fixes​

  • fix(api): remove WriteTimeout that aborted downloads and SSE at 120s (#1964) (@s0up4200)
  • fix(arr): make arr_id_cache expiry timezone-independent (#1986) (@nitrobass24)
  • fix(crossseed): harden filesystem fallback and post-add rechecks (#1912) (@Audionut)
  • fix(crossseed): pin explicit savepath when cross category save path diverges (#1993) (@s0up4200)
  • fix(gazelle): pre-search content matching and api limits (#1981) (@Audionut)
  • fix(i18n): translate torrent state labels (#1955) (@s0up4200)
  • fix(proxy): forward API key auth to qBittorrent on passthrough requests (#1948) (@nitrobass24)
  • fix(qbittorrent): match 'repack available'/'grab internal' as unregistered (#1960) (@s0up4200)
  • fix(sse): pause torrent-list stream while the tab is hidden (#1994) (@s0up4200)
  • fix(sse): stop intermittent "offline" flips that fall back to polling (#1992) (@nitrobass24)
  • fix(web): emit allowSubcategories from the filtered-data callback (#1979) (@nitrobass24)
  • fix(web): preserve paginated rows on unified-view SSE updates (#1985) (@nitrobass24)

Other Changes​

  • chore(deps): bump actions/checkout from 6 to 6.0.2 in the github group (#1999) (@dependabot[bot])
  • chore(deps): bump rls to v0.8.1 (#2007) (@s0up4200)
  • chore(deps): bump the github group with 5 updates (#1937) (@dependabot[bot])
  • chore(deps): bump the github group with 5 updates (#1959) (@dependabot[bot])
  • chore(deps): bump the golang group with 14 updates (#1988) (@dependabot[bot])
  • chore(deps): bump the npm group in /web with 11 updates (#1989) (@dependabot[bot])
  • chore(deps): bump the npm group in /web with 28 updates (#1946) (@dependabot[bot])
  • chore(refactor): remove explicit any and enable no-explicit-any rule (#1966) (@nitrobass24)
  • chore(web): add vitest test infrastructure and CI gating (#1936) (@nitrobass24)
  • chore(web): remove unused code and packages (#1957) (@martylukyy)
  • docs(agents): scope agent guidance (#1995) (@Audionut)
  • refactor(go): remove dead code (#1740) (@s0up4200)
  • refactor(web): extract TorrentTableDialogs from TorrentTableOptimized (#1980) (@nitrobass24)
  • refactor(web): extract compact-sort, cross-seed, and hotkey hooks (#1976) (@nitrobass24)
  • refactor(web): extract torrent-table display helpers and row components (#1970) (@nitrobass24)
  • refactor(web): extract useBulkActionWrappers (#1977) (@nitrobass24)
  • refactor(web): extract useTorrentSelection (#1974) (@nitrobass24)
  • refactor(web): extract useTorrentSelectionDerivations (#1975) (@nitrobass24)
  • refactor(web): extract useTorrentTableColumns and useTorrentTableNotifications (#1978) (@nitrobass24)
  • refactor(web): extract useTorrentTableFilterExpr (#1973) (@nitrobass24)
  • refactor(web): extract useTrackerIconCache and useEffectiveServerState (#1971) (@nitrobass24)
  • refactor(web): extract virtualization, filter-lifecycle FSM, and column DnD from TorrentTableOptimized (#1982) (@nitrobass24)
  • refactor(web): split types/index.ts into domain modules behind a barrel (#1968) (@nitrobass24)
  • test(db): speed up migrated database tests (#1938) (@Audionut)
  • test(sse): warm up subscription before coalescing burst (#1987) (@s0up4200)
  • test(web): add unit tests for Priority 1 pure utilities (#1940) (@nitrobass24)
  • test: fan out testdb helper to remaining database.New callers (#1962) (@nitrobass24)

Full Changelog: https://github.com/autobrr/qui/compare/v1.19.0...v1.20.0

v1.19.0

Changelog​

New Features​

Bug Fixes​

  • fix(automations): discard add torrent response (#1904) (@s0up4200)
  • fix(ci): repair docs and release builds (#1932) (@s0up4200)
  • fix(crossseed): normalize empty qbit metadata (#1887) (@s0up4200)
  • fix(crossseed): reuse shared string normalizer to stop goroutine leak (#1909) (@s0up4200)
  • fix(crossseed): run external programs after link-mode injection (#1874) (@s0up4200)
  • fix(qbittorrent): handle forced subcategories (#1863) (@s0up4200)
  • fix(qbittorrent): handle new tracker statuses (#1879) (@s0up4200)
  • fix(rss): mirror torrentParams to legacy flat fields for qBit < 5.0 compat (#1846) (@frrad)
  • fix(seasonpacker): windows path handling (#1910) (@Audionut)
  • fix(torrents): clear filters in unified-view empty state (#1898) (@nitrobass24)
  • fix(web): Show collapsed folders when searching torrent contents (#1850) (@ewenjo)
  • fix(web): keep showing torrent column filter icons on touch devices (#1881) (@martylukyy)
  • fix(web): select-all bulk actions delete more torrents than visible when filters are stacked (#1926) (@nitrobass24)
  • fix(web): sidebar element collisions (#1876) (@martylukyy)
  • fix(web): use unique keys for duplicate search results (#1886) (@GtwoK)

Other Changes​

  • chore(deps): bump @babel/plugin-transform-modules-systemjs from 7.28.5 to 7.29.4 in /documentation (#1889) (@dependabot[bot])
  • chore(deps): bump @babel/plugin-transform-modules-systemjs from 7.29.0 to 7.29.4 in /web (#1888) (@dependabot[bot])
  • chore(deps): bump follow-redirects from 1.15.11 to 1.16.0 in /documentation (#1903) (@dependabot[bot])
  • chore(deps): bump the github group with 2 updates (#1894) (@dependabot[bot])
  • chore(deps): bump the github group with 3 updates (#1861) (@dependabot[bot])
  • chore(deps): bump webpack-dev-server from 5.2.2 to 5.2.4 in /documentation (#1908) (@dependabot[bot])
  • chore(deps): bump ws from 8.18.3 to 8.20.1 in /documentation (#1907) (@dependabot[bot])
  • chore(web): migrate to pnpm 11 (#1883) (@martylukyy)
  • docs: add shared agent instructions symlink (#1911) (@Audionut)
  • other(docs): resolve 5 Dependabot security alerts on Docs Site (#1906) (@nitrobass24)
  • refactor(crossseed): gather all results for matching and refine TV based searching (#1871) (@Audionut)
  • refactor(crossseed): improve anime/AKA handling (#1882) (@Audionut)
  • refactor(torrents): drop unused rename props from TorrentContextMenu (#1900) (@nitrobass24)
  • refactor(web): clean up 180 multiline-ternary warnings repo-wide (#1905) (@nitrobass24)

Full Changelog: https://github.com/autobrr/qui/compare/v1.18.0...v1.19.0

v1.18.0

Changelog​

New Features​

Bug Fixes​

  • fix(crossseed): broaden TV/movie torznab categories and skip year on TV (#1822) (@imSp4rky)
  • fix(license): unblock stale polar license migration (#1799) (@s0up4200)
  • fix(qbit): stop serving stale maindata to the status bar (#1785) (@Zariel)
  • fix(rss): populate legacy assignedCategory for qBittorrent < 5.0 comp… (#1836) (@frrad)
  • fix(settings): explain disabled API keys (#1826) (@s0up4200)
  • fix(web): remove deprecated tsconfig baseUrl (#1840) (@s0up4200)

Other Changes​

  • chore(deps): bump postcss from 8.5.6 to 8.5.10 in /documentation (#1837) (@dependabot[bot])
  • chore(deps): bump the github group across 1 directory with 3 updates (#1834) (@dependabot[bot])
  • chore(deps): bump the golang group with 15 updates (#1832) (@dependabot[bot])
  • chore(deps): bump the npm group in /web with 20 updates (#1833) (@dependabot[bot])
  • chore(deps): update go-qbittorrent for new qbt 5.2.x webAPI version (#1841) (@martylukyy)
  • refactor(time): use seconds and cleanup (#1823) (@Audionut)
  • refactor: O(n²) cross-seed lookups in automations preview and execution paths (#1829) (@nitrobass24)

Full Changelog: https://github.com/autobrr/qui/compare/v1.17.0...v1.18.0

v1.17.0

Changelog​

Bug Fixes​

Other Changes​

Full Changelog: https://github.com/autobrr/qui/compare/v1.16.1...v1.17.0

v1.16.0

Highlights​

  • Automations got a major upgrade: rules can now match across instances, use system time, control AutoTMM, and opt out of notifications per workflow.
  • Cross-seed is more reliable during state changes. Completion searches now wait for torrents to finish checking or moving, disabled instances are skipped cleanly, and hardlink/reflink save-path handling is more accurate.
  • Dir Scan works better with real media libraries, with improved partial season-pack handling in link-tree mode, support for downloading missing files when needed, and better progress retention across restarts.
  • Managing torrents in the unified view is smoother, with more accurate tracker health, quicker instance-level actions, and more stable category and tag editing dialogs.
  • OIDC and backups both got practical quality-of-life improvements: OIDC now supports PKCE, backup settings can be applied across instances, and backup export handling is safer for tricky torrent layouts.

Changelog​

New Features​

  • feat(auth): add PKCE support to OIDC implementation (#1737) (@oynqr)
  • feat(automations): add AutoTMM condition and action (#1698) (@nitrobass24)
  • feat(automations): add system time to query builder (#1677) (@wastaken7)
  • feat(automations): allow disable of notifications (#1652) (@heathlarsen)
  • feat(automations): cross instance condition (#1648) (@nitrobass24)
  • feat(update): verify self-updates with signed release checksums (#1665) (@s0up4200)
  • feat(web): Add action buttons to unified instance. (#1637) (@drtaru)
  • feat(web): Clarify dashboard quick links (#1636) (@drtaru)
  • feat(web): add "Save changes to all instances" button to backup settings (#1651) (@drtaru)
  • feat(web): add Discord perk section to license manager (#1656) (@s0up4200)
  • feat(web): unify tab styling and animations (#1632) (@nuxencs)

Bug Fixes​

  • fix(automations): add AutoTMM to condition validation (#1726) (@s0up4200)
  • fix(automations): hardlink signature grouping (#1670) (@aulterego)
  • fix(automations): include AutoManagement in delete standalone check (#1731) (@nitrobass24)
  • fix(backups): adaptive export throttle (#1630) (@s0up4200)
  • fix(backups): gate bulk save on resolved instance capabilities (#1682) (@s0up4200)
  • fix(backups): skip live export for hybrid torrents (#1669) (@s0up4200)
  • fix(crossseed): skip disabled instances (#1635) (@s0up4200)
  • fix(crossseed): tone down async cache reuse log (#1686) (@s0up4200)
  • fix(dirscan): link plan size tolerance + partial season pack injection in link tree mode (#1695) (@s0up4200)
  • fix(dirscan): retain recent runs and clarify restart behavior (#1564) (@s0up4200)
  • fix(openapi): document dirscan downloadMissingFiles (#1727) (@s0up4200)
  • fix(orphanscan): use content_path to prevent false positives when Auto TMM changes save_path (#1712) (@nitrobass24)
  • fix(qbittorrent): avoid tracker health URL false positives (#1738) (@s0up4200)
  • fix(torrents): honor tracker health in unified view (#1668) (@s0up4200)
  • fix(torrents): stabilize tag and category dialogs (#1638) (@s0up4200)
  • fix(torrents): validate creator output path (#1739) (@s0up4200)
  • fix(web): cross-seed warning in unified view (#1692) (@s0up4200)
  • fix(web): improve duplicate torrent state and check another field.state.value type in AddTorrentDialog (#1679) (@keatonhasse)
  • fix(web): migrate vite chunk splitting config (@s0up4200)

Other Changes​

  • build(deps): add cooldown to dependabot config (#1691) (@s0up4200)
  • chore(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 (#1713) (@dependabot[bot])
  • chore(deps): bump golang.org/x/image from 0.36.0 to 0.38.0 (#1685) (@dependabot[bot])
  • chore(deps): bump pnpm/action-setup from 4 to 5 in the github group (#1634) (@dependabot[bot])
  • chore(deps): bump the golang group with 11 updates (#1693) (@dependabot[bot])
  • chore(deps): bump the golang group with 3 updates (#1701) (@dependabot[bot])
  • chore(deps): bump the npm group in /web with 25 updates (#1694) (@dependabot[bot])
  • chore(deps): bump the npm group in /web with 5 updates (#1702) (@dependabot[bot])
  • docs(dirscan): clarify re-identification after torrent removal (#1720) (@s0up4200)
  • docs: add license management page with deactivation guide (#1706) (@s0up4200)
  • docs: fix link in issue triage template (@s0up4200)
  • docs: update release follow-up docs (#1741) (@s0up4200)

Full Changelog: https://github.com/autobrr/qui/compare/v1.15.0...v1.16.0

v1.15.0

Breaking change​

CORS is disabled by default; enable by setting QUI__CORS_ALLOWED_ORIGINS with explicit origins (http(s)://host[:port]). See https://getqui.com/docs/advanced/sso-proxy-cors

Changelog​

New Features​

Bug Fixes​

  • fix(api): align add torrent OpenAPI field (#1617) (@s0up4200)
  • fix(api): restrict CORS to explicit allowlist (#1551) (@s0up4200)
  • fix(auth): allow loopback health probes (#1621) (@s0up4200)
  • fix(automations): align include-cross-seeds category apply (#1517) (@s0up4200)
  • fix(automations): scope skipWithin to only deleted action (#1538) (@jabloink)
  • fix(crossseed): avoid completion timeout misses on non-Gazelle torrents (#1536) (@s0up4200)
  • fix(crossseed): handle missing webhook collection tags (#1610) (@s0up4200)
  • fix(crossseed): normalize hdr aliases (#1572) (@s0up4200)
  • fix(crossseed): queue completion searches and retry rate-limit waits (#1523) (@s0up4200)
  • fix(crossseed): use autobrr indexer ids for webhooks (#1614) (@s0up4200)
  • fix(crossseed): valid partial matches being rejected (#1291) (@rybertm)
  • fix(database): avoid postgres temp-table statement caching (#1581) (@s0up4200)
  • fix(dirscan): honor canceled queued webhook runs (#1612) (@s0up4200)
  • fix(dirscan): queue webhook scans and tighten age filtering (#1603) (@s0up4200)
  • fix(dirscan): select concrete hardlink base dir (#1606) (@s0up4200)
  • fix(instances): improve settings dialog scrolling (#1569) (@nuxencs)
  • fix(proxy): reauth qbit passthrough requests (#1582) (@s0up4200)
  • fix(proxy): search endpoint handling (#1524) (@Audionut)
  • fix(qbit): prune empty managed dirs after delete_with_files (#1604) (@s0up4200)
  • fix(qbittorrent): stop reboot torrent_completed spam (#1515) (@s0up4200)
  • fix(settings): contain settings tab scrolling (#1567) (@nuxencs)
  • fix(settings): smoother gradient (#1570) (@nuxencs)
  • fix(torrents): copy MediaInfo summary without brackets (#1540) (@s0up4200)
  • fix(web): auto-append slash on path autocomplete selection (#1431) (@nitrobass24)
  • fix(web): check field.state.value type in AddTorrentDialog (#1613) (@s0up4200)
  • fix(web): handle SSO proxy redirect to /index.html (#1600) (@s0up4200)
  • fix(web): warn before enabling reannounce (#1583) (@s0up4200)

Other Changes​

  • chore(deps): bump the github group with 3 updates (#1535) (@dependabot[bot])
  • chore(deps): bump the github group with 7 updates (#1558) (@dependabot[bot])
  • chore(deps): bump the golang group with 15 updates (#1543) (@dependabot[bot])
  • chore(go,ci): adopt go fix, bump to 1.26, and speed up PR checks (#1480) (@s0up4200)
  • docs: add password reset section to CLI commands (#1598) (@s0up4200)
  • refactor(makefile): windows support (#1546) (@Audionut)
  • refactor(reflinking): add windows ReFS filesystem support (#1576) (@Audionut)
  • refactor(releases): share hdr normalization helpers (#1586) (@s0up4200)
  • refactor(web): tighten unified scope navigation (#1618) (@s0up4200)
  • test(handlers): cover tag baseline field requests (@s0up4200)

Full Changelog: https://github.com/autobrr/qui/compare/v1.14.1...v1.15.0

v1.14.1

Changelog​

Bug Fixes​

  • fix(auth): avoid chromium basic auth resets on expired qui sessions (#1495) (@s0up4200)
  • fix(automations): make managed full tag sync idempotent (#1494) (@s0up4200)
  • fix(crossseed): avoid webhook notification spam on pending matches (#1496) (@s0up4200)
  • fix(notifications): improve torrent and automation event samples (#1501) (@s0up4200)
  • fix(qbittorrent): ignore pseudo tracker labels in domain parsing (#1489) (@s0up4200)
  • fix(qbittorrent): repair unified torrent sorting (#1490) (@s0up4200)
  • fix(themes): clarify crypto donation discount flow (#1503) (@s0up4200)
  • fix(themes): clarify premium checkout and crypto flow (@s0up4200)
  • fix(torrents): scope instance column to unified cross-instance data (#1502) (@s0up4200)
  • fix(ui): hide unified entry when one instance is active (#1493) (@s0up4200)
  • fix(ui): remove single-instance indent in header menu (@s0up4200)
  • fix(ui): restore instances header in menu (@s0up4200)

Other Changes​

Full Changelog: https://github.com/autobrr/qui/compare/v1.14.0...v1.14.1