Public beta scope: AD workflows have real-system path validation, but NOBA is still under active verification. Treat compliance evidence and self-healing claims as evaluation surfaces unless the source and configured state are shown. Read validation boundaries.

Configuration

Fine-tune integrations, self-healing, AI Ops, notifications, and system behavior.

Environment Variables

VariableDefaultDescription
PORT8080HTTP listen port
HOST0.0.0.0Bind address
NOBA_CONFIG~/.config/noba/config.yamlYAML config path
NOBA_TRUST_PROXYfalseTrust X-Forwarded-Host for password reset URLs
DATABASE_URLSQLitePostgreSQL or MySQL connection string
NOBA_REDIS_URLShared cache URL (e.g. redis://redis:6379/0). Required on the enterprise tier (plan=enterprise, state licensed or expired) for cross-worker Microsoft Graph throttle coordination. Community / unlicensed tier is unaffected and falls back to an in-memory cache.
NOBA_PG_POOL_MIN1Min connections (PostgreSQL/MySQL)
NOBA_PG_POOL_MAX10Max connections (PostgreSQL/MySQL)
NOBA_HISTORY_DAYS30Metrics history retention
NOBA_AUDIT_DAYS90Audit log retention
NOBA_WORKER_THREADS24Background worker threads
NOBA_PW_MIN_LEN8Minimum password length
NOBA_MAX_JOBS3Concurrent automation jobs
NOBA_JOB_TIMEOUT300Job timeout (seconds)
NOBA_JOB_RETENTION_DAYS30Job output retention
NOBA_SOFT_DELETE_DAYS30SCIM soft-delete grace period
SSL_CERT / SSL_KEYTLS certificate and key paths

Database Backends

NOBA defaults to SQLite (WAL mode, incremental vacuum) for zero-config deployments. For production at scale, migrate to:

Pool size is tunable via NOBA_PG_POOL_MIN and NOBA_PG_POOL_MAX. The Settings → Database tab shows the active backend, connection status, and pool configuration.

Cache (Redis / Valkey)

NOBA uses a shared cache for Microsoft Graph throttle coordination across workers (tenant-pause windows, token-bucket accounting against the three published Graph rate limits, pre-429 self-pace signals) and for Graph OAuth2 token caching. The cache backend is selected at startup based on NOBA_REDIS_URL:

Starting with beta.27, the enterprise tier enforces this at startup: if the active license plan is enterprise with state licensed or expired, NOBA refuses to start when NOBA_REDIS_URL is unset or when the endpoint does not respond. Trial and grace-period installs log a warning but continue, so first-boot onboarding and trial evaluations still work without Redis pre-configured. Community and unlicensed tiers are unaffected.

Install paths and what you actually get:

Minimum safe server versions as of 2026-04-15 (all close CVE-2025-49844 Lua UAF CVSS 9.9 plus follow-on CVEs):

Client library: redis>=7.4 (Python), declared across every NOBA install surface. Zero CVEs against that floor.

Social / SSO (OIDC)

NOBA supports social login via Google, GitHub, Facebook, and Microsoft / Entra, plus a generic OIDC endpoint for Authentik, Keycloak, Authelia, etc. Configuration lives at Settings > Integrations > Authentication and persists inside the socialProviders block of config.yaml.

Starting with beta.29, the Microsoft / Entra flow validates id_tokens end-to-end per OIDC Core 1.0: PKCE (S256), nonce, RS256 signature against the tenant JWKS, iss, aud, exp/iat/nbf with clock-skew leeway, optional at_hash, and tenant allowlist. Every social provider gains PKCE + nonce even on non-OIDC paths, and first-login account creation is gated behind an explicit operator opt-in.

FieldDefaultDescription
socialProviders.microsoft.clientIdAzure App Registration Application (client) ID
socialProviders.microsoft.clientSecretAzure App Registration secret value (not the secret ID)
socialProviders.microsoft.tenantIdRequired. Directory (tenant) ID. common, organizations, and consumers are rejected unless allowMultiTenant is set — this is the NIS2 hardening added in beta.29
socialProviders.microsoft.allowedTids[tenantId]Optional allowlist of Entra tenant GUIDs to accept. Empty list restricts to the single configured tenantId. Enforced against the id_token's tid claim
socialProviders.microsoft.allowMultiTenantfalseExplicit opt-in for /common/, organizations, or consumers tenant endpoints. Combined with allowedTids — a non-empty allowlist is still enforced
socialProviders.<provider>.allowJitProvisionfalseAllow creating a new NOBA user on first social login. When false, social login is rejected unless the email already exists in NOBA. Gate applies per-provider across google / facebook / github / microsoft
oidcProviderUrl + oidcClientId + oidcClientSecretGeneric OIDC endpoint (Authentik, Keycloak, Authelia). Discovery (.well-known/openid-configuration) is used when available. After discovery, the issuer field in the document must match oidcProviderUrl per RFC 8414 §3.3 — mismatches are rejected
oidcVerifySsltrueTLS certificate verification for the OIDC provider. Starting with beta.30, setting this to false is rejected for non-localhost URLs unless oidcAllowInsecureDev is also true. Gated to loopback and .local / .lan / .test / .localhost / .internal hostnames
oidcAllowInsecureDevfalseDevelopment-only escape hatch that pairs with oidcVerifySsl=false. Never set this in production — it disables the TLS requirement on the authorize and token endpoints (ASVS 5.0 V6.4.2)

The Azure App Registration redirect URI must match exactly: https://<your-noba-host>/api/auth/social/microsoft/callback. Test users must belong to the configured tenantId — tokens from other tenants are rejected at the tid-allowlist check even if the Azure app is set to multi-tenant. Starting with beta.30, Entra Conditional Access insufficient_claims challenges surfaced during login are handled automatically: the browser is redirected back to /authorize with the required claims parameter so the user can satisfy the CA policy (MFA, device compliance) and resume the flow — no operator configuration required.

Logout endpoints (beta.31):

Integrations

The 50+ integration catalog is managed through Settings > Integrations where connector setup is implemented. Connector cards expose configuration and connectivity-test flows when supported by that connector.

AI Ops Assistant

Configure under Settings > Integrations > AI / LLM. Supports four providers:

ProviderDefault ModelNotes
AnthropicClaude SonnetAPI key required
OpenAIGPT-4oAPI key required
OllamaLlama 3Local, no API key. 120s timeout.
CustomConfigurableAny OpenAI-compatible endpoint

The assistant receives live infrastructure context with every request. Completely optional — off by default.

Self-Healing

Managed under Settings > Healing. The 6-layer pipeline covers correlation, dependency analysis, planning, execution, verification, and learning for the wired remediation set. A larger action registry, escalation-chain catalog, maintenance-window behavior, and chaos scenario templates are beta surfaces that should be validated per environment before unattended use.

Notifications

Eight channels: Pushover, Gotify, Slack, Discord, Telegram, Email (SMTP), generic Webhook, and ntfy. Composite alert rules support AND/OR conditions with escalation policies.

Themes

Eight built-in themes: Command (default), Dracula, Nord, Tokyo Night, Catppuccin, Gruvbox, Blood Moon, and Enterprise.