Vantage Docs
Self-hosting

Configuration reference

What does every environment variable do?

Every variable the three Vantage images read, taken from their source. On the Nomad deployment the job templates set them, mostly from Vault; in compose, compose/env/vantage.env and the vantage-analytics.env that vantage.sh provision writes.

ImageReads its config inListens
vantage-web (analytics-web)apps/webPORT, default 4444
vantage-dataplaneservices/dataplanePORT, default 8081
vantage-cubedata/cube/cube.js, plus Cube's own CUBEJS_*4000

Required means the process refuses to start or the feature fails without it. Prod means required only when NODE_ENV=production, which both Node images set. Defaults are for local development; every secret default must be replaced outside a laptop.

analytics-web

Runtime and edition

VariableMeaningRequiredDefault
NODE_ENVproduction turns on __Host- secure cookies and the production checks belowproduction in the image
PORTHTTP port4444
VANTAGE_EDITIONstandalone (own signup, plans, billing) or norims (inside a Norims cluster); anything else fails start-upnorims
NORIMS_ENVEnvironment segment prefixed to warehouse databases and users (preview_tenant_<slug>), Valkey keys and Vault tenant paths; empty for prodempty
ALLOWED_HOSTSHost allow-list for the Vite dev server only; the production server does not read itall hosts
VANTAGE_CONTACT_EMAILAddress the pricing page offers for Enterpriseempty

Sign-in (Zitadel OIDC)

VariableMeaningRequiredDefault
OIDC_ISSUERZitadel issuer URL, https://auth.<domain>yes
OIDC_CLIENT_IDClient id of the PKCE user-agent app (no client secret)yes
OIDC_REDIRECT_URIhttps://analytics.<domain>/auth/callbackyes
OIDC_POST_LOGOUT_REDIRECT_URIWhere Zitadel returns after sign-out/
OIDC_TENANT_CLAIMClaim used as the workspace idurn:zitadel:iam:user:resourceowner:id
OIDC_ROLES_CLAIMClaim carrying project rolesurn:zitadel:iam:org:project:roles
SESSION_ENC_KEY32-byte base64url key encrypting server-held sessionsyes
SIGNUP_ENABLEDtrue serves /signup; signup stays off unless the next two are also setoff
ZITADEL_PROJECT_IDProject each new organisation is grantedfor signup
ZITADEL_SERVICE_ACCOUNT_KEY / ZITADEL_SERVICE_ACCOUNT_KEY_PATHMachine-key JSON (inline, or a file path) of the vantage-sdk user that creates organisationsone, for signup
TRUSTED_PROXY_HOPSProxies that append to X-Forwarded-For; the client address used for signup and MCP rate limits0 (header ignored)

Control plane, warehouse, semantic layer

