Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.novacula.io/llms.txt

Use this file to discover all available pages before exploring further.

The single source of truth for env-var configuration across all three components. For the broader configuration model (TOML for the agent, env-only for the others), see Configuration reference.

Control plane

Validated at startup with class-validator (apps/control-plane/src/config/env.ts). Missing or malformed values fail fast.

Required

VariableDescriptionExample
DATABASE_URLlibSQL / SQLite URL for the primary databasefile:/var/lib/novacula/cp.db, libsql://...
BETTER_AUTH_URLPublic URL the better-auth server is reachable athttps://novacula.example.com
BETTER_AUTH_SECRET≥32 chars; signs session cookies and tokensGenerate with openssl rand -base64 48
INITIAL_ADMIN_EMAILFirst system-admin user created on a fresh databaseops@example.com
INITIAL_ADMIN_PASSWORD≥12 chars; first system-admin passwordLong random string

Optional

VariableDefaultDescription
PORT3000HTTP port
LOG_LEVELinfodebug / info / warn / error
HEARTBEAT_TIMEOUT_MS30000Executor offline after this much silence; must exceed the executor poll interval
EVENT_RETENTION_DAYS90Runtime-event retention window
EVENT_RETENTION_MAX_PER_ORG100000Per-org runtime-event cap

Read by libraries

better-auth reads BETTER_AUTH_URL and BETTER_AUTH_SECRET directly from process.env. They are also declared in the AppEnv schema so a missing value is caught at startup rather than later in AuthModule.

Agent

The agent’s primary config source is its TOML file. Two env vars affect what file is loaded and one of them substitutes for a TOML field.
VariableUsed forNotes
NOVACULA_CONFIGPath to the agent TOMLLower precedence than --config / -c flag
HOSTNAMEFallback for [agent].nameUsed if neither config nor env sets it
The agent does not read other env vars at startup — everything else lives in the TOML. See Configuration reference for the schema.

Operator

The operator is configured entirely through env vars, set by the Helm chart.

Required

VariableDescription
NOVACULA_CONTROL_PLANE_URLBase URL of the control plane (no trailing slash)

Optional / typically chart-provided

VariableDefaultDescription
NOVACULA_ACCESS_TOKENunsetAPI key. Mount via a Secret
NOVACULA_OPERATOR_NAMEhostname()Unique within the org. Becomes the executor row’s name
NOVACULA_OPERATOR_NAMESPACEnovacula-systemNamespace nodes are deployed into
NOVACULA_OPERATOR_CHANNELstableRelease channel for self-upgrades
NOVACULA_OPERATOR_HEALTH_PORT8080Liveness/readiness HTTP port
NOVACULA_OPERATOR_CONTAINER_NAMEoperatorContainer name the self-update path patches
NOVACULA_METRICS_INTERVAL_MS5000Reporter loop cadence (ms)
NOVACULA_SCRAPE_TIMEOUT_MS5000Per-process scrape timeout (ms)

Notes on values

  • Trailing slashes on URLs — the control plane URL should be the bare base; trailing slashes can produce double-slash request paths against some endpoints.
  • Secret materialBETTER_AUTH_SECRET, NOVACULA_ACCESS_TOKEN, and the agent’s [control_plane].access_token should never appear in plaintext in committed config. Use a secrets manager.
  • Validation — control plane validates class-validator constraints at startup; missing required fields print a typed error and exit. The agent’s TOML loader throws on missing [control_plane].url. The operator’s env loader throws on missing NOVACULA_CONTROL_PLANE_URL.