Imported from SebboGit/atlas (
.claude/skills/atlas-env-vars/SKILL.md). Install upstream withnpx skills add SebboGit/atlas --skill atlas-env-vars. Copyright stays with the author.
Atlas — Environment Variables
See .env.example for the full documented list. At minimum:
DATABASE_URL— Postgres connection stringAUTH_SECRET— random 32+ byte secret for Auth.jsAUTH_URL— canonical app URLOIDC_ISSUER_URL— PocketID base URL (e.g.https://id.example.com)OIDC_CLIENT_ID— from PocketID admin UIOIDC_CLIENT_SECRET— from PocketID admin UISTORAGE_DIR— document storage root. Default./data/documents(project-relative — works forpnpm dev). docker-compose overrides to the absolute container path/app/data/documentsand bind-mounts the host directory onto it.STORAGE_MAX_BYTES— per-upload size cap, default20971520(20MB). The upload request envelope is sized from this at build time, so the published image's ceiling is the 20MB default unless that release was built with theSTORAGE_MAX_BYTESrepository variable set; a larger runtime value is clamped to it and warned about. Raise it by rebuilding with--build-arg STORAGE_MAX_BYTES=<bytes>(the prod compose overlay passes it through). Raising it also raises memory use — the body is buffered twice and before the auth decision, so each concurrent upload holds ~2x the value against the container'smem_limit— so cap the body at the reverse proxy as well (Caddyrequest_body max_size).STORAGE_ALLOWED_MIMES— comma-separated MIME allowlist enforced server-side after magic-byte detectionTILES_DIR— directory holding Protomaps PMTiles served by/api/tiles(default./data/tiles)PROTOMAPS_PMTILES_URL— URL the client loads the basemap from (default/api/tiles/world.pmtiles)OCR_ENGINE—tesseract(default, in-process) orpaddle(sidecar viaPADDLEOCR_URL)PADDLEOCR_URL— base URL of the PaddleOCR sidecar (only whenOCR_ENGINE=paddle)OLLAMA_URL— base URL of the Ollama instance used for extraction (defaulthttp://localhost:11434)OLLAMA_MODEL— model tag to use (e.g.qwen2.5:7b)NOMINATIM_CONTACT_EMAIL— contact email sent in the geocoderUser-Agent, both providers (required per Nominatim usage policy)PHOTON_URL— optional override for the Photon endpoint (defaults to the public https://photon.komoot.io; ADR-0018)NTFY_URL— base URL of the self-hosted ntfy server (e.g.https://ntfy.example.com)NTFY_TOKEN— optional access token when the ntfy server requires authCRON_PRUNE_SCHEDULE— six-field cron expression for the nightly prune (default0 40 3 * * *)CRON_STATUS_SCHEDULE— cron expression for the daily trip status sweep (default5 0 * * *, i.e. 00:05 UTC)CRON_TZ— IANA timezone for the prune run window (defaultUTC). The status sweep ignores it and always runs in UTC: its day math is UTC (ADR-0016), so a non-UTC trigger would fire it in the prior UTC day and lag trip transitions by a day. An unknown zone falls back to UTC with aworker.schedules.invalid_tzwarning.ATLAS_DEV_ORIGINS— comma-separated origins allowed for cross-origin RSC/HMR inpnpm dev(homelab LAN access). No effect in prod.NEXT_PUBLIC_ATLAS_DATE_FORMAT— client-side date display format (defaultiso)LOG_LEVEL— pino log level (trace|debug|info|warn|error), defaultinfoLOG_PRETTY—trueto pretty-print logs in dev; leavefalsein prod for JSON