Changelog
New Features
- eae2f0f: feat(cli): migrate Deluge, rTorrent and Transmission to qBittorrent with stats (#616) (@zze0s)
- 326eb70: feat(crossseed): fall back to MKV metadata IDs when ARR supplies none (#2398) (@s0up4200)
- 858d408: feat(crossseed): search by MKV tag IDs first when no arr supplies them (#2404) (@s0up4200)
- 8fcfc4d: feat(crossseed): show why a manual search accepted or rejected candidates (#2427) (@s0up4200)
- 0c2d5c4: feat(docker): add PUID/PGID support (#858) (@s0up4200)
- d8c1b54: feat(docs): redesign landing page (#2347) (@s0up4200)
- edbde7c: feat(fsops): add Backend interface, local implementation, and pool resolver (#1914) (@nitrobass24)
- 9c9f1ae: feat(i18n): add Traditional Chinese (zh-TW) translation (#2367) (@hkaden)
- 53e2b9d: feat(mobile): add torrent export to actions sheet (#2421) (@s0up4200)
- 019cbda: feat(preferences): add slow torrent settings to the queue form (#2428) (@s0up4200)
- 628c1a1: feat(settings): add client_settings key-value store and API (#2407) (@s0up4200)
- 5ca3819: feat(settings): sync UI state to the database (#2412) (@s0up4200)
- 26283eb: feat(settings): sync localStorage user settings to the database (#2409) (@s0up4200)
- 65ec931: feat(settings): sync table preferences and sidebar filters to the database (#2410) (@s0up4200)
- 3246dc7: feat(themes): store theme selection in the database (#2384) (@s0up4200)
- cec4768: feat(torrents): archive large exports (#2378) (@s0up4200)
Bug Fixes
- 63845eb: fix(automations): ignore absent skipped files in hardlink scans (#2370) (@s0up4200)
- 587a991: fix(automations): verify files before a cross-seed delete expands (#2351) (@s0up4200)
- fcf69f8: fix(build): add Windows executable extension (#2414) (@Audionut)
- b94db2c: fix(crossseed): disable download path on recheck adds so complete cross-seeds don't stall at 0% (#2432) (@statelycurmudgeon)
- bbd5e6a: fix(crossseed): don't reuse cached indexer sets across content types (#2420) (@s0up4200)
- 1ee78f7: fix(crossseed): log repeated size-mismatch rejections at trace (#2371) (@s0up4200)
- b7a0aa7: fix(crossseed): omit categories from ID-driven searches (#2395) (@s0up4200)
- 163c7ba: fix(crossseed): recover exact-size matches with compatible names (#2345) (@s0up4200)
- 0db75f7: fix(crossseed): retry per indexer when nothing usable comes back (#2400) (@s0up4200)
- fe90493: fix(crossseed): silence content fallback log (#2401) (@s0up4200)
- 6a58072: fix(crossseed): trust disc layout for content detection (#2359) (@s0up4200)
- 2776d8e: fix(database): resolve the sqlite→postgres import against the connection's schema (#2383) (@nitrobass24)
- a905842: fix(docker): honor configured non-root user (#2447) (@s0up4200)
- 549f1df: fix(docker): make the standalone Dockerfile build again (#2416) (@s0up4200)
- 032d2be: fix(lint): resolve the correctness findings in the golangci-lint backlog (#2386) (@s0up4200)
- 6a3efd8: fix(mobile): make Back close torrent details instead of leaving the page (#2426) (@s0up4200)
- 719c269: fix(orphanscan): protect metadata-less paths (#2445) (@s0up4200)
- 3516192: fix(orphanscan): skip torrents without metadata (#2441) (@s0up4200)
- b5e93a1: fix(qbittorrent): treat request timeouts as slow instances, not dead ones (#2408) (@s0up4200)
- a300051: fix(reflinktree): track root before support probe (#2341) (@s0up4200)
- bc0a605: fix(rss): improve large feed performance (#2438) (@s0up4200)
- 9ae4b8d: fix(settings): preserve latest cross-tab write (#2444) (@s0up4200)
- 9994018: fix(ui): show sideloaded themes in the mobile theme picker (#2373) (@s0up4200)
- 0af2eb2: fix(ui): show unknown for unavailable disk space (#2348) (@s0up4200)
- 5ec6247: fix(web): resolve dynamic imports relative to chunk for base_url deployments (#2442) (@MaKTaiL)
Other Changes
- be1e695: chore(build): bump Go to 1.27 (#2369) (@s0up4200)
- f27e061: chore(deps): bump anthropics/claude-code-action from 1.0.189 to 1.0.193 in the github group (#2394) (@dependabot[bot])
- 97c6c89: chore(deps): bump go-mediainfo to v0.8.0 (#2399) (@s0up4200)
- 4dee13a: chore(docs): require field testing and refuse Gemini-authored PRs (#2391) (@s0up4200)
- 1ef31d6: chore(github): trim pull request template (#2390) (@s0up4200)
- 3f3969e: chore(jackett): raise torznab torrent cache TTL to 24h (#2372) (@s0up4200)
- 8700cc4: chore(lint): clear the mechanical findings in the golangci-lint backlog (#2387) (@s0up4200)
- 13c533e: chore(lint): take the backlog to zero and gate on the whole repo (#2393) (@s0up4200)
- 9fedfcd: chore: bump golangci-lint to v2.13.0 and apply go fix for Go 1.27 (#2381) (@nitrobass24)
- 3635b35: chore: merge main into develop (@s0up4200)
- 527a33a: docs(agents): scope local test runs and keep caches off tmpfs (#2430) (@s0up4200)
- d86f0c0: docs(agents): stack cross-layer PRs and trim diffs before commit (#2419) (@s0up4200)
- 3c9b0c6: docs(config): explain UI preference persistence (#2443) (@s0up4200)
- d5876d1: docs(crossseed): explain that Prowlarr indexer filters also apply (#2429) (@s0up4200)
- f818025: docs(metrics): document exporter and add Grafana dashboard (#2431) (@s0up4200)
- 4d0ff12: docs: correct tracker customizations location and document the feature (#2364) (@s0up4200)
- eed7d1f: docs: explain when to pick postgres over sqlite (#2424) (@s0up4200)
- cc0162b: docs: link the community themes repository (#2377) (@s0up4200)
- 8d93881: docs: move macOS Container install to the docs site (#2357) (@s0up4200)
- 247ee81: perf(sse): compress stream sessions with gzip (#2358) (@s0up4200)
- d8daacb: perf(torrents): trim magnet_uri from the torrent list payload (#2360) (@s0up4200)
- 4d2e0d7: perf(web): migrate torrent tables to TanStack Table v9 (#2379) (@s0up4200)
- d72d754: refactor(services): use fsops.Backend for all filesystem operations (#1915) (@nitrobass24)
- 840a4a3: refactor(themes): serve built-in themes from the backend (#2385) (@s0up4200)
Full Changelog: v1.26.0...v1.27.0
Docker images
docker pull ghcr.io/autobrr/qui:v1.27.0docker pull ghcr.io/autobrr/qui:latest
What to do next?
- Join our Discord server
Thank you for using qui!