Skip to main content

Environment Variables

Flow Steward configuration is environment-driven. The installer can generate managed .env blocks, but operators and developers should still know which groups exist and which variables are safe to change.

This page is the public, compact reference. The application repository also ships a generated environment catalog with owners, defaults, example files, and runtime read locations.

Environment review boundary​

The documentation review on 2026-10-04 recorded 430 names in 24 groups at application revision 62a95e3456d3a692092b5a04daecca504c3f97b1. That historical inventory had 78 additions, 28 removals, and 21 changed existing entries since revision 953e9aaf992947a1dc24cab308aa0aad6a6c81e0; it is not a count of the current manifest. An inventory entry is not proof that a variable reaches every service or that config set accepts it.

This page gives selected operator contracts. Follow the deployment-specific installer walkthrough, platform guide, and limits reference for where a value is applied. Variables belonging only to test, audit, build, or release tooling are not production tuning controls. Read the manifest and current consumer when a setting is not covered here; do not infer support or bounds from its name.

Deployment, ingress, and local storage​

These settings describe the current installation topology. Prefer installer answers and generated configuration over manually changing an installer-owned value. See the prompt-by-prompt manual for how to discover proxy names, networks, entrypoints, and certificate resolvers.

SettingMeaning and application boundary
FS_DEPLOYMENT_PROFILEcompact supervises runtime roles together; scalable separates role containers. Use the installer's profile-switch operation for an installed Compose stack.
FS_WORKER_PROCESSESCompact worker-process count, default 2. Decimal integer, minimum 1; bounded by worker metrics ports (maximum 56,336). Scalable rejects this setting. The complete listener map must also have no port collisions. Practical capacity depends on CPU/RAM and workload.
FS_WORKER_REPLICASScalable worker container count, default 1, accepted range 1–64. On an installed Scalable stack use config set --worker-replicas N, then config apply --confirm. Compact requires this count to remain 1.
FS_FILE_STORAGEInstaller file-storage selection: local_fs, bundled, or external_s3, subject to the selected profile and install mode. See the walkthrough's default/selection caveats.
ARTIFACT_STORAGE_BACKENDRuntime backend selected by installation: local_fs, s3, or in-memory test usage. Switching it does not migrate existing objects.
ARTIFACT_LOCAL_ROOT_DIRArtifact directory inside the runtime; Compact Compose mounts it at /data/artifacts. It needs durable storage.
FS_COMPACT_DATA_ROOTCompact persistent root, normally /data. The shipped image and Compose layout assume /data; Compose does not forward an arbitrary override for this name. On provider hosting, preserve the image layout and mount a durable volume there.
FS_INGRESS_MODE, FS_PROXY_KIND, FS_PROXY_PLACEMENTIngress: bundled_traefik, external_traefik, external_proxy, or Compact-only platform. Existing-proxy fragments support nginx or apache, with host or docker placement. These choices must agree with generated ports/routes.
FS_PROXY_NETWORK, FS_TRAEFIK_NETWORKExisting Docker proxy network selection. Use the exact inspected network name, not an invented default.
FS_TRAEFIK_HTTP_ENTRYPOINT, FS_TRAEFIK_HTTPS_ENTRYPOINT, FS_TRAEFIK_CERT_RESOLVERNames already configured in the existing Traefik static configuration. These variables do not create a resolver or entrypoint.
FS_PROXY_TRUSTED_IPSTrusted proxy addresses/CIDRs for the selected topology; see proxy discovery and trust guidance in the walkthrough.
FS_REVERSE_PROXY_BACKEND_PORT, FS_REVERSE_PROXY_MCP_PORTHost-facing backend ports for applicable existing-proxy topology; Docker proxy placement uses the internal service network instead.
FS_PUBLIC_HOST, FS_PUBLIC_BASE_URLThe public hostname/origin. Keep DNS, TLS, auth origins, callbacks, and proxy routes consistent.

