Reference

Command line and environment

Every command-line option and every environment variable Janus Edge 2026.11.1 reads, on one page. Defaults apply when a variable is unset. Each entry links to the page that explains it in full.

The janus binary

Janus is configured entirely through environment variables; run with no arguments, it starts the gateway. It also accepts these one-shot flags, which print a result and exit:

FlagWhat it does
janus --fips-statusPrint, as JSON, which edition this binary is, the Go Cryptographic Module it links and whether FIPS 140-3 mode is on. Exits non-zero when the FIPS edition would refuse to start.
janus --health-probeCall this process’s own liveness endpoint and exit 0 when healthy. Container images have no shell or curl, so Docker and Kubernetes health checks run this.

janus-ctl (Linux installer)

install.py installs Janus as a systemd service and then manages it as janus-ctl. Run it with sudo; with no command it installs. See Install for the walkthrough.

janus-ctl install

install the system service (default command).

OptionDescription
--version VERSIONrelease to install (default 2026.11.1)
--archive ARCHIVEinstall from a downloaded archive (offline)
--checksums CHECKSUMSthe release SHA256SUMS, required with --archive
--hostname HOSTNAMEname people will use to reach it (default: this machine's FQDN)
--admin-email ADMIN_EMAILcreate the first administrator with this email
--admin-name ADMIN_NAMEadministrator display name
--skip-admincreate the administrator in the browser instead; Janus stays loopback-only until then
--database-url DATABASE_URLpostgres://... to use PostgreSQL (default: SQLite in /var/lib/janus)
--userno-sudo trial install into ~/.local (no service)

janus-ctl upgrade

install another release, keeping configuration and data.

OptionDescription
--version VERSIONrelease to install (default 2026.11.1)
--archive ARCHIVEinstall from a downloaded archive (offline)
--checksums CHECKSUMSthe release SHA256SUMS, required with --archive

janus-ctl status

show service, readiness and certificate.

janus-ctl open

after a --skip-admin install, listen on all interfaces.

janus-ctl cert

manage the HTTPS certificate.

janus-ctl cert install

use your own certificate and key.

OptionDescription
--cert CERT requiredPEM certificate, ideally the full chain (fullchain.pem)
--key KEY requiredPEM private key, unencrypted (privkey.pem)
--chain CHAINintermediate certificates, if they are not already in --cert
--hostname HOSTNAMEpublic name (default: taken from the certificate)

janus-ctl cert self-signed

replace the certificate with a new self-signed one.

OptionDescription
--hostname HOSTNAMEname to put on the certificate

janus-ctl cert acme

get a Let's Encrypt certificate over port 80 and renew it automatically.

OptionDescription
--domain DOMAIN requiredpublic DNS name that points at this server
--email EMAILcontact email for expiry notices
--staginguse Let's Encrypt staging, for testing
--server SERVERanother ACME directory URL (default Let's Encrypt)

janus-ctl cert renew

renew the Let's Encrypt certificate when due (run by a timer).

janus-ctl uninstall

remove the service; keeps configuration and data unless --purge.

OptionDescription
--purgealso delete configuration, certificates and data

Environment variables

Only JANUS_ENCRYPTION_KEY is required. Set the rest as needed; the defaults suit a single gateway. The Helm chart and the installer set the deployment-specific ones for you.

Required

VariableDefaultDescription
JANUS_ENCRYPTION_KEYunsetJANUS_ENCRYPTION_KEY is the only required variable — 32 bytes, given as 64 hex characters (openssl rand -hex 32) or base64, used to encrypt upstream credentials at rest; changing it orphans stored credentials. More
JANUS_PUBLIC_URLhttp://localhost:8080JANUS_PUBLIC_URL (default http://localhost:8080) — the externally reachable URL; set it for any deployment reached from another machine. More

Database

VariableDefaultDescription
JANUS_DATABASE_URLunsetJANUS_DATABASE_URL — postgres:// (or postgresql://) for production, or sqlite:///absolute/path.db for a single-node deployment. More

Identity

VariableDefaultDescription
JANUS_ADMIN_GROUPSunsetJANUS_ADMIN_GROUPS — a comma- or space-separated list of IdP group names, matched case-insensitively against the groups claim on every sign-in — grants the admin capability while membership lasts; leaving the group in the identity provider revokes it at the next sign-in, and removing someone from the group in Janus or through SCIM, or removing the group from an admin-group list, revokes it at once. More
JANUS_BOOTSTRAP_ADMIN_EMAILSunsetJANUS_BOOTSTRAP_ADMIN_EMAILS grants the admin role on first sign-in (sticky). More
JANUS_DEV_AUTHfalseJANUS_DEV_AUTH enables the local evaluation sign-in (no identity provider, any email). More
JANUS_DEV_AUTH_ALLOW_UNSAFEfalseThe gateway refuses to boot with it when JANUS_ENV=production is set explicitly (an unset JANUS_ENV does not count, so the local quick start works) or the public URL is not loopback; JANUS_DEV_AUTH_ALLOW_UNSAFE=true overrides that refusal for isolated demos only. More
JANUS_OIDC_CLIENT_IDunsetJANUS_OIDC_PROVIDER_URL, JANUS_OIDC_CLIENT_ID and JANUS_OIDC_CLIENT_SECRET configure the identity provider; if the provider URL is set, the other two must be set too. More
JANUS_OIDC_CLIENT_SECRETunsetJANUS_OIDC_PROVIDER_URL, JANUS_OIDC_CLIENT_ID and JANUS_OIDC_CLIENT_SECRET configure the identity provider; if the provider URL is set, the other two must be set too. More
JANUS_OIDC_EMAIL_CLAIMemailJANUS_OIDC_EMAIL_CLAIM (default email), JANUS_OIDC_NAME_CLAIM (name) and JANUS_OIDC_GROUPS_CLAIM (groups) override claim names for non-standard providers; JANUS_OIDC_SCOPES (default openid,profile,email,groups) sets the requested scopes. More
JANUS_OIDC_GROUPS_CLAIMgroupsJANUS_OIDC_EMAIL_CLAIM (default email), JANUS_OIDC_NAME_CLAIM (name) and JANUS_OIDC_GROUPS_CLAIM (groups) override claim names for non-standard providers; JANUS_OIDC_SCOPES (default openid,profile,email,groups) sets the requested scopes. More
JANUS_OIDC_NAME_CLAIMnameJANUS_OIDC_EMAIL_CLAIM (default email), JANUS_OIDC_NAME_CLAIM (name) and JANUS_OIDC_GROUPS_CLAIM (groups) override claim names for non-standard providers; JANUS_OIDC_SCOPES (default openid,profile,email,groups) sets the requested scopes. More
JANUS_OIDC_PROVIDER_URLunsetJANUS_OIDC_PROVIDER_URL, JANUS_OIDC_CLIENT_ID and JANUS_OIDC_CLIENT_SECRET configure the identity provider; if the provider URL is set, the other two must be set too. More
JANUS_OIDC_SCOPESopenid,profile,email,groupsJANUS_OIDC_EMAIL_CLAIM (default email), JANUS_OIDC_NAME_CLAIM (name) and JANUS_OIDC_GROUPS_CLAIM (groups) override claim names for non-standard providers; JANUS_OIDC_SCOPES (default openid,profile,email,groups) sets the requested scopes. More

Serving and sessions

VariableDefaultDescription
JANUS_CA_BUNDLEunsetOutbound trust store (every outbound TLS connection): JANUS_CA_BUNDLE (a PEM file). More
JANUS_CA_DIRunsetOutbound trust store (every outbound TLS connection): JANUS_CA_DIR (a directory of .pem/.crt/.cer files, rescanned every 30 seconds). More
JANUS_LISTEN_ADDR:8080The address and port the gateway listens on. More
JANUS_SESSION_IDLE_TIMEOUT_HOURS4JANUS_SESSION_TTL_HOURS (default 24) and JANUS_SESSION_IDLE_TIMEOUT_HOURS (default 4) bound browser sessions. More
JANUS_SESSION_TTL_HOURS24JANUS_SESSION_TTL_HOURS (default 24) and JANUS_SESSION_IDLE_TIMEOUT_HOURS (default 4) bound browser sessions. More
JANUS_TLS_CERT_PATHunsetJANUS_TLS_CERT_PATH / JANUS_TLS_KEY_PATH for direct TLS with an issued certificate (set both or neither; re-read when they change). More
JANUS_TLS_KEY_PATHunsetJANUS_TLS_CERT_PATH / JANUS_TLS_KEY_PATH for direct TLS with an issued certificate (set both or neither; re-read when they change). More
JANUS_TLS_REQUIREfalseJANUS_TLS_REQUIRE=true to refuse to start without serving TLS itself. More
JANUS_TLS_SELF_SIGNEDfalseJANUS_TLS_SELF_SIGNED=true for a self-signed listener certificate Janus generates and stores (temporary; names JANUS_TLS_SELF_SIGNED_NAMES, lifetime JANUS_TLS_SELF_SIGNED_DAYS). More
JANUS_TLS_SELF_SIGNED_DAYS365JANUS_TLS_SELF_SIGNED=true for a self-signed listener certificate Janus generates and stores (temporary; names JANUS_TLS_SELF_SIGNED_NAMES, lifetime JANUS_TLS_SELF_SIGNED_DAYS). More
JANUS_TLS_SELF_SIGNED_NAMESunsetJANUS_TLS_SELF_SIGNED=true for a self-signed listener certificate Janus generates and stores (temporary; names JANUS_TLS_SELF_SIGNED_NAMES, lifetime JANUS_TLS_SELF_SIGNED_DAYS). More
JANUS_TRUSTED_PROXIESunsetJANUS_TRUSTED_PROXIES as a comma- or space-separated list of IP addresses or CIDR blocks gating X-Forwarded-For. More
JANUS_TRUST_DOD_ROOTSunsetOutbound trust store (every outbound TLS connection): JANUS_TRUST_DOD_ROOTS (the built-in DoD PKI root CAs; default on in the FIPS edition, off otherwise), plus certificates uploaded under Administration → Settings → Certificates. More

Proxy behavior and retention

VariableDefaultDescription
JANUS_AUDIT_RETENTION_DAYS730JANUS_USAGE_RETENTION_DAYS (default 365) and JANUS_AUDIT_RETENTION_DAYS (730) control purging, run daily at JANUS_PURGE_JOB_TIME_UTC (default 02:00). More
JANUS_DB_MAX_CONNS25JANUS_DB_MAX_CONNS (default 25) caps each replica’s PostgreSQL connection pool. More
JANUS_DISCOVERY_INTERVAL_MINUTES2JANUS_DISCOVERY_INTERVAL_MINUTES (default 2) sets the model-discovery cadence — each run also records whether every upstream is reachable, so it doubles as the availability probe — and an administrator can override it at runtime from Administration → Settings → General → Model discovery (PATCH /api/v1/admin/system/discovery-interval), stored in the database, applied immediately without a restart, and audit-logged. More
JANUS_ENVproductionJANUS_ENV (default production) labels the deployment; JANUS_LOG_LEVEL (default info) is debug, info, warn, or error. More
JANUS_LOG_LEVELinfoJANUS_ENV (default production) labels the deployment; JANUS_LOG_LEVEL (default info) is debug, info, warn, or error. More
JANUS_MAX_RESPONSE_BYTES104857600JANUS_MAX_RESPONSE_BYTES (default 104857600, 100 MiB) caps buffered responses. More
JANUS_PERFORMANCE_MODEfalseJANUS_PERFORMANCE_MODE (default false; Business edition) raises the request rate one replica can meter. More
JANUS_PURGE_JOB_TIME_UTC02:00JANUS_USAGE_RETENTION_DAYS (default 365) and JANUS_AUDIT_RETENTION_DAYS (730) control purging, run daily at JANUS_PURGE_JOB_TIME_UTC (default 02:00). More
JANUS_QUOTA_CHECKPOINT_INTERVAL_HOURS24JANUS_QUOTA_CHECKPOINT_INTERVAL_HOURS (default 24) bounds quota-counter recovery time. More
JANUS_SMTP_FROMjanus@localhostJANUS_SMTP_HOST/PORT/USER/PASSWORD/FROM configure alert email (port defaults to 587, sender to janus@localhost). More
JANUS_SMTP_HOSTunsetJANUS_SMTP_HOST/PORT/USER/PASSWORD/FROM configure alert email (port defaults to 587, sender to janus@localhost). More
JANUS_SMTP_PASSWORDunsetJANUS_SMTP_HOST/PORT/USER/PASSWORD/FROM configure alert email (port defaults to 587, sender to janus@localhost). More
JANUS_SMTP_PORT587JANUS_SMTP_HOST/PORT/USER/PASSWORD/FROM configure alert email (port defaults to 587, sender to janus@localhost). More
JANUS_SMTP_USERunsetJANUS_SMTP_HOST/PORT/USER/PASSWORD/FROM configure alert email (port defaults to 587, sender to janus@localhost). More
JANUS_UPSTREAM_CONNECT_TIMEOUT_SECONDS10JANUS_UPSTREAM_CONNECT_TIMEOUT_SECONDS (default 10), JANUS_UPSTREAM_TTFB_TIMEOUT_SECONDS (30), and JANUS_UPSTREAM_TOTAL_TIMEOUT_SECONDS (600) set the default bound for each hop. More
JANUS_UPSTREAM_TOTAL_TIMEOUT_SECONDS600JANUS_UPSTREAM_CONNECT_TIMEOUT_SECONDS (default 10), JANUS_UPSTREAM_TTFB_TIMEOUT_SECONDS (30), and JANUS_UPSTREAM_TOTAL_TIMEOUT_SECONDS (600) set the default bound for each hop. More
JANUS_UPSTREAM_TTFB_TIMEOUT_SECONDS30JANUS_UPSTREAM_CONNECT_TIMEOUT_SECONDS (default 10), JANUS_UPSTREAM_TTFB_TIMEOUT_SECONDS (30), and JANUS_UPSTREAM_TOTAL_TIMEOUT_SECONDS (600) set the default bound for each hop. More
JANUS_USAGE_RETENTION_DAYS365JANUS_USAGE_RETENTION_DAYS (default 365) and JANUS_AUDIT_RETENTION_DAYS (730) control purging, run daily at JANUS_PURGE_JOB_TIME_UTC (default 02:00). More

Chat and files

VariableDefaultDescription
JANUS_CHAT_AUTO_TITLEtrueJANUS_CHAT_AUTO_TITLE (default true) is the starting point for chat naming until an administrator chooses in Administration → Chat → Tools → Chat names. More
JANUS_CHAT_MAX_UPLOAD_BYTES20 MiBJANUS_CHAT_MAX_UPLOAD_BYTES (default 20 MiB) caps one chat attachment; the smaller of this and the storage cap applies. More
JANUS_CHAT_PREVIEWfalseJANUS_CHAT_PREVIEW (default false) must be true for Janus Chat to be available at all; while it is false, Chat stays off whatever Administration → Chat says. More
JANUS_CHAT_SEARCH_SEARXNG_URLunsetJANUS_CHAT_SEARCH_SEARXNG_URL (unset) points at a SearXNG instance, such as http://searxng:8080, and turns Chat web search on with it once at startup; later admin changes stick. More
JANUS_S3_ACCESS_KEY_IDunsetRequired with s3 storage. More
JANUS_S3_BUCKETunsetRequired with s3 storage. More
JANUS_S3_CA_FILEunsetPEM file of extra CAs for the endpoint. Optional with s3 storage. More
JANUS_S3_ENDPOINTunsetRequired with s3 storage. More
JANUS_S3_PATH_STYLEfalseOptional with s3 storage. More
JANUS_S3_PREFIXunsetKey prefix. Optional with s3 storage. More
JANUS_S3_REGIONus-east-1Optional with s3 storage. More
JANUS_S3_SECRET_ACCESS_KEYunsetRequired with s3 storage. More
JANUS_STORAGE_MAX_OBJECT_BYTES25 MiBJANUS_STORAGE_MAX_OBJECT_BYTES (default 25 MiB) caps one stored file. More
JANUS_STORAGE_MODEunsetJANUS_STORAGE_MODE (database or s3; unset lets Administration → Settings → General → File storage decide) fixes where chat attachments and troubleshooting captures are stored. More

Chat web pages

VariableDefaultDescription
JANUS_WEB_ALLOW_DOMAINSunsetJANUS_WEB_ALLOW_DOMAINS / JANUS_WEB_DENY_DOMAINS: only, or never, these sites (each matches its subdomains). More
JANUS_WEB_ALLOW_NETWORKSunsetJANUS_WEB_ALLOW_NETWORKS / JANUS_WEB_DENY_NETWORKS: only, or never, these IP ranges. More
JANUS_WEB_ALLOW_PORTSunsetJANUS_WEB_ALLOW_PORTS replaces 80, 443, 8080, 8443. More
JANUS_WEB_ALLOW_PRIVATEunsetJANUS_WEB_ALLOW_PRIVATE=true also opens private networks (10/8, 172.16/12, 192.168/16, 100.64/10, fc00::/7) and internal names (intranet, *.local, *.internal, *.lan, *.svc): for offline networks. More
JANUS_WEB_DENY_DOMAINSunsetJANUS_WEB_ALLOW_DOMAINS / JANUS_WEB_DENY_DOMAINS: only, or never, these sites (each matches its subdomains). More
JANUS_WEB_DENY_NETWORKSunsetJANUS_WEB_ALLOW_NETWORKS / JANUS_WEB_DENY_NETWORKS: only, or never, these IP ranges. More
JANUS_WEB_HTTPS_ONLYunsetJANUS_WEB_HTTPS_ONLY=true refuses http:// pages. More
JANUS_WEB_PROXYunsetJANUS_WEB_PROXY sends every page read through that proxy, with no direct fallback; the proxy then decides where names lead. More
JANUS_WEB_TLS_TRUSTsystemJANUS_WEB_TLS_TRUST: system (default), custom (system roots plus the trust store: DoD roots, JANUS_CA_BUNDLE, JANUS_CA_DIR and certificates uploaded under Settings → Certificates), or custom-only (only sites signed by the trust store’s CAs). More

Licensing and updates

VariableDefaultDescription
JANUS_LICENSE_FILEunsetJANUS_LICENSE_FILE (unset) — path to a license key file; when present it takes precedence over a key installed from the UI. More
JANUS_LICENSE_SYNCunsetJANUS_LICENSE_SYNC (unset: the UI decides) pins automatic license renewal and sync on or off, and JANUS_LICENSE_SYNC_TOKEN pins its sync token. More
JANUS_LICENSE_SYNC_TOKENunsetJANUS_LICENSE_SYNC (unset: the UI decides) pins automatic license renewal and sync on or off, and JANUS_LICENSE_SYNC_TOKEN pins its sync token. More
JANUS_OFFLINEfalseJANUS_OFFLINE (default false) declares an air-gapped deployment: no update check, no license sync, and no personal subscriptions. More
JANUS_UPDATE_CHECKfalseJANUS_UPDATE_CHECK (default false) turns on the daily check for a newer release. More

Telemetry

VariableDefaultDescription
JANUS_OTEL_EXPORTER_OTLP_ENDPOINTunsetOTEL_EXPORTER_OTLP_ENDPOINT (or the alias JANUS_OTEL_EXPORTER_OTLP_ENDPOINT; unset means no OTLP export, /metrics only) sends metrics to an OpenTelemetry collector. More
JANUS_OTEL_EXPORT_INTERVAL_SECONDS30How often, in seconds, metrics are sent to the OpenTelemetry collector. More
OTEL_EXPORTER_OTLP_ENDPOINTunsetOTEL_EXPORTER_OTLP_ENDPOINT (or the alias JANUS_OTEL_EXPORTER_OTLP_ENDPOINT; unset means no OTLP export, /metrics only) sends metrics to an OpenTelemetry collector. More

STIG configuration profile

VariableDefaultDescription
JANUS_OCSP_RESPONDERunsetJANUS_OCSP_RESPONDER points every OCSP query at an enclave responder. More
JANUS_STIG_PROFILEfalseJANUS_STIG_PROFILE=true puts Janus into its documented STIG configuration. More
JANUS_TLS_REVOCATIONunsetRevocation checking of outbound TLS (JANUS_TLS_REVOCATION; hard in the STIG profile). Installed before any client connects. More

Other

VariableDefaultDescription
JANUS_BUILD_DATEunsetJANUS_BUILD_VERSION (default dev), JANUS_BUILD_SHA (unknown) and JANUS_BUILD_DATE are build details set by the image; leave them alone. More
JANUS_BUILD_SHAunknownJANUS_BUILD_VERSION (default dev), JANUS_BUILD_SHA (unknown) and JANUS_BUILD_DATE are build details set by the image; leave them alone. More
JANUS_BUILD_VERSIONdevJANUS_BUILD_VERSION (default dev), JANUS_BUILD_SHA (unknown) and JANUS_BUILD_DATE are build details set by the image; leave them alone. More
JANUS_CONFIG_CACHE_TTL_SECONDS5JANUS_CONFIG_CACHE_TTL_SECONDS (default 5) is how long other replicas may serve model, grant, rule, quota rule, Security Gateway policy, Child Safety, router and rate-card settings — and classifier credentials and base URLs — before they see an admin change. More
JANUS_GITHUB_OAUTH_CLIENT_IDunsetJANUS_GITHUB_OAUTH_CLIENT_ID, JANUS_OPENAI_OAUTH_CLIENT_ID and JANUS_XAI_OAUTH_CLIENT_ID (unset: built-in IDs) replace the OAuth client IDs used to connect personal subscriptions. More
JANUS_LOCAL_ONLYfalseJANUS_LOCAL_ONLY (default false) is for deployments with no billing: cost tracking is off, USD quotas stop applying and cannot be created, and all pricing is hidden in the UI and in Chat exports. More
JANUS_OPENAI_OAUTH_CLIENT_IDunsetJANUS_GITHUB_OAUTH_CLIENT_ID, JANUS_OPENAI_OAUTH_CLIENT_ID and JANUS_XAI_OAUTH_CLIENT_ID (unset: built-in IDs) replace the OAuth client IDs used to connect personal subscriptions. More
JANUS_TROUBLESHOOT_DIRunsetJANUS_TROUBLESHOOT_DIR (unset) lets troubleshooting sessions store captured bodies as files under that directory instead of in the database. More
JANUS_XAI_OAUTH_CLIENT_IDunsetJANUS_GITHUB_OAUTH_CLIENT_ID, JANUS_OPENAI_OAUTH_CLIENT_ID and JANUS_XAI_OAUTH_CLIENT_ID (unset: built-in IDs) replace the OAuth client IDs used to connect personal subscriptions. More