VariableMeaningRequiredDefault
CONTROLPLANE_DATABASE_URLPostgres URL the server connects with; must not be a superuser, or row security is bypassedyespostgres://app:app@localhost:5455/analytics
CONTROLPLANE_ADMIN_URLOwner connection for bootstrap-controlplane.sh (migrations, roles, policies)CONTROLPLANE_DATABASE_URL
STARROCKS_FE_HOSTStarRocks frontend for SQL editor queries, port 9030 fixedyeslocalhost
DBT_STARROCKS_HOSTHost written into BYO dbt profiles.ymllocalhost
CUBE_API_URLCube REST baseyeshttp://localhost:4000/cubejs-api/v1
CUBEJS_API_SECRETSigns the per-workspace JWTs sent to Cube; same value as Cube'syesdev-cube-secret
CUBE_SERVICE_TOKENToken Cube presents on /api/internal/cube/*proddev-cube-secret
VAULT_ADDRVault APIyeshttp://localhost:8200
VAULT_TOKENVault token; under Nomad the job's vault block sets ityesdev-vault-token
REDIS_HOST, REDIS_PORT, REDIS_PASSWORDValkey for SQL budgets and MCP rate limitslocalhost, 6379, change_me_in_production
REDIS_DISABLEDtrue skips Valkey: SQL budgets fail open, MCP limits count per processfalse
TENANT_QUERY_BUDGETSQL editor queries per workspace per rolling hour200
SQL_TIMEOUT_MSLongest a SQL editor query may run30000
SQL_CREDS_TTL_MSHow long a workspace's read-only credential is cached300000

Ingest and service tokens

VariableMeaningRequiredDefault
DATAPLANE_URLDataplane base for server-to-server callsyeshttp://localhost:8081
PUBLIC_DATAPLANE_URLDataplane base the browser uploads to, https://uploads.<domain>DATAPLANE_URL
UPLOAD_TOKEN_SECRETSigns upload tickets; same value as the dataplane'sproddev-upload-secret
INGEST_TOKENToken presented to the dataplane, and the only one accepted from itproddev-ingest-web
N8N_EDITOR_URLn8n editor that platform sources link to; empty hides the linkempty
N8N_WEBHOOK_URLn8n endpoint the Health page probeshttp://localhost:5678/webhook/cdc-sync
BACKEND_URLnorims-backend platform API (Norims edition: pack registry, tenant settings)Norimshttp://localhost:3500
PLATFORM_TOKENToken for BACKEND_URLwhen BACKEND_URL is not the defaultdev-packs-web
PROVISION_TOKENS_BACKENDcurrent[,previous] tokens accepted from norims-backend on provision and teardown routesprod, Norims edition

AI, digest, billing

VariableMeaningRequiredDefault
ANTHROPIC_API_KEYTurns on every AI feature and /api/mcp; unset hides them
ANTHROPIC_HAIKU_MODELModel for the light tierclaude-haiku-5-5
ANTHROPIC_SONNET_MODELModel for the heavy tierclaude-sonnet-5-5
RESEND_API_KEY, RESEND_FROMWeekly digest mail; both needed, otherwise in-app only
UNSUBSCRIBE_SECRETSigns unsubscribe links (valid a year)derived from SESSION_ENC_KEY
PUBLIC_APP_URLOrigin for links in mail and MCP resultsorigin of OIDC_REDIRECT_URI
DIGEST_BATCHMost users one digest tick handles100
DIGEST_TICK_BUDGET_MSTime after which a tick starts no new user60000
DODO_API_KEYDodo Payments key; unset, billing answers 503 billing_not_configuredstandalone billing
DODO_ENVIRONMENTtest or live; anything else failstest
DODO_WEBHOOK_SECRETVerifies /api/billing/webhook/dodowith DODO_API_KEYempty
DODO_BRAND_IDBrand whose products count as Vantage planswith DODO_API_KEYempty

dataplane

VariableMeaningRequiredDefault
NODE_ENVproduction enforces the two checks marked prodproduction in the image
PORTHTTP port8081
VANTAGE_EDITIONstandalone makes scheduled syncs ask analytics-web whether the plan allows loadsnot standalone
NORIMS_ENVEnvironment prefix, as for analytics-webempty
CONTROLPLANE_DATABASE_URLControl-plane Postgres (sources, datasets, cursors, runs)yespostgres://app:app@localhost:5455/analytics
CONTROLPLANE_URLanalytics-web base, for dataset-ready, loads-allowed and digest ticksyeshttp://localhost:4444
STARROCKS_FE_HOSTStarRocks frontend, port 9030 fixedyes
STARROCKS_BE_HOSTStream-load target, port 8040STARROCKS_FE_HOST
STARROCKS_USER, STARROCKS_PASSWORDAdmin user with DDL, DML and user administration (dataplane_svc)yes
RUSTFS_ENDPOINT, RUSTFS_REGION, RUSTFS_ACCESS_KEY_ID, RUSTFS_SECRET_ACCESS_KEYS3 staging store; the key is the bucket-scoped svc-dataplane accountyes
RUSTFS_PARQUET_STAGING_BUCKETStaging bucketyes
MAX_FILE_SIZE_BYTESLargest upload536870912 (512 MiB)
UPLOAD_TOKEN_SECRETVerifies upload ticketsproddev-upload-secret
INGEST_TOKENS_<NAME>current[,previous] tokens for caller <name>; at least oneprod
SCHEDULER_ENABLEDfalse runs no Temporal workertrue
TEMPORAL_ADDRESSTemporal frontendtemporal:7233
TEMPORAL_NAMESPACENamespace for the worker and schedulesanalytics
TEMPORAL_TASK_QUEUETask queueingestion
TEMPORAL_TLS_CA_PATH, TEMPORAL_TLS_CERT_PATH, TEMPORAL_TLS_KEY_PATHmTLS to Temporal; all three or nonenone (plain)
N8N_WEBHOOK_URLn8n webhook a scheduled sync callsfor scheduled syncshttp://n8n:5678/webhook/cdc-sync

cube

Read by data/cube/cube.js inside the Cube container; setting them on analytics-web does nothing.

VariableMeaningRequiredDefault
CUBEJS_API_SECRETVerifies analytics-web's JWTs (HS256)yes
CUBEJS_DEV_MODEtrue skips JWT verification and defaults the workspace to test-tenant; must be false outside development
CONTROLPLANE_INTERNAL_URLanalytics-web base for schema, schema version, workspace list and credentialsyeshttp://localhost:4444
CUBE_SERVICE_TOKENToken presented to analytics-webyesdev-cube-secret
CUBE_APP_ID_PREFIXPrefix of the per-workspace app idtenant_
CUBEJS_DB_HOST, CUBEJS_DB_PORT, CUBEJS_DB_NAMEStarRocks frontendyes
CUBEJS_DB_USER, CUBEJS_DB_PASSFallback SELECT-only user (cube_svc), used for a workspace with no ro_<slug> credential yetyes

Next

On this page