The installer writes these values from its answers into .flow-steward/compose.env, which it regenerates on every run, and derives FS_PUBLIC_BASE_URL in .env.prod. Do not edit them by hand; change the answer instead (see Installer Reference).

Installer question (option)Variable
Deployment profile (--deployment-profile)FS_DEPLOYMENT_PROFILE
Compact runtime HTTP port (--runtime-http-port)FS_RUNTIME_HTTP_PORT
Compact worker processes (--worker-processes)FS_WORKER_PROCESSES
Ingress owner (--ingress-mode)FS_INGRESS_MODE
File storage (--file-storage)FS_FILE_STORAGE
Public host (--public-host), Public port (--public-port)FS_PUBLIC_HOST; both form FS_PUBLIC_BASE_URL
Plain-HTTP redirect port (--redirect-http-port)HTTP_PORT
Reverse-proxy backend port / MCP portFS_REVERSE_PROXY_BACKEND_PORT, FS_REVERSE_PROXY_MCP_PORT
Proxy placement, Proxy kind, Existing proxy networkFS_PROXY_PLACEMENT, FS_PROXY_KIND, FS_PROXY_NETWORK
Trusted proxy CIDRsFS_PROXY_TRUSTED_IPS
Existing Traefik network, entrypoints, certificate resolverFS_TRAEFIK_NETWORK, FS_TRAEFIK_HTTPS_ENTRYPOINT, FS_TRAEFIK_HTTP_ENTRYPOINT, FS_TRAEFIK_CERT_RESOLVER
ACME contact, ACME directory URLFS_ACME_CONTACT, FS_ACME_DIRECTORY_URL
Extension installer originFS_EXTENSION_INSTALLER_ORIGIN
Certificate path, Private key pathFS_TLS_CERTIFICATE_PATH, FS_TLS_PRIVATE_KEY_PATH

Compact supervisor budgets​

Read by core/infrastructure/config/compact_runtime.py before child creation. Values must be decimal integers. Invalid strings, values outside bounds, or invalid relationships fail startup; they do not silently fall back. All rows below use seconds and accept 1–86,400, except the restart limit, which is a count in 1–1,000.

VariableDefaultPurpose
FS_COMPACT_STARTUP_TIMEOUT_SECONDS300Initial aggregate readiness budget; also used by the optional pre-bootstrap dependency wait.
FS_COMPACT_DEPENDENCY_TIMEOUT_SECONDS300Allowed continuous readiness loss after the runtime has first become ready.
FS_COMPACT_RESTART_LIMIT3Allowed restart count in the window.
FS_COMPACT_RESTART_WINDOW_SECONDS300Restart accounting window.
FS_COMPACT_RESTART_BACKOFF_SECONDS2Initial restart delay.
FS_COMPACT_RESTART_BACKOFF_MAX_SECONDS30Maximum restart delay.
FS_COMPACT_SHUTDOWN_GRACE_SECONDS180Shutdown budget.
FS_COMPACT_KILL_RESERVE_SECONDS10Reserved forced-stop interval.
FS_COMPACT_HEALTH_INTERVAL_SECONDS2Internal health observation interval.
FS_COMPACT_HEALTH_STALE_SECONDS10Internal stale-health threshold.

Kill reserve must be shorter than shutdown grace; health interval must be shorter than stale threshold; initial backoff cannot exceed maximum backoff. Scalable rejects Compact-only supervisor controls. A code-supported setting must also be passed into the Compact process by your deployment. The current Compact Compose file explicitly forwards every budget in this table and uses the shutdown grace for its container stop timeout. On a managed provider, set the container stop timeout there as well; changing the runtime value alone does not change the provider timeout. In general, placing an arbitrary name in a Compose interpolation file alone is insufficient. Recreate the affected Compact container after changing its supported environment.

Cross-role monitoring​

