Skip to content

Configuration

All configuration is done via environment variables.

VariableRequiredDefaultDescription
BASE_URLPublic URL of the Taco instance (e.g. https://taco.example.com)
AUTH_SECRET32-byte random secret for session signing. Generate with openssl rand -base64 32
VariableRequiredDefaultDescription
DATABASE_URLPostgreSQL connection string (e.g. pgsql://user:pass@host:5432/taco)
DATABASE_DIALECTpostgresqlDatabase dialect. Only postgresql is supported
DATABASE_CLIENTpostgresqlDatabase client. Only postgresql is supported

Taco exposes two unauthenticated probe endpoints for orchestrators (Kubernetes, ECS, load balancers).

  • GET /api/alive — liveness. Always returns 200 { "status": "ok" } as long as the process is serving requests. Has no dependency checks — use this for startup/liveness probes.
  • GET /api/ready — readiness. Returns 200 { "status": "ok" } only when the database is reachable, the login subsystem is correctly configured, and the configured OPENID_PROVIDER can be reached (this makes a real call against the provider, obtaining a token where the provider requires one). Returns 503 { "status": "unavailable" } if any check fails. The response never includes which check failed or any error detail — that’s logged server-side only, so the probe can’t be used to fingerprint internal infrastructure.

No environment variables are needed to enable these endpoints — they check the app’s existing configuration.

VariableRequiredDefaultDescription
EMAIL_FROMSender address (e.g. Taco <noreply@example.com>)
EMAIL_SERVERSMTP connection string (e.g. smtps://user:pass@smtp.example.com)

Protect the Taco dashboard itself behind an upstream OIDC provider.

VariableRequiredDefaultDescription
AUTH_CLIENT_OPENID_CONFIGURATION_URLDiscovery URL of the upstream OIDC issuer
AUTH_CLIENT_IDOIDC client ID for Taco’s own login
AUTH_CLIENT_SECRETOIDC client secret
AUTH_CLIENT_SCOPEopenid profile emailRequested scopes
VariableRequiredDefaultDescription
OPENID_PROVIDERProvisioning backend: ory, auth0, entra, okta, keycloak, or rfc7592

Generic credentials Taco uses to call the selected provider’s management API. Not needed for Auth0, Entra ID, Okta, or Keycloak, which use their own provider-specific variables (see below).

VariableRequiredDefaultDescription
OPENID_PROVIDER_AUTH_TYPEnone or client_credentials
OPENID_PROVIDER_AUTH_ISSUERwhen client_credentialsToken endpoint issuer used to fetch admin access tokens
OPENID_PROVIDER_AUTH_CLIENT_IDwhen client_credentialsAdmin client ID
OPENID_PROVIDER_AUTH_CLIENT_SECRETwhen client_credentialsAdmin client secret
OPENID_PROVIDER_AUTH_TOKEN_METHODclient_secret_postclient_secret_post or client_secret_basic
OPENID_PROVIDER_AUTH_SCOPEScope requested for the admin access token
OPENID_PROVIDER_AUTH_AUDIENCEAudience requested for the admin access token

Provider-specific variables (ORY_BASE_URL, AUTH0_DOMAIN, ENTRA_*, OKTA_*, KEYCLOAK_*, RFC7592_BASE_URL) are documented on each provider’s own page — see Providers.

Statistics aggregation (Team / Business tiers)

Section titled “Statistics aggregation (Team / Business tiers)”
VariableRequiredDefaultDescription
STATS_CRON_SECRETBearer token required by POST /api/cron/aggregation
STATS_AGGREGATION_INTERVAL_MINUTES1440Business tier only — aggregation interval in minutes
STATS_WEBHOOK_SECRETOptional — validates incoming webhook payloads to /api/events/ingest

Public API (/api/v1, Team / Business tiers)

Section titled “Public API (/api/v1, Team / Business tiers)”

Taco’s public API is a bearer-token resource server — it validates tokens issued by an external authorization server and never issues its own. See Public API for the full endpoint reference.

VariableRequiredDefaultDescription
API_AUTH_MODEjwt or opaque
API_AUTH_ISSUERAuthorization server issuer URL
API_AUTH_AUDIENCEExpected aud claim on incoming access tokens (jwt mode)
API_AUTH_JWKS_URIwhen jwtJWKS endpoint used to verify token signatures
API_AUTH_INTROSPECTION_URLwhen opaqueRFC 7662 introspection endpoint
API_AUTH_INTROSPECTION_CLIENT_IDwhen opaqueClient ID Taco uses to authenticate to the introspection endpoint
API_AUTH_INTROSPECTION_CLIENT_SECRETwhen opaqueClient secret for the introspection endpoint
API_AUTH_SCOPE_CLAIMscopeClaim (JWT) or introspection field read as the space-delimited scope list
API_AUTH_ALLOW_INSECURE_REQUESTSfalseDev only — allows API_AUTH_ISSUER/JWKS/introspection URLs to be http:// instead of https://. Not gated by NODE_ENV (which next start forces to production) — must be set explicitly.
API_DEFAULT_ORGANIZATION_ENABLEDfalseEnables the unprefixed convenience routes (e.g. GET /api/v1/registrations) that resolve the organization from the caller’s default-organization mapping