src/ and ee/) and the frontend source. Variables in the example .env that do not match code-level names are called out explicitly.
Required? means the backend throws or the feature silently fails at startup if the variable is absent. Optional means it is feature-gated or has a safe default.
Core
Consumer configuration
FRONTEND is a deployment-convention variable used by consumer projects and templates (e.g. exulu-example) to supply the public frontend URL for invite and notification links. It is not read by @exulu/backend itself (process.env.FRONTEND does not appear in the backend source). Set it in whichever layer of your deployment config constructs those links.
Postgres
See Postgres service for connection pool settings and
max_connections requirements.
Redis
Redis is required for background workers (embeddings, evals, routines). IfREDIS_HOST and REDIS_PORT are absent, the server starts without worker support.
S3-compatible storage
IMP uses an S3-compatible bucket for file uploads (via the Uppy companion proxy). MinIO is the recommended self-hosted option.The frontend also reads
COMPANION_S3_ENDPOINT to construct upload URLs for the browser. Set it in both environments.LiteLLM
Model providers
These variables appear inconfig.litellm.yaml under litellm_params using LiteLLM’s os.environ/ interpolation syntax. Set them in the backend container environment so LiteLLM can read them at startup.
Add other provider API keys (OpenAI, Anthropic, Azure, etc.) the same way — expose them in the container environment and reference them from
config.litellm.yaml with os.environ/VARIABLE_NAME.
Transcription
Transcription requires a running Whisper server. See Whisper service.Meetings (Recall)
Meeting recording via Recall.ai is optional.SMTP
There are two separate SMTP variable namespaces. See SMTP and authentication for the full explanation. Backend variables — used by the agent email tool (SMTP_*):
Frontend variables — used by NextAuth for OTP sign-in emails (
EMAIL_SERVER_*):