These settings use core/infrastructure/config/monitoring_runtime.py, separately from the supervisor budgets above. Numeric values are decimal integers; blank or whitespace-only values use defaults. Leading/trailing whitespace is trimmed. Out-of-range or non-integer values fail validation.

VariableDefaultAccepted range / relationship
FS_MONITORING_INTERVAL_SECONDS60 seconds1–86,400; below the stale threshold.
FS_MONITORING_STALE_SECONDS180 seconds1–86,400.
FS_MONITORING_CURRENT_RETENTION_DAYS7 days1–3,650.
FS_MONITORING_HISTORY_RETENTION_DAYS7 days1–3,650.
FS_MONITORING_CLEANUP_BATCH_SIZE500 rows1–5,000.
FS_MONITORING_QUEUE_MAX_MESSAGES10,000 messages1–1,000,000.
FS_MONITORING_QUEUE_MAX_BYTES16,777,216 bytes1–1,073,741,824.
FS_MONITORING_OPERATION_TIMEOUT_SECONDS2 seconds1–30.

FS_MONITORING_HISTORY_ENABLED defaults to 0, also on an empty value, and accepts 0, 1, false, or true after trimming and lowercasing. Current Compose environments forward these monitoring controls, and Compact's explicit child-process allowlist forwards them to the reporting roles. Change them in the relevant deployment environment and recreate affected services; this does not make them arbitrary config set fields. FS_INSTALLATION_ID, FS_MONITORING_EXPECTATIONS, and FS_MONITORING_DEPENDENCIES describe installation identity and topology; preserve installer-generated values rather than inventing new ones to clear a monitoring warning.

Workflow-entrypoint request transport​

These historically named controls are consumed by POST /webhook/workflows/{entry_key}, but not by the JSON-only /api/workflow-runs route:

VariableDefaultContract
FS_TASK_UPLOAD_MAX_CONCURRENT_PREPARATIONS4Total concurrent request preparations; integer clamped to 1–64.
FS_TASK_UPLOAD_MAX_CONCURRENT_PREPARATIONS_PER_ACCOUNT2Per-account count, 1–64 and no greater than total.
FS_TASK_UPLOAD_MAX_CONCURRENT_PREPARATIONS_PER_PRINCIPAL2Per entrypoint ID plus auth mode, not per logged-in user; 1–64 and no greater than both account and total.
FS_TASK_UPLOAD_BODY_READ_TIMEOUT_SECONDS120 secondsMultipart and non-multipart body receipt only; clamped to 5–3,600 seconds.

Admission exhaustion returns HTTP 429; body-read timeout returns HTTP 408. Entrypoint records separately declare max_body_bytes, max_file_bytes, and max_files as the effective entrypoint size and count limits. None of the four active controls above has a shipped production Compose app binding or Compact child allowlist entry. Verify the rendered process environment instead of assuming that an environment-file edit takes effect. See Limits And File Formats.

Public job SSE admission​

VariableDefaultContract
FS_PUBLIC_SSE_MAX_CONNECTIONS_PER_PRINCIPAL10Process-local concurrent job-stream connections per principal; clamped to 1–1,000. Invalid integers use the default.
FS_PUBLIC_SSE_MAX_CONNECTIONS_PER_ACCOUNT100Process-local concurrent job-stream connections per account; clamped to 1–10,000. Invalid integers use the default.

Either limit returns HTTP 429 with stream_connection_limit and Retry-After: 1. Counters are not shared between application processes. These variables also lack explicit production Compose app bindings and Compact child allowlist entries. Production runtime disables repository .env autoload by default, so do not present .env.prod editing alone as a supported tuning path; verify the actual service environment. See API Reference.

Workflow data and nesting limits​

