v1.4.0 - Post-processing, New Downloaders, Import History, Mobile Improvements, and Major Security Hardening
LatestQuestarr v1.4.0 introduces a major set of improvements across post-processing, downloader support, observability, mobile experience, and security.
An easter egg has been added to Questarr; shouldn't be too hard to find if you think about the very famous easter eggs in gaming! Let me know what you think.
Migration note:
- The
PORTvariable indocker-compose.ymlhas been split into two:HOST_SIDE_PORT(host-side binding, default5000) andCONTAINER_INTERNAL_SIDE_PORT(internal container port, default5000). If you hadPORTset in your.envto customize the host port, rename it toHOST_SIDE_PORT. - With Post-processing, don't forget to add your volume mapping to the docker compose file.
Added
- Post-Processing Pipeline: Added an automated post-processing pipeline that handles unpacking and organizing files after a download completes (#583)
- Files can be unpacked automatically by setting auto-unpack setting
- An import modal is displayed via an alert in the library when the system cannot find the input or output path.
- Import History: New page listing import tasks (game claims, post-processing imports, Steam syncs) with a retention purge cron job to keep the history tidy (#714).
- Deluge Support: Added Deluge as a supported downloader (#697).
- Synology Download Station: Added support for Synology's built-in Download Station as a downloader (#567).
- Apprise Notifications: Added Apprise API and CLI notification modes. Use API mode with a remote Apprise server or CLI mode with the local
apprisebinary from Questarr settings. Bundled Python and Apprise in the default image so CLI mode works without a separate image split. - Personal Notes: Added the ability to attach personal notes to a game.
- Shelved Status: Added a "shelved" status for games (#645).
- Real-Time Logs: Added a real-time log streaming page with configurable detail level and truncation for large payloads.
- Send Logs: Added the ability to send logs directly from the app for troubleshooting (#648).
- Search Improvements: Added a date filter and infinite scroll to search, plus the ability to delete a result from the library directly from search (#673).
- Library Ratings: Added a user rating filter and inline rating in the library's list view; the Stats page now shows average user rating.
- Favorite groups: Added favorite release groups for auto downloading releases, in the settings.
- G4U as indexer: Added g4u.to as an indexer type, using their VIP API (#689).
- Vite Base Path: Added support for deploying behind a custom base path (#630).
- Code of Conduct: Added Contributor Covenant Code of Conduct.
- Downloaders Compatibility doc: Added a document detailing compatibility for supported downloaders.
Security
- SSRF: Hardened outbound fetches with DNS rebinding protection (#698).
- Dependency Vulnerabilities: Fixed 3 known vulnerabilities in
esbuild,form-data, andws(#734). - CI Hardening: Applied StepSecurity best practices, added a blocking Semgrep SAST gate and secretlint scanning, and added automatic SBOM generation to the Docker release pipeline.
- OpenSSF: passed baseline 1, 2 and 3 security self-eval (ongoing for 'passing' check). Update to current checks and new ones for hardened security. New policies. See SECURITY.md on GitHub.
Changed
- Dashboard: Consolidated the Dashboard into the Library component, removing the separate Library page.
- Docker:
- Refactoring of the entrypoint script.
SQLITE_DB_PATHis now optional and exported with a default of/app/data/sqlite.db.- The
PORTvariable indocker-compose.ymlhas been split into two:HOST_SIDE_PORT(host-side binding, default5000) andCONTAINER_INTERNAL_SIDE_PORT(internal container port, default5000). If you hadPORTset in your.envto customize the host port, rename it toHOST_SIDE_PORT.
- Dependencies: Node 22 to 26. Removed duplicate
@types/multerentry frompackage.json; updated Radix UI, semver, and other minor dependencies; upgradedcodecov/codecov-actionfrom v5 to v7; updated numerous packages via Dependabot includinglucide-react,recharts,framer-motion,jsdom,express,express-rate-limit,@tanstack/react-query,react-hook-form, and GitHub Actions. - Performance: Optimized the Add Game modal's collection-status check with a Set lookup (#677); the downloads page now polls every 30 seconds.
- Downloaders Module: Refactored
downloaders.tsinto smaller modules for easier maintenance (#627). - Notifications Behaviour: the notifications now trigger only once per event, instead of once per cron job.
- Genres & Platforms Display: Overflow-safe tag list for genres and platforms on game cards (#680).
- Aborted Downloads: Definitive downloader failures are now surfaced as "Aborted" instead of an unclear stuck state.
- List View: Removed the ultra-compact view in favor of an updated column-based row view.
- Date display: year-only release dates now display in full.
- Release Date Sorting when adding a game: IGDB results are not sorted by release date.
- Mobile Experience: Significant improvements to mobile layout and navigation (#644).
- Downloader/Indexer Version Logging: Periodic logging of downloader and indexer versions to aid troubleshooting (#649).
Removed
- Removed the HLTB integration from Questarr (no API or stable service).
Fixed
- Fixed status switcher UI and badge positioning in game details (#764).
- Fixed handling of the
stoppedDLstate in qBittorrent v5+. - Fixed an error when adding a torrent via qBittorrent.
- Fixed a scrolling issue in the claim modal.
- Fixed Torznab/Prowlarr download URL rewriting so proxied URLs are no longer double-wrapped on host aliases (#647).
- Fixed the files view and missing seed/leech numbers in download details.
- Hardened download status checks and migrated the Steam logger.
- Addressed edge cases in auto-search download rules
- Fixed the "Has results" badge that would create an offset in the game card.
- Fixed the Home Assistant add-on: moved to the repo root and corrected /data permissions on fresh installs (#696). See [../questarr/README.md]
Vulnerabilities Addressed
- js-yaml 4.1.1 → 5.2.1 — fixes CVE-2026-53550 (GHSA-h67p-54hq-rp68, MODERATE) — quadratic-complexity DoS in merge-key handling via repeated aliases.
- multer 2.1.1 → 2.2.0 — fixes the 2 CVEs left open in the v1.3.0
- CVE-2026-5038 (GHSA-3p4h-7m6x-2hcm, MODERATE) — DoS via incomplete cleanup of aborted uploads
- CVE-2026-5079 (GHSA-72gw-mp4g-v24j, HIGH) — DoS via deeply nested field names
- form-data (transitive, resolved 4.0.5 → 4.0.6) — fixes CVE-2026-12143 (GHSA-hmw2-7cc7-3qxx, HIGH) — CRLF injection via unescaped multipart field names/filenames.
- ws (transitive, resolved 8.18.3 → 8.21.0) — fixes 2 CVEs:
- CVE-2026-45736 (GHSA-58qx-3vcg-4xpx, MODERATE) — uninitialized memory disclosure
- CVE-2026-48779 (GHSA-96hv-2xvq-fx4p, HIGH) — memory exhaustion DoS from tiny fragments/data chunks
- esbuild (devDep) 0.28.0 → 0.28.1 — fixes GHSA-g7r4-m6w7-qqqr (no CVE assigned) — the Windows dev-server arbitrary-file-read issue flagged as still-open in the v1.2.1/v1.3.0 entries is now fixed.
- esbuild, nested copy — the new npm
overridesentry (@esbuild-kit/core-utils→esbuild ^0.25.0) bumps that dependency's bundled esbuild from 0.18.20 to 0.25.12, fixing GHSA-67mh-4wv8-2f99 (no CVE, MODERATE — dev server accepts arbitrary cross-origin requests). Separately,tsx's own duplicate nested esbuild copy (0.27.7, carrying the same GHSA-g7r4-m6w7-qqqr as above) was deduped away entirely by this bump round rather than upgraded. - vite (devDep) 8.0.12 → 8.1.3 — fixes both issues left open in the v1.3.0:
- CVE-2026-53571 (GHSA-fx2h-pf6j-xcff) —
server.fs.denybypass - CVE-2026-53632 (GHSA-v6wh-96g9-6wx3) — launch-editor NTLMv2 hash disclosure via UNC path on Windows
- CVE-2026-53571 (GHSA-fx2h-pf6j-xcff) —
Download: set your Docker image tag to v1.4.0 or latest
Full Changelog: v1.3.1...v1.4.0