Livqeno Docs

Environment variables

Every variable any Livqeno component reads, grouped by what it configures. Generated from source.

Livqeno's components read 117 environment variables between them — 97 by the control plane, 16 by the SFU, 6 by the dashboard. .env.example documents 106, which leaves 21 read but undocumented there; those are marked below.

This page is generated from the source, so it is the complete set.

Start here

Four of these will be wrong on a first deployment more often than the other eighty-eight:

VariableWhy it matters
API_PUBLIC_URLBecomes telemetryUrl in every mint response, and the base the signaling URL is derived from. If it is the container-internal address, clients cannot reach it.
RTC_SIGNALING_URLOverrides the derived signaling address. Set it when signaling sits behind a different hostname or ingress.
CORS_ORIGINThe chat WebSocket rejects a mismatched Origin with close code 4403. Never * in production.
TURN_HOSTHost-facing, not the Docker service name. A container address here means no client can reach the relay.

Secrets that must be set explicitly

RTC_TOKEN_SECRET and CHAT_TOKEN_SECRET fall back to JWT_SECRET so a fresh clone boots. Production validation refuses that fallback at start-up: one credential must not be able to mint another's. Generate each independently:

openssl rand -hex 32   # JWT_SECRET
openssl rand -hex 32   # RTC_TOKEN_SECRET
openssl rand -hex 32   # CHAT_TOKEN_SECRET
openssl rand -hex 32   # API_KEY_HASH_SECRET
openssl rand -hex 32   # SFU_REGISTRATION_SECRET
openssl rand -hex 32   # TURN_SECRET

All variables

Core

VariableNotes
API_PORT
API_PUBLIC_URLnot in .env.example
APP_URL
CORS_ORIGIN
DOCS_URL
LOG_LEVEL
NODE_ENVnot in .env.example

Database

VariableNotes
DATABASE_POOL_CONNECTION_TIMEOUT_MS
DATABASE_POOL_IDLE_TIMEOUT_MS
DATABASE_POOL_MAX
DATABASE_URL
DIRECT_URL

Redis

VariableNotes
REDIS_COMMAND_TIMEOUT_MS
REDIS_PASSWORDin .env.example, but no Livqeno component reads it
REDIS_PORTin .env.example, but no Livqeno component reads it
REDIS_URL

Secrets & tokens

VariableNotes
API_KEY_HASH_SECRET
CHAT_TOKEN_SECRET
JWT_EXPIRES_IN
JWT_SECRET
RTC_TOKEN_DEFAULT_TTL_SECONDS
RTC_TOKEN_SECRET
SFU_REGISTRATION_SECRET

OAuth sign-in

VariableNotes
GITHUB_CALLBACK_URLnot in .env.example
GITHUB_CLIENT_ID
GITHUB_CLIENT_SECRET
GOOGLE_CALLBACK_URLnot in .env.example
GOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET
OAUTH_STATE_TTL_SECONDS

RTC & signaling

VariableNotes
RTC_SIGNALING_URLnot in .env.example
SFU_CONTROL_PLANE_URLread by the SFU; not in .env.example
SFU_DEFAULT_REGION
SFU_HEARTBEAT_INTERVAL_SECONDSread by the SFU; not in .env.example
SFU_HEARTBEAT_TIMEOUT_SECONDS
SFU_HTTP_ADDRread by the SFU; not in .env.example
SFU_HTTP_PORTin .env.example, but no Livqeno component reads it
SFU_INTERNAL_URLread by the SFU; not in .env.example
SFU_LOG_LEVELread by the SFU
SFU_NODE_IDread by the SFU
SFU_PUBLIC_HOSTread by the SFU
SFU_PUBLIC_IPread by the SFU
SFU_REGIONread by the SFU
SFU_ROOM_CAPACITYread by the SFU
SFU_STUN_SERVERSread by the SFU; not in .env.example
SFU_UDP_PORT_MAXread by the SFU
SFU_UDP_PORT_MINread by the SFU
SFU_VERSIONread by the SFU; not in .env.example
SIGNALING_MAX_CONNECTIONS_PER_WINDOW
SIGNALING_MAX_MESSAGES_PER_WINDOW
SIGNALING_MAX_MESSAGE_BYTES
SIGNALING_MAX_PARTICIPANTS_PER_ROOM
SIGNALING_MESSAGE_WINDOW_SECONDS

