Skip to content

Configuration

Every setting comes from the environment, or from an env file. Which file depends on how the installation was started:

Started with Reads
fluksio serve env inside the data directory ($FLUKSIO_ENV_FILE)
the Docker stack .env beside docker/

Anything already exported wins over the file.

Storage

Variable Default Notes
DATA_DIR flow-data (~/.fluksio via the CLI) everything below derives from this
DATABASE_URL SQLite in DATA_DIR any SQLAlchemy URL
FLOWS_DIR $DATA_DIR/flows the git repository holding flows
SECRETS_FILE $DATA_DIR/secrets.enc encrypted credentials, deliberately outside the repo
ALERTS_FILE $DATA_DIR/alerts.json channels and rules
PANELS_FILE $DATA_DIR/panels.json wall-panel pairings
OAUTH_PRIVATE_KEY_FILE $DATA_DIR/oauth-key.pem signs agent and worker tokens
CLOUD_CONFIG_FILE $DATA_DIR/cloud.json the portal enrolment, if any

Set DATA_DIR and the rest follow. Set one explicitly and it wins — which is what the container images do to pin everything onto /data.

The four files that must be on persistent storage

secrets.enc, alerts.json, panels.json and oauth-key.pem are written at runtime. In a container, anything not on a volume lands in the writable layer and is lost on the next rebuild — un-pairing every screen and revoking every agent.

State

Variable Default Notes
REDIS_HOST unset without it, flow state lives in memory and does not survive a restart
REDIS_PORT 6379

Flow state is the last value of every message, node memory, and the run queue. Redis here is persistence, not a cache — run it with append-only persistence on.

Identity and access

Variable Default Notes
SECRET_KEY generated signs sessions and derives the secrets-store key
ACCESS_TOKEN_EXPIRE_MINUTES 11520 (8 days)
FIRST_SUPERUSER absent means the CLI creates one on first run
FIRST_SUPERUSER_PASSWORD absent means one is generated and printed once
DOMAIN localhost what the API and OAuth issuer are built from
FRONTEND_HOST http://localhost:5173 used in mails, OAuth metadata and panel pairing links
BACKEND_CORS_ORIGINS [] comma-separated; FRONTEND_HOST is always allowed

Rotating SECRET_KEY

The secrets store is encrypted with a key derived from it. Change it and the store stops decrypting, and every session is signed out. Re-enter your secrets, or plan the rotation properly.

Environment

Variable Default Notes
ENVIRONMENT local local, staging or production
PRIVATE_API_ENABLED false unauthenticated test-only endpoints; needs ENVIRONMENT=local too

production closes /docs, /redoc and the OpenAPI document, because the schema enumerates every endpoint the installation serves — including the paths webhook nodes mounted at runtime. It also turns a changethis secret from a warning into a refusal to start.

The engine

Variable Default Notes
FLOW_MAX_WORKERS 4 node-code subprocesses run in parallel
FLOW_NODE_TIMEOUT 30.0 seconds a node may run, unless it sets its own
OBS_RETENTION_DAYS 30 how long metrics, events and run records are kept

Agents

Variable Default Notes
MCP_ENABLED false opens the /mcp endpoint and OAuth client registration
MCP_TOKEN_EXPIRE_MINUTES 60 an agent's token is a bearer secret held by a program
MCP_REFRESH_EXPIRE_DAYS 30
OAUTH_CODE_EXPIRE_SECONDS 60

See Agents over MCP.

Mail

Needed for password-reset mails. Without SMTP_HOST and EMAILS_FROM_EMAIL, mail is simply off.

Variable Default
SMTP_HOST
SMTP_PORT 587
SMTP_USER / SMTP_PASSWORD
SMTP_TLS / SMTP_SSL true / false
EMAILS_FROM_EMAIL
EMAILS_FROM_NAME Fluksio
EMAIL_RESET_TOKEN_EXPIRE_HOURS 48

Monitoring

Variable Default Notes
SENTRY_DSN error reporting, if you want it

Health check

GET /api/v1/utils/health/ is a deep check: it fails when the event loop is wedged or the state backend is gone, not just when the process is up. That is what the container healthcheck probes, and what an autoheal sidecar restarts on.

See also