VariableDefaultContract
FS_DATASET_QUERY_MAX_RUNTIME_ROWS1,000Deployment maximum for rows materialized by one dataset_query. An explicit value must be a positive whole number; blank, invalid, zero, or negative fails. There is no code-level upper clamp. A missing step row_limit becomes min(100, maximum); a request above the maximum fails before fetch.
FS_INVOKE_WORKFLOW_MAX_DEPTH5Maximum invoke_workflow chain depth. Invalid, blank, zero, or negative uses 5; any positive integer is accepted. Exceeding it fails with invocation_depth_exceeded before child execution.

Both variables lack explicit production Compose app bindings and Compact child allowlist entries at this revision. Verify the effective worker/application environment before treating an environment-file change as active. Dataset rows are held in workflow state; preview rows are a separate display boundary. See Limits And File Formats.

Environment files​

FilePurpose
.env.exampleLocal development baseline.
.env.example.prodMinimal production stack baseline.
.env.example.memoryMemory backend override examples.
.env.example.opsObservability, auth, email, runtime, retention, DB tuning, and artifact storage knobs.
.env.example.qualitySonar and quality-tool settings.
.env.example.testE2E, Nightfire, and test-runner settings.

Typical local start:

cp .env.example .env

For production, do not copy .env.example.prod by hand: ./install.sh creates .env.prod itself, generates its passwords and keys, and rewrites the keys it owns on every run.

Use ./install.sh for a fresh or resumable installation. After installation, on Scalable use ./flow-steward config show, config validate, config set, and config apply for the typed configuration fields those commands expose. They do not accept arbitrary environment-variable names. Other settings require the deployment's supported environment source and recreation of affected services.

Variables most users touch​

VariablePurpose
Account credential profilesProvider credentials are created in the application and scoped to an account; core installation does not require one.
FS_DEFAULT_PROVIDERDefault model provider, such as openai.
FS_DEFAULT_MODELDefault model used when a more specific setting is not chosen.
FS_DEFAULT_TEMPERATUREDefault model temperature.
APP_PORTApplication listener/Compose port input, depending on topology. Compact serves public traffic through PORT / FS_RUNTIME_HTTP_PORT; do not use APP_PORT to change that public router.
FS_PUBLIC_BASE_URLPublic origin used for links, redirects, and trusted deployment URLs.
FS_SECRET_KEYSecret key for auth/session signing. Must be strong in production.
ENCRYPTION_KEYStable AES-GCM key for encrypted stored secrets.
FS_AUTH_TRUSTED_ORIGINSAllowed public origins for browser-facing auth flows.
FS_AUTH_BOOTSTRAP_ENABLEDEnables the first-admin bootstrap flow. Disable after setup in production.
MCP_BEARER_TOKENToken used by local MCP clients such as Codex sessions.

Core runtime​

VariablePurpose
FS_STACK_ENVIRONMENTInstaller-managed stack environment marker.
ENVIRONMENTRuntime environment marker used to avoid leaking local defaults into production.
APP_PORTApplication HTTP port.
FS_DB_DSNPrimary Flow Steward database DSN. Secret.
LANGGRAPH_POSTGRES_URIPostgres URI used by LangGraph checkpoint/runtime paths. Secret.
RABBITMQ_URLRabbitMQ connection URL. Secret.
MCP_URLInternal Flow Steward MCP URL.
FS_PUBLIC_BASE_URLPublic base URL for the deployed app.
POSTGRES_DBDatabase name.
POSTGRES_USERDatabase user.
POSTGRES_PASSWORDDatabase password. Secret.

Memory and search backends​

Canonical memory records live in Postgres. Optional vector and graph services are indexes and must be selected explicitly.

VariablePurpose
FS_MEMORY_PROFILEOverall memory profile, commonly postgres_unified.
FS_MEMORY_REPOSITORY_BACKENDRepository-memory backend.
FS_MEMORY_KNOWLEDGE_BACKENDKnowledge-memory backend.
FS_MEMORY_TEXT_SEARCH_BACKENDText search backend, commonly postgres_fts.
FS_MEMORY_VECTOR_BACKENDVector backend, commonly postgres_pgvector.
FS_CONTEXT_GRAPH_BACKENDContext graph backend, commonly postgres_age.
FS_PGVECTOR_DSNOptional DSN override for pgvector.