TURN

VariableNotes
TURN_HOST
TURN_INTERNAL_HOST
TURN_MAX_BPSin .env.example, but no Livqeno component reads it
TURN_MAX_PORTin .env.example, but no Livqeno component reads it
TURN_MIN_PORTin .env.example, but no Livqeno component reads it
TURN_PORT
TURN_PROMETHEUS_PORTin .env.example, but no Livqeno component reads it
TURN_REALMin .env.example, but no Livqeno component reads it
TURN_SECRET
TURN_TLS_PORT
TURN_TOTAL_QUOTAin .env.example, but no Livqeno component reads it
TURN_USER_QUOTAin .env.example, but no Livqeno component reads it

Chat

VariableNotes
CHAT_CONNECTION_RATE_LIMIT
CHAT_MAX_FRAME_BYTES
CHAT_MAX_HISTORY_PAGE_SIZE
CHAT_MAX_METADATA_BYTES
CHAT_MAX_REACTIONS_PER_MESSAGE
CHAT_MAX_ROOM_SUBSCRIPTIONS
CHAT_MAX_TEXT_LENGTH
CHAT_PRESENCE_TTL_SECONDS
CHAT_REACTION_RATE_LIMIT
CHAT_RETENTION_DAYS
CHAT_RETENTION_SWEEP_INTERVAL_MS
CHAT_SEND_RATE_LIMIT
CHAT_SEND_RATE_WINDOW_SECONDS
CHAT_SUBSCRIBE_RATE_LIMIT
CHAT_TOKEN_DEFAULT_TTL_SECONDS
CHAT_TOKEN_MAX_TTL_SECONDS
CHAT_TYPING_RATE_LIMIT
CHAT_TYPING_TTL_SECONDS

Attachments (object storage)

VariableNotes
STORAGE_ACCESS_KEY_ID
STORAGE_BUCKET
STORAGE_DOWNLOAD_URL_TTL_SECONDS
STORAGE_ENDPOINT
STORAGE_FORCE_PATH_STYLE
STORAGE_MAX_ATTACHMENT_BYTES
STORAGE_REGION
STORAGE_SECRET_ACCESS_KEY
STORAGE_UPLOAD_URL_TTL_SECONDS

Webhooks

VariableNotes
WEBHOOK_BACKOFF_BASE_MS
WEBHOOK_BATCH_SIZE
WEBHOOK_DISABLE_AFTER_FAILURES
WEBHOOK_MAX_ATTEMPTS
WEBHOOK_POLL_INTERVAL_MS
WEBHOOK_TIMEOUT_MS

Transactional email

VariableNotes
EMAIL_COOLDOWN_SECONDS
EMAIL_DAILY_LIMIT
EMAIL_DEV_PREVIEWnot in .env.example
EMAIL_ENABLED
EMAIL_MAX_ATTEMPTS
EMAIL_MONTHLY_LIMIT
EMAIL_REPLY_TO
EMAIL_RETRY_BASE_MS
EMAIL_SUPPORT_EMAIL
EMAIL_VERIFICATION_TTL_MINUTES
PASSWORD_RESET_TTL_MINUTES
RESEND_API_KEY
RESEND_FROM_EMAIL
RESEND_FROM_NAME

Observability

VariableNotes
OBSERVABILITY_CONNECTION_RETENTION_DAYSnot in .env.example
OBSERVABILITY_ERROR_RETENTION_DAYSnot in .env.example
OBSERVABILITY_RETENTION_SWEEP_INTERVAL_MSnot in .env.example

Rate limiting

VariableNotes
RATE_LIMIT_WINDOW_SECONDS

Other

VariableNotes
HOSTNAMEnot in .env.example
NEXT_PUBLIC_DOCS_URLnot in .env.example
NEXT_PUBLIC_GITHUB_URLnot in .env.example
NEXT_PUBLIC_SUPPORT_URLnot in .env.example
RAVEN_API_KEYnot in .env.example
RAVEN_API_URLnot in .env.example
USAGE_ABANDONED_AFTER_MS
USAGE_ENFORCE_LIMIT
USAGE_FREE_TIER_MINUTES
USAGE_METER_INTERVAL_MS
USAGE_REAPER_INTERVAL_MS

Next steps