Use the latest version of this project to ensure you have the latest security patches.
If you discover a security vulnerability within this project, please do not report it publicly. Instead, please report it via email to the maintainer directly, via this e-mail: iroise-ia-939b6a4c0f344b73ae2a9d1892fe8b97@plane.email.
See docs/THREAT_MODEL.md for the system’s attack surface analysis, trust boundaries, and known residual risks. This is the canonical reference for security-relevant architectural decisions, and should be updated alongside any change that adds a new external integration, trust boundary, or unauthenticated route.
For a full inventory of how secrets and credentials are stored, accessed, and rotated throughout the codebase, see docs/SECRETS.md.
Vulnerabilities reported against a component Questarr ships (an npm dependency or the container base image) that do not actually affect the project are tracked, with an exploitability justification, in the VEX feed rather than silently ignored.
For the policy governing dependency vulnerability/license findings (SCA) and static analysis findings (SAST) — remediation thresholds, triage process, and the automated status checks that enforce them before release — see docs/VULNERABILITY_MANAGEMENT.md.
When deploying this application, please ensure you follow these security best practices:
Never commit your .env file to version control. This file contains sensitive information such as database credentials and API keys.
Ensure you set the following environment variables in your production environment:
JWT_SECRET: This is used to sign authentication tokens. Set a long, random string so sessions survive restarts (if unset, one is auto-generated and stored in the database instead — see docs/SECRETS.md).SQLITE_DB_PATH: Ensure the SQLite database file lives on a volume/path that isn’t publicly accessible or served by the web server.IGDB_CLIENT_SECRET: Your IGDB API secret.Questarr uses SQLite, not PostgreSQL — the provided docker-compose.yml does not run a separate database container. Persist the ./data volume (which holds sqlite.db) and never commit real credentials into docker-compose.yml; use a .env file or a git-ignored docker-compose.*local.yml override instead.
TRUST_PROXY=1 (or the proxy’s IP/subnet) so rate limits use real client IPs. Leave it unset when Questarr is reached directly: it would let clients forge their IP with X-Forwarded-For. See REVERSE_PROXY.md.HOST defaults to 0.0.0.0 (all network interfaces) in every deployment mode, not just Docker. Set HOST=127.0.0.1 if the app should only be reachable through a local reverse proxy.This policy governs how contributors are granted escalated permissions to this repository and its associated infrastructure. It is enforced by repository maintainers/admins for every access request — no escalation may be granted outside this process.
The current list of project members holding escalated access is maintained in MAINTAINERS.md.
“Escalated permissions” covers any of the following:
.env values for shared/hosted environments)No contributor may be granted an escalated permission listed above without prior review and explicit approval by an existing repository admin/maintainer. This includes:
Before approving escalated access, the approver should establish a justifiable lineage of identity for the contributor, using one or more of:
Requests that cannot establish any of the above should be denied or downgraded to a lesser scope (e.g., fork-and-PR contribution without direct write access) until sufficient trust is established.
Settings > Collaborators and teams) and remove access that is no longer needed.