Docs menu

Configuration keys

This page lists every configuration key of an instance, with its environment variable, its type, its default and what it accepts; it is generated from the key table of the repository's configuration handbook, which a test holds to the gateway's own loader.

A key is set in the YAML file named by VAUBAAN_CONFIG_FILE or by its environment variable; when both set a key, the file wins, silently. Secrets may also be given as ${NAME} or ${file:/path} references in the file, or through the *_FILE variables. Anything required and missing stops the instance at start with exit code 78 and a message naming every key. How the sources combine: configuration.

KeyEnvironment variableTypeDefaultAccepted values
public_urlVAUBAAN_PUBLIC_URLURLrequiredhttps; no query or fragment; a trailing / is stripped, a sub-path is kept
instance_nameVAUBAAN_INSTANCE_NAMEstring—1 to 64 characters; trimmed; no control character, line or paragraph separator, nor bidirectional override or isolate (checkInstanceName, config/instance-name.ts); blank is not set
trusted_proxiesVAUBAAN_TRUSTED_PROXIESlist——; each entry an IP address or a CIDR block (prefix 0–32 for IPv4, 0–128 for IPv6)
self_resourcesVAUBAAN_SELF_RESOURCESlist——; each entry <provider>:<ref> (a plugin id, then the resource ref as discovery stores it); railway:$RAILWAY_PROJECT_ID is always added when Railway sets that variable, fly:$FLY_APP_NAME when Fly sets that one
client_ip_headerVAUBAAN_CLIENT_IP_HEADERenum—x-real-ip, cf-connecting-ip, true-client-ip, fly-client-ip; not together with trusted_proxies; off by default
store.pathVAUBAAN_STORE_PATHstringrequired—; not empty
restore.fromVAUBAAN_RESTORE_FROM, VAUBAAN_RESTORE_FROM_FILEsecret——; an https URL (a redirect only to https, five at most) or an absolute file path; http refused; never echoed nor logged
restore.sha256VAUBAAN_RESTORE_SHA256string——; 64 hexadecimal characters; required with restore.from
restore.max_mbVAUBAAN_RESTORE_MAX_MBinteger10241 to 65536; in mebibytes
encryption.master_keyVAUBAAN_MASTER_KEY, VAUBAAN_MASTER_KEY_FILEsecretrequired—; exactly 32 bytes, in base64 or base64url
encryption.key_versionVAUBAAN_MASTER_KEY_VERSIONinteger1>= 1
encryption.previous_keysVAUBAAN_MASTER_KEY_PREVIOUS, VAUBAAN_MASTER_KEY_PREVIOUS_FILEsecret map——; {version: key} (1=<b64>,2=<b64> in the variable); a version is an integer >= 1 other than key_version; each key 32 bytes, base64
idp.issuerVAUBAAN_IDP_ISSUERURLrequired once idp is sethttps
idp.client_idVAUBAAN_IDP_CLIENT_IDstringrequired once idp is set—
idp.client_secretVAUBAAN_IDP_CLIENT_SECRET, VAUBAAN_IDP_CLIENT_SECRET_FILEsecretrequired once idp is set—
idp.claims.subVAUBAAN_IDP_CLAIM_SUBstringsub—
idp.claims.emailVAUBAAN_IDP_CLAIM_EMAILstringemail—
idp.claims.groupsVAUBAAN_IDP_CLAIM_GROUPSstringgroups—
idp.allowed_email_domainsVAUBAAN_IDP_ALLOWED_EMAIL_DOMAINSlist——; lower-cased; empty: everyone the directory signs in — refused for an open issuer (personal Google or Microsoft) without idp.invitation_only
idp.invitation_onlyVAUBAAN_IDP_INVITATION_ONLYbooleanfalse—; not together with idp.allowed_email_domains
sign_in.<id>.<field>VAUBAAN_SIGN_IN_<ID>_<FIELD> (KIND, NAME, ISSUER, CLIENT_ID, CLIENT_SECRET and its _FILE, CLAIM_SUB, CLAIM_EMAIL, CLAIM_GROUPS, CLAIM_EMAIL_VERIFIED, ALLOWED_EMAIL_DOMAINS, INVITATION_ONLY, REQUIRE_VERIFIED_EMAIL; - in the id ↔ _ in the variable)string—kind, name, issuer, client_id, client_secret, claims.sub, claims.email, claims.groups, claims.email_verified, allowed_email_domains, invitation_only, require_verified_email; the id is a lower-case letter then letters, digits or hyphens (32 at most), not idp when the idp block is set; kind is oidc or github; issuer https, required for oidc, default https://github.com for github; no claims and no require_verified_email for github; claims.email_verified defaults to email_verified (Entra ID: xms_edov), require_verified_email to false (true: an unverified email is refused, as on an open provider); one issuer per provider; an open provider needs domains or invitation_only
admin.groupVAUBAAN_ADMIN_GROUPstring——; admin rule: at least one of admin.group and admin.emails; <provider>:<group> (a GitHub group is org/team); a bare name only while one sign-in provider is configured
admin.emailsVAUBAAN_ADMIN_EMAILSlist——; lower-cased; each entry contains @
providers.<id>.<field>VAUBAAN_PROVIDER_<ID>_<FIELD> (_FILE for client_secret and private_key; - in the id ↔ _ in the variable)string—client_id, client_secret, app_id, app_slug, private_key; the field is one of these and its value is not empty; the id is a registered plugin (checked by the root)
bootstrap_tokenVAUBAAN_BOOTSTRAP_TOKEN, VAUBAAN_BOOTSTRAP_TOKEN_FILEsecretrequired while no sign-in provider is setat least 32 characters; refused once bootstrap.revoked_at is set in the store
telemetry.enabledVAUBAAN_TELEMETRY_ENABLEDbooleanfalse—
telemetry.levelVAUBAAN_TELEMETRY_LEVELenumusage-statsplugin-health, usage-stats
telemetry.collector_urlVAUBAAN_TELEMETRY_COLLECTOR_URLURLhttps://telemetry.vaubaan.com/v1/reportshttps; a query is allowed (the collector's public key as ?apikey=)
retention_daysVAUBAAN_RETENTION_DAYSinteger90>= 1
requests.expiryVAUBAAN_REQUEST_EXPIRYduration24h—
approvals.expiryVAUBAAN_APPROVAL_EXPIRYduration10m—
mcp.rate_limit_per_minuteVAUBAAN_MCP_RATE_LIMIT_PER_MINUTEinteger600>= 1
git.max_pack_mbVAUBAAN_GIT_MAX_PACK_MBinteger2001 to 4096; in mebibytes
git.request_timeoutVAUBAAN_GIT_REQUEST_TIMEOUTduration10mat most 3600 s
oauth.access_token_ttlVAUBAAN_OAUTH_ACCESS_TOKEN_TTLduration15mat most 3600 s; that is 1h
oauth.refresh_token_ttlVAUBAAN_OAUTH_REFRESH_TOKEN_TTLduration30d—; longer than oauth.access_token_ttl
oauth.delegation_max_lifetimeVAUBAAN_OAUTH_DELEGATION_MAX_LIFETIMEduration90d—; longer than oauth.access_token_ttl
oauth.refresh_reuse_window_secondsVAUBAAN_OAUTH_REFRESH_REUSE_WINDOW_SECONDSinteger300 to 60; 0 disables the window
oauth.client_registration.policyVAUBAAN_OAUTH_CLIENT_REGISTRATION_POLICYenumoperator-approvedopen, operator-approved, closed
oauth.client_registration.auto_approve_loopbackVAUBAAN_OAUTH_CLIENT_REGISTRATION_AUTO_APPROVE_LOOPBACKbooleantrue—
oauth.client_registration.metadata_documentsVAUBAAN_OAUTH_CLIENT_REGISTRATION_METADATA_DOCUMENTSbooleanfalse—
log.levelVAUBAAN_LOG_LEVELenuminfodebug, info, warn, error

Source: the "Configuration keys" table of docs/handbook/configuration.md, which also says which part of the code reads each key.

Last changed 2026-10-16. This page as Markdown: /docs/configuration/keys.md