Skip to content

Configuration & environment

The API server reads 99 environment variables. The Required column below marks vars validated by requiredEnv() — they fail startup in every environment. Only JWT_SECRET is marked this way, because it has no safe default (a hardcoded signing key would be a security hole). The rest of the required-config story:

  • Database (required to start): supply either DATABASE_URL or the full DATABASE_HOST / DATABASE_PORT / DATABASE_NAME / DATABASE_USERNAME / DATABASE_PASSWORD set. The ECS deployment uses the 5-part form (each part is a separate secret).
  • Production boot check: when NODE_ENV=production, loadConfig() runs assertProdConfig() and fails fast with a single aggregated error naming every missing must-have var (JWT_SECRET and/or the database) — before it fails late at first use. Development and test are unaffected, so local runs and CI work with prod secrets unset.
  • REDIS_URL: optional — the sim queue falls back to an in-memory single-process mode. It is required only for the multi-tier deployment where the wind-worker consumes the shared queue, and is guarded per-tier at boot (worker-main exits, the enqueue path throws).
  • Everything else has a default or degrades gracefully — an unset integration key (e.g. FIRMS, Resend, Twilio, OAuth) simply disables that feature, even in production.

Full per-variable notes (what consumes each, rotation, prod source) are in the hand-maintained CONFIGURATION-INVENTORY.md.

VariableRequiredDefault
AGENCY_ACCOUNTS_ENABLEDnofalse
AGENCY_DELEGATION_ENABLEDnofalse
ANTHROPIC_API_KEYnonull
BROADCAST_CAP_KM2no2000
BROADCAST_CAP_RECIPIENTSno500
BROADCAST_ENABLEDnofalse
CONTACT_EMAILno(computed)
CORS_ALLOWED_ORIGINSno""
DATABASE_HOSTnoraw process.env
DATABASE_NAMEnoraw process.env
DATABASE_PASSWORDnoraw process.env
DATABASE_PORTnoraw process.env
DATABASE_URLnoraw process.env
DATABASE_USERNAMEnoraw process.env
DB_BOOTSTRAP_ON_BOOTnofalse
DEA_HOTSPOTS_BASE_URLno(computed)
DEA_INGEST_ENABLEDnotrue
DEA_INGEST_INTERVAL_MINno10
DELEGATED_AUTHORITY_ENABLEDnofalse
ENABLE_TEST_LOGINSnoraw process.env
EXCLUSION_ZONES_ENABLEDnofalse
FIRE_CLUSTERING_ACTIVE_HOURSno24
FIRE_CLUSTERING_ADJ_DIST_Mno3000
FIRE_CLUSTERING_ENABLEDnotrue
FIRE_CLUSTERING_INACTIVITY_HOURSno120
FIRE_CLUSTERING_LINK_DIST_Mno5000
FIRE_CLUSTERING_MIN_POINTSno1
FIRE_CLUSTERING_PROJ_SRIDno3577
FIRE_INCIDENTS_ASSOCIATE_DIST_Mno20000
FIRE_INCIDENTS_ENABLEDnofalse
FIRE_INCIDENTS_INTERVAL_MINno15
FIRE_SUMMARIES_ENABLEDnofalse
FIRE_SUMMARIES_MODELnoclaude-haiku-4-5-20251001
FIRMS_AU_BBOXno112,-44,154,-10
FIRMS_BASE_URLno(computed)
FIRMS_INGEST_ENABLEDno(computed)
FIRMS_INGEST_INTERVAL_MINno30
FIRMS_MIRROR_BASE_URLno(computed)
FIRMS_SENSORSno(computed)
GOOGLE_OAUTH_CLIENT_IDnonull
JWT_SECRETyes-
JWT_TTL_DAYSno30
LOG_FORMATno(computed)
LOG_LEVELno(computed)
MICROSOFT_OAUTH_CLIENT_IDnonull
MICROSOFT_OAUTH_TENANT_IDnocommon
MIGRATIONS_DIRnoraw process.env
NASA_FIRMS_API_KEYnonull
NODE_ENVnodevelopment
NOTIFICATION_TICK_MINnoraw process.env
NOTIFICATIONS_ENABLEDnoraw process.env
OPENMETEO_BASE_URLnohttps://api.open-meteo.com
OPENMETEO_FORECAST_HOURSno24
OPENMETEO_GRID_STEP_DEGnoraw process.env
OPENMETEO_INGEST_ENABLEDnotrue
OPENMETEO_INGEST_INTERVAL_MINno60
OVERPASS_URLnohttps://overpass-api.de/api/interpreter
PLACES_AU_BBOXno112,-44,154,-10
PLACES_INGEST_ENABLEDnofalse
PLACES_INGEST_INTERVAL_MINno1440
PORTno3000
PREDICTION_ENGINEnoadvected
PREDICTION_MAX_CLUSTERS_PER_CYCLEno500
PREDICTION_PERSISTENCE_ENABLEDnotrue
PREDICTION_RAW_RETENTION_DAYSno30
PREDICTION_VALIDATEDnofalse
PUBLIC_APP_URLnohttps://app.firepath.software
REDIS_URLnoraw process.env
RESEND_API_KEYnonull
RESEND_FROM_EMAILnonoreply@firepath.software
RESEND_FROM_NAMEnoFire Path AI
SEED_ADMIN_EMAILno(computed)
SEED_ADMIN_PASSWORDnoraw process.env
SPREAD_MODEL_VERSIONno(computed)
TERRAIN_REMOTE_WORKERnoraw process.env
THREAT_EMAIL_FALLBACK_ENABLEDnofalse
THREAT_FORECAST_UNAVAILABLE_ALERT_KMno(computed)
THREAT_REGISTRY_CADENCE_MINno5
THREAT_REGISTRY_ETA_HORIZON_MINno360
THREAT_REGISTRY_HOTSPOT_AGE_HOURSno24
THREAT_REGISTRY_RADIUS_Mno30000
THREAT_REGISTRY_RESOLVE_QUIET_CYCLESno3
THREAT_SMS_FALLBACK_ENABLEDnofalse
THREAT_SMS_FROMnonull
TWILIO_ACCOUNT_SIDnonull
TWILIO_AUTH_TOKENnonull
TWILIO_VERIFY_SERVICE_SIDnonull
VAPID_PRIVATE_KEYnoraw process.env
VAPID_PUBLIC_KEYnoraw process.env
VAPID_SUBJECTnoraw process.env
VITESTnoraw process.env
WIND_ENQUEUE_TIMEOUT_MSnoraw process.env
WIND_WORKER_CONCURRENCYnoraw process.env
WINDNINJA_DATA_DIRnonull
WINDNINJA_EXEC_MODEnoraw process.env
WINDNINJA_IMAGEnofirepath/windninja:3.13
WINDNINJA_PLATFORMnolinux/amd64
WINDNINJA_WORKER_ENABLEDnoraw process.env
ZONE_ALERT_SUPPRESSION_ENABLEDnofalse