Environment variables

Copy .env.example to .env for local development. Docker Compose deployments use additional variables documented in README.md.

Core services

VariableRequiredDescription
DATABASE_URLYesPostgreSQL connection string
REDIS_URLYesRedis for BullMQ job queue
MINIO_ENDPOINTYesS3-compatible storage host
MINIO_PORTYesMinIO port (e.g. 9000)
MINIO_ACCESS_KEYYesMinIO access key
MINIO_SECRET_KEYYesMinIO secret key
MINIO_USE_SSLNotrue / false
MINIO_BUCKETYesBucket for scan artifacts

Authentication

VariableDescription
NEXTAUTH_SECRETSession signing / encryption secret (long random string)
NEXTAUTH_URLPublic app URL (e.g. http://localhost:3000)
ADMIN_EMAILSeed script default admin email
ADMIN_PASSWORDSeed script default admin password — change after first login
NEXT_PUBLIC_SOURCE_CODE_URLOptional link on login page

GitHub

VariableDescription
GITHUB_ID / GITHUB_SECRETOptional NextAuth GitHub login
GITHUB_OAUTH_CLIENT_IDOAuth app for Repositories + fix PR (falls back to GITHUB_ID)
GITHUB_OAUTH_CLIENT_SECRETOAuth secret (falls back to GITHUB_SECRET)
TOKEN_ENCRYPTION_KEYEncrypts stored GitHub tokens (defaults to NEXTAUTH_SECRET)
GITHUB_WEBHOOK_SECRETHMAC secret for /api/webhooks/github
GITHUB_WEBHOOK_MAIN_SCAN_TYPEDefault-branch push scan: SAST_ONLY or FULL
GITHUB_PR_TOKEN / GITHUB_TOKENLegacy PAT — not used when OAuth is connected
Authorization callback URL:
{NEXTAUTH_URL}/api/integrations/github/callback

OAuth scopes requested: read:user repo

Bitbucket Cloud

App password and workspace are configured in Settings → Integrations (encrypted in DB). Webhook secret optional in UI or env.

VariableDescription
BITBUCKET_WEBHOOK_SECRETHMAC secret for /api/webhooks/bitbucket (X-Hub-Signature)

Webhook triggers: repository push, pull request created, pull request updated → PR events queue INCREMENTAL scans.

Azure DevOps

Organization name and PAT are configured in Settings → Integrations. Service hooks use Basic auth (password only).

VariableDescription
AZURE_DEVOPS_WEBHOOK_SECRETBasic auth password for /api/webhooks/azure-devops

Service hook events: git.push, git.pullrequest.created, git.pullrequest.updated.

Default-branch webhook scans

VariableDefaultDescription
GITHUB_WEBHOOK_MAIN_SCAN_TYPESAST_ONLYScan type after push/merge to default branch (GitHub, Bitbucket, Azure)

GitLab

VariableDescription
GITLAB_ID / GITLAB_SECRETOptional GitLab OAuth
GITLAB_URLGitLab instance base (default https://gitlab.com)

LLM & worker

VariableDefaultDescription
OPENROUTER_API_KEYCloud LLM via OpenRouter
OPENROUTER_MODELDefault model when using OpenRouter env key
WORKER_CONCURRENCY2Parallel scan jobs per worker
MAX_LLM_CONCURRENCY5Parallel LLM calls within a scan
LLM_CHUNK_TOKENS3000Code chunk size for API models
LLM_CHUNK_OVERLAP_TOKENS200Overlap between chunks
LLM_MAX_RESPONSE_TOKENS4096Max LLM response tokens
OLLAMA_CHUNK_TOKENS1200Chunk size for local Ollama
OLLAMA_CHUNK_OVERLAP_TOKENS100Ollama overlap
OLLAMA_MAX_RESPONSE_TOKENS2048Ollama max response
LLM_MIN_CONFIDENCE0.7Drop LLM findings below this confidence
OLLAMA_HOSTDocker: host Ollama URL (see README)

Supply chain & SCA

See Supply chain security for what these control. Every external lookup degrades gracefully: if a source is unreachable the scan continues and reports less, rather than reporting a clean result it cannot support.

License policy

VariableDefaultDescription
LICENSE_POLICY_DENYAGPL-*,GPL-*,SSPL-*,BUSL-*,CC-BY-NC-*,Commons-Clause,Elastic-2.0Licenses that fail policy (HIGH finding). SPDX IDs or PREFIX-* wildcards, comma-separated
LICENSE_POLICY_WARNLGPL-*,MPL-*,EPL-*,CDDL-*,OSL-*,MS-RL,CPAL-*Licenses allowed but flagged for review (LOW finding)
LICENSE_POLICY_FLAG_UNKNOWNfalseReport dependencies whose license could not be determined

Dependency metadata (deps.dev)

VariableDefaultDescription
ENABLE_DEPS_DEVtrueSet false to disable license, provenance, and dependency-path lookups entirely (air-gapped)
DEPS_DEV_API_URLhttps://api.deps.devOverride to point at a mirror
DEPS_DEV_TIMEOUT_MS10000Per-request timeout
DEPS_DEV_CONCURRENCY10Parallel metadata requests
DEPS_DEV_CACHE_TTL_MS21600000Metadata cache lifetime (6h). Package metadata is immutable per version, so repeat scans are nearly free
DEPS_DEV_MAX_CACHE_ENTRIES20000Cache size bound
DEPS_DEV_MAX_GRAPH_FETCHES60Max dependency graphs fetched per scan when explaining transitive vulnerabilities. Truncation is reported in the scan log

Exploitation signals

VariableDefaultDescription
ENABLE_EPSS_KEVtrueSet false to disable EPSS and CISA KEV enrichment
EPSS_API_TIMEOUT10000EPSS request timeout

AI triage of dependency CVEs

Triage reads the published advisory text so exploitability conditions come from the advisory rather than the model's recollection. These budgets keep the advisory inside the model's context window — local models default to a much smaller window, so they use smaller values.

VariableDefaultDescription
SCA_TRIAGE_ADVISORY_CHARS1500Advisory characters per CVE (API models)
SCA_TRIAGE_ADVISORY_CHARS_OLLAMA500Advisory characters per CVE (local models)
SCA_TRIAGE_BATCH_SIZE20CVEs per triage request (API models)
SCA_TRIAGE_BATCH_SIZE_OLLAMA8CVEs per triage request (local models)
MALICIOUS_PKG_MIN_CONFIDENCE0.8Minimum confidence for AI malicious-package findings
Raising the advisory or batch values on a local model can silently overflow its context window and degrade triage quality. Increase the model's context size first.

Container image scanning

VariableDefaultDescription
TRIVY_CACHE_DIR/var/cache/trivyTrivy database location. Mount a pre-populated cache here for air-gapped scanning

Trivy ships inside the worker image, so no host installation is required. When the vulnerability database mode is offline, Trivy scans against the mounted cache without attempting an update.

Email (SMTP)

VariableDescription
SMTP_HOSTMail server hostname
SMTP_PORTUsually 587 (TLS) or 465
SMTP_USER / SMTP_PASSWORDCredentials
SMTP_FROMFrom address
SMTP_TLStrue to use STARTTLS

Local dev: use Mailpit or similar on port 1025/8025.

Docker-only (README)

Production Compose may also define:

UI settings (LLM provider, policies, build gates) are stored in PostgreSQL per organization. Environment variables act as defaults and fallbacks for LLM keys and SMTP.