Authentication and access​

VariablePurpose
FS_LOCAL_AUTH_ENABLEDEnables local username/password auth.
FS_AUTH_COOKIE_SECURERequires secure cookies. Use 1 for HTTPS production.
FS_AUTH_BOOTSTRAP_ENABLEDEnables first-admin bootstrap.
FS_AUTH_BOOTSTRAP_LOCALHOST_ONLYRestricts bootstrap to localhost.
FS_AUTH_BOOTSTRAP_TOKENOptional bootstrap token. Secret.
FS_AUTH_PASSWORD_MIN_LENGTHMinimum password length.
FS_AUTH_LOGIN_MAX_ATTEMPTSLogin attempts before lockout.
FS_AUTH_LOGIN_LOCKOUT_SECONDSLockout duration.
FS_AUTH_PASSWORD_RESET_ENABLEDEnables password reset.
FS_AUTH_PASSWORD_RESET_TTL_MINUTESPassword reset token lifetime.
FS_AUTH_PASSWORD_RESET_MAX_ATTEMPTSPassword reset attempts before lockout.
FS_AUTH_PASSWORD_RESET_LOCKOUT_SECONDSPassword reset lockout duration.

Authentication numeric contracts​

These values are parsed once when core.application.auth.config is imported. They require base-10 integer strings. An empty or non-integer value does not fall back: it can prevent an importing process from starting. Values below the listed minimum are raised to that minimum.

VariableDefaultMinimum / relationshipConsumer effect
FS_AUTH_SESSION_TTL_HOURS24 hours1 hourOrdinary authenticated-session lifetime.
FS_AUTH_REMEMBER_SESSION_TTL_HOURS720 hoursEffective ordinary-session TTLRemembered sessions can never be shorter than ordinary sessions.
FS_AUTH_PASSWORD_ITERATIONS260,000100,000Password hashing iteration count.
FS_AUTH_PASSWORD_MIN_LENGTH10 characters8 charactersEnforced when passwords are accepted by the auth API.
FS_AUTH_LOGIN_RATE_WINDOW_SECONDS300 seconds30 secondsLogin-attempt accounting window.
FS_AUTH_LOGIN_MAX_ATTEMPTS53Attempts allowed within the login window before lockout.
FS_AUTH_LOGIN_LOCKOUT_SECONDS900 seconds30 secondsLogin lockout duration.
FS_AUTH_PASSWORD_RESET_TTL_MINUTES30 minutes5 minutesPassword-reset token lifetime.
FS_AUTH_PASSWORD_RESET_RATE_WINDOW_SECONDS300 seconds30 secondsPassword-reset attempt window.
FS_AUTH_PASSWORD_RESET_MAX_ATTEMPTS53Password-reset attempts allowed within the window.
FS_AUTH_PASSWORD_RESET_LOCKOUT_SECONDS900 seconds30 secondsPassword-reset lockout duration.

Change these only through the supported deployment environment, then recreate every application/API process. They are not arbitrary keys accepted by flow-steward config set.

LLM providers and AI behavior​

Provider secrets belong in account-scoped credential profiles. The default provider/model variables select behavior; they are not proof that credentials exist, and no cross-provider fallback is implied.

VariablePurpose
FS_DEFAULT_PROVIDERDefault provider.
FS_DEFAULT_MODELDefault model.
FS_DEFAULT_TEMPERATUREDefault model temperature.
FS_LLM_REQUEST_TIMEOUT_SECONDSOptional timeout for model requests.

MCP​

VariablePurpose
MCP_URLInternal Flow Steward MCP endpoint.
MCP_BEARER_TOKENBearer token for external MCP clients. Secret.
FS_MCP_AUTH_DISABLEDDisables MCP auth in selected local-dev contexts. Do not use in production.

OpenAPI and built-in docs exposure​

These variables control the application server's curated OpenAPI/docs routes, not this standalone Docusaurus site. The default FastAPI /openapi.json, /docs, and /redoc routes are disabled.

VariablePurpose
FS_OPENAPI_PUBLIC_ENABLEDEnables /openapi-public.json for the external integration API allowlist.
FS_DOCS_PUBLIC_ENABLEDEnables /docs/api when the public schema is enabled.
FS_OPENAPI_INTERNAL_ENABLEDEnables /openapi-internal.json for authenticated app/operator /api/* routes.
FS_DOCS_INTERNAL_ENABLEDEnables /docs/internal when the internal schema is enabled.
FS_OPENAPI_PUBLIC_REQUIRE_AUTHRequires auth for the public schema and Swagger UI; defaults to 1.
FS_OPENAPI_INTERNAL_REQUIRE_AUTHRequires auth for the internal schema and Swagger UI; defaults to 1.

Attachments and redaction​

VariablePurpose
FS_ATTACHMENT_MAX_SIZE_BYTESStored-attachment size policy; see workflow-run inputs and attachments. This does not make the JSON-only workflow-run API an upload endpoint.
FS_ATTACHMENT_MAX_FILESStored-attachment count policy; see workflow-run inputs and attachments. This does not make the JSON-only workflow-run API an upload endpoint.
FS_ALLOWED_ATTACHMENT_MIMESMIME policy, including the generic-binary exception described in Default formats and type matching.
FS_ALLOWED_ATTACHMENT_EXTENSIONSFilename-extension policy and empty-list behavior; see Default formats and type matching.
FS_EXTENSION_DEBUG_PAYLOADSEnables extension payload debug details. Keep off normally.
FS_EXTENSION_PAYLOAD_REDACT_KEYSSensitive keys redacted from extension payloads.
FS_EXTENSION_PAYLOAD_REDACT_EXACT_KEYSExact sensitive keys redacted from extension payloads.
FS_EXTENSION_PAYLOAD_REDACT_KEY_FRAGMENTSKey fragments treated as sensitive.
FS_EXTENSION_PAYLOAD_REDACT_MAX_DEPTHMax redaction traversal depth.
FS_EXTENSION_PAYLOAD_STRING_TRUNCATE_LENGTHMax string length retained in payload traces.
FS_TRACE_REDACT_MAX_LENGTHMax length retained in redacted traces.

Artifact storage​

VariablePurpose
ARTIFACT_STORAGE_BACKENDArtifact backend: memory, s3, or local_fs.
ARTIFACT_S3_ENDPOINT_URLS3-compatible endpoint URL.
ARTIFACT_S3_BUCKETArtifact bucket.
ARTIFACT_S3_ACCESS_KEYS3 access key. Secret.
ARTIFACT_S3_SECRET_KEYS3 secret key. Secret.
ARTIFACT_S3_REGIONS3 region.
ARTIFACT_S3_KEY_PREFIXOptional object key prefix.
ARTIFACT_S3_USE_SSLWhether S3 endpoint uses SSL.
ARTIFACT_S3_PRESIGN_TTL_SECONDSPresigned URL lifetime; code/example and Compose defaults differ as documented in Artifact download-link lifetime.
ARTIFACT_LOCAL_ROOT_DIRLocal artifact root for local filesystem storage.

Observability, logs, and email​

VariablePurpose
SENTRY_DSNSentry backend DSN. Secret.
SENTRY_ENVIRONMENTSentry environment label.
SENTRY_RELEASERelease identifier for telemetry.
SENTRY_TRACES_SAMPLE_RATEBackend Sentry trace sample rate.
SENTRY_PROFILES_SAMPLE_RATEBackend Sentry profiling sample rate.
SENTRY_SEND_DEFAULT_PIIAllows default PII capture in Sentry. Keep disabled unless approved.
SENTRY_AUTO_ENABLING_INTEGRATIONSEnables Sentry auto integrations. Defaults off.
FS_OBSERVABILITY_DSNObservability database DSN. Secret.
FS_LOG_LEVELPlatform log level.
FS_LOG_FILE_LEVELRuntime file sink log level.
FS_LOG_STDERR_LEVELRuntime stderr sink log level.
FS_LOG_FORMATLog format.
FS_LOG_DIRRuntime log directory.
FS_LOG_FILE_BASENAMERuntime daily log basename.
FS_LOG_FILE_ENABLEDEnables runtime file logging.
FS_LOG_STDERR_ENABLEDEnables runtime stderr logging.
FS_LOG_RETENTION_DAYSLog retention window.
FS_LOG_CAPTURE_WARNINGSRoutes Python warnings into runtime logging.
FS_LOG_UTCUses UTC timestamps for runtime logs.
FS_METRICS_TOKENOptional token required by /metrics endpoints. Secret.
FS_PROCESS_METRICS_HOSTMetrics listener host.
FS_WORKER_METRICS_PORTWorker metrics port.
FS_CONTROL_METRICS_PORTControl metrics port.
SYSTEM_EMAIL_ENABLEDEnables system email.
SYSTEM_EMAIL_PROVIDEREmail provider, such as smtp.
SYSTEM_EMAIL_FROM_ADDRESSSender address.
SYSTEM_EMAIL_SMTP_HOSTSMTP host.
SYSTEM_EMAIL_SMTP_PORTSMTP port.
SYSTEM_EMAIL_SMTP_USERNAMESMTP username.
SYSTEM_EMAIL_SMTP_PASSWORDSMTP password. Secret.
SYSTEM_EMAIL_ANYMAIL_CONFIG_JSONAnymail provider config JSON. Secret if it contains credentials.

Runtime controls and retention​

VariablePurpose
CONTROL_LOOPS_ENABLEDEnables control-plane loops in the control-plane service.
FS_WATCHDOG_ENABLEDEnables watchdog loop.
FS_WATCHDOG_INTERVAL_SECONDSWatchdog interval.
FS_WATCHDOG_AUTO_APPLYAllows watchdog to apply configured repairs.
FS_SCHEDULED_JOBS_ENABLEDEnables scheduled jobs.
FS_SCHEDULED_JOBS_INTERVAL_SECONDSScheduled-job scan interval.
FS_DASHBOARD_ROLLUP_ENABLEDEnables dashboard rollup generation.
FS_DASHBOARD_ROLLUP_INTERVAL_SECONDSDashboard rollup interval.
FS_RETENTION_LOGS_DAYSLog retention days.
FS_RETENTION_MESSAGES_DAYSMessage retention days.
FS_RETENTION_TRASH_DAYSTrash retention days.
FS_RETENTION_JOBS_DAYSJob retention days.
FS_RETENTION_EVENTS_DAYSEvent retention days.
FS_RETENTION_RETRY_QUEUE_DAYSRetry queue retention days.
FS_RETENTION_TERMINAL_JOB_CHECKPOINTS_DAYSTerminal checkpoint retention days.
FS_WORKSPACES_ROOTWorkspace artifact root for local prune operations.
FS_WORKSPACE_MAX_AGE_DAYSMax age before workspace artifacts are eligible for pruning.

Frontend and tests​

VariablePurpose
FS_AUTO_RELOADEnables local backend/frontend autoreload services in supported dev stacks.
VITE_PORTVite dev server port.
VITE_USE_POLLINGEnables polling file watcher.
VITE_POLL_INTERVALPolling interval.
APP_BASE_URLApp URL for tests.
TEST_RUNNER_BASE_URLInternal app URL for test runner.
E2E_VERIFY_SSLWhether E2E tests verify HTTPS certificates.
E2E_ADMIN_USERNAMEE2E admin username.
E2E_ADMIN_PASSWORDE2E admin password. Secret.
E2E_OPERATOR_USERNAMEE2E operator username.
E2E_VIEWER_USERNAMEE2E viewer username.
NIGHTFIRE_LANENightfire test lane.
NIGHTFIRE_FULL_UIEnables full UI Nightfire coverage.

Quality and security tools​

VariablePurpose
SONAR_ENABLEDEnables Sonar usage.
SONAR_TOKENSonar token. Secret.
SONAR_HOST_URLSonar URL from containers.
SONAR_WAIT_URLSonar URL from host waits.
SONAR_PROJECT_KEYSonar project key.
SONAR_PROJECT_NAMESonar project name.
SONAR_EXPORTEnables issue export.
SONAR_EXPORT_DIRExport output directory.
SECURITY_SCAN_MODESecurity scanner mode.
SECURITY_FAIL_CLOSED_ON_POLICY_ERRORFails closed when policy cannot load.
SECURITY_PII_SALTSalt for PII handling. Secret.

Production images and host paths​

VariablePurpose
FS_COMPACT_IMAGEImmutable Compact runtime image pin, including the public router and supervised roles.
FS_APP_IMAGEScalable application role image pin.
FS_WORKER_IMAGEWorker role image pin.
FS_CONTROL_IMAGEControl-plane role image pin.
FS_CLI_IMAGEPublic CLI role image pin.
FS_FRONTEND_IMAGEDevelopment frontend image override. Production app images already contain the frontend; this is not a separate production role pin.
MCP_IMAGEFlow Steward MCP image pin.
TRAEFIK_IMAGETraefik image pin.
POSTGRES_IMAGEPostgres image pin.
RABBITMQ_IMAGERabbitMQ image pin.
FS_EXTENSIONS_DIRHost-visible extensions directory.
FS_LOGS_DIRHost-visible logs directory.
FS_BACKUPS_DIRHost-visible backups directory.
FS_DB_SCHEMA_DIRHost-visible DB schema directory.

Security scanning contract​

SECURITY_SCAN_MODE accepts exactly monitor, enforce_standard, enforce_strict, or disabled. An invalid value falls back to the environment-dependent default: enforce_standard in production and monitor elsewhere. monitor scans and logs without blocking, although persisted-data redaction still applies. disabled turns off secret, injection, and PII detection and should not be used as a production bypass.

SECURITY_FAIL_CLOSED_ON_POLICY_ERROR is independent of scan mode. Values 1, true, yes, or on make policy parse/resolution errors block payloads, including in monitor mode; the default is off.

SECURITY_PII_SALT is a secret used for deterministic PII pseudonymization. A production process refuses to start when the value is empty or a known placeholder. Outside production, a missing value creates a process-local random salt, so pseudonyms will not remain stable across restarts. Provision one durable, unique secret and preserve it when stable pseudonyms are required.

All three settings are read at module import. Apply changes by recreating every service that imports the security configuration; rotating the PII salt changes future deterministic pseudonyms.

Secrets​

Never commit real values for variables containing passwords, tokens, API keys, DSNs, private keys, or shared secrets. Rotate secrets if they appear in logs, screenshots, docs, or shared review artifacts.

Canonical manifest coverage​

The canonical source is core/infrastructure/config/flow_steward_env_manifest.json in the application checkout. Its defaults, owners, groups, and secret flags are useful inventory metadata; the effective consumer and selected deployment still determine behavior. Use the target manifest and current readers to identify supported settings and their effects.

For each upgrade, compare the target manifest and its readers, check that the selected Compose/provider configuration forwards the setting, and recreate the affected process. Preserve secrets in the deployment's supported secret source. A variable accepted by the runtime is not automatically an arbitrary key supported by flow-steward config set.