NimsteadDocumentation
Search docs GitHub
Browse documentation
AssureReference

Configuration

Nimstead Assure is configured with environment variables. With Docker Compose, put them in .env (see .env.example); anything not already listed in compose.yaml goes under x-app: environment: there, so the app and the feed updater both get it.

Server

Variable Default What it does
NIMSTEAD_PUBLIC_URL the request's own address The address agents and browsers use, such as https://assure.example.com. Baked into the agent install scripts and SSO callbacks. Set it in production.
NIMSTEAD_DB sqlite:///./nimstead.db Database URL. Use postgresql+psycopg://user:pass@host/db in production and run alembic upgrade head (the Docker image does this on start).
NIMSTEAD_SECURE_COOKIES 1 0 allows sign-in over plain HTTP from a non-localhost address. Development only.
NIMSTEAD_ALLOWED_ORIGINS none Extra comma-separated origins allowed to make changes (the same origin always is).
NIMSTEAD_INVENTORY_MIN_SECONDS 30 Minimum gap between two inventories from one agent.
NIMSTEAD_UPDATE_CHANNEL stable Which releases this server takes: stable, beta (beta and stable) or preview (everything, earliest). Read by Settings → This server and deploy/update.sh, and judged by the channel signed into each release, never GitHub's labels. There's no stable release yet: trial installs set preview.
NIMSTEAD_UPDATE_CHECK 1 0 stops the hourly feed run from asking GitHub for new releases and fetching the signed release files agents update from. Offline installs: copy release.json and release.json.sig from the release page into NIMSTEAD_RELEASE_DIR instead.
NIMSTEAD_RELEASE_DIR ./release (/data/release in Docker) Signed release files, the release check's state and deploy/update.sh's last result. Agents only update when this holds a release signed for the agent the server serves.
FORWARDED_ALLOW_IPS 127.0.0.1 Read by uvicorn: the reverse proxy whose X-Forwarded-For is trusted, so sign-in throttling sees real client addresses.
NIMSTEAD_BIND 127.0.0.1 Compose only: the host address the app's port listens on. Keep it on loopback behind your HTTPS proxy; 0.0.0.0 lets anyone on the network reach it, including to create the first account.
NIMSTEAD_MAX_ASSETS_PER_ORG 5000 Most assets (hosts, applications and external targets) one organisation may have. Anyone who can sign up gets an organisation, so this bounds what one can load onto the server.
NIMSTEAD_ENROLL_MAX_PER_TOKEN_HOUR 2000 Most machines one enrolment token can enrol in an hour (a fleet rollout enrols quickly; the asset cap bounds the total).
NIMSTEAD_ORG_INVENTORY_MAX_PER_HOUR 20000 Most agent inventories one organisation may send in an hour (on top of one per agent every 30 seconds).
NIMSTEAD_API_DOCS 0 1 serves Swagger UI at /api/docs. Off by default because it runs scripts from a CDN on this origin; /api/openapi.json is always served for tools.
NIMSTEAD_SECURITY_CONTACT none Your own security contact (mailto:… or a URL), listed first in /.well-known/security.txt before Nimstead's.

Keys and evidence storage

Without Vault, keys are files on disk. That's fine for evaluation; for production use Vault so keys never leave it.

Variable Default What it does
NIMSTEAD_VAULT_ADDR, NIMSTEAD_VAULT_TOKEN none Use Vault transit for evidence signing, the SSO secret and domain tokens.
NIMSTEAD_VAULT_MOUNT transit Transit mount path.
NIMSTEAD_VAULT_SIGNING_KEY nimstead-evidence Ed25519 key that signs evidence packs and checkpoints.
NIMSTEAD_VAULT_SECRET_KEY nimstead-secrets Key for encryption and HMAC.
NIMSTEAD_SIGNING_KEY_FILE ./nimstead-signing.pem (/data/… in Docker) On-disk signing key, created on first use.
NIMSTEAD_SECRET_KEY_FILE ./nimstead-secret.key (/data/… in Docker) On-disk secret key, created on first use.
NIMSTEAD_CHECKPOINT_DIR ./checkpoints (/data/… in Docker) Where signed ledger checkpoints go without S3.
NIMSTEAD_CHECKPOINT_S3 none s3://bucket/prefix for write-once checkpoints. Create the bucket with object lock.
NIMSTEAD_S3_ENDPOINT AWS Endpoint for S3-compatible storage.
NIMSTEAD_CHECKPOINT_RETAIN_DAYS 3650 Object-lock retention per checkpoint.

Publish your evidence key fingerprint (GET /api/evidence/public-key) to auditors through a channel other than the evidence pack itself.

Remediation

Variable Default What it does
NIMSTEAD_ALLOW_PRODUCTION_REMEDIATION off 1 lets fixes target hosts that weren't enrolled with a sandbox token. Leave it off until you've watched fixes and rollbacks work on sandbox hosts.

Each host must also opt in locally (--allow-remediation at install). The server can't turn remediation on for a host.

Alerts

Variable Default What it does
NIMSTEAD_SMTP_URL none smtp://user:pass@host:587 (STARTTLS) or smtps://host:465. Credentials are never sent without TLS.
NIMSTEAD_OPEN_SIGNUP off 1 = dev/test/demo only: sign-ups create accounts instantly, which tells anyone whether an email has an account. Off: the first account sets the server up, later sign-ups finish from an emailed link (SMTP needed; without it they're closed and staff join by SSO).
NIMSTEAD_SMTP_FROM none Sender address for alert email. Each recipient added in Settings first gets a confirmation email (fixed text, a link built from NIMSTEAD_PUBLIC_URL) and receives alerts only after confirming.

Webhook and email recipients are set by an admin in Settings.

Single sign-on

Set up in Settings by an org admin, not with environment variables. Register <NIMSTEAD_PUBLIC_URL>/api/auth/sso/callback at your identity provider. Each email domain must be proven with a DNS TXT record before it routes sign-ins.

Variable Default What it does
NIMSTEAD_DNS_SERVER system resolver host[:port] used for domain and external-target TXT checks.

AI (optional)

Variable Default What it does
ANTHROPIC_API_KEY none Turns on plain-English explanations and natural-language search. Nothing is sent to Anthropic without it.
NIMSTEAD_AI on when a key is set 0 turns the features off even with a key.
NIMSTEAD_AI_MODEL claude-opus-5-5 Model used.

Development only

Variable What it does
NIMSTEAD_ALLOW_PRIVATE_TARGETS=1 Lets webhooks and the IdP live on a private network. Turns off SSRF protection for private addresses. Never in production.
NIMSTEAD_WEB_DIST, NIMSTEAD_AGENT_FILE Override where the built UI and the served agent file are read from.