Environment Variables
Selu is configured through environment variables, set in your .env file or in your Docker Compose configuration.
Orchestrator
Section titled “Orchestrator”Core server configuration. These use the SELU__ prefix with double-underscore nesting (parsed by the configuration library with SELU prefix and __ separator).
| Variable | Default | Description |
|---|---|---|
SELU__ENCRYPTION_KEY | — | Required. Encryption key for stored credentials (API keys, tokens). Use at least 32 random characters. |
SELU__SERVER__PORT | 3000 | Port the dashboard and API listen on. |
SELU__SERVER__HOST | 0.0.0.0 | IP address to bind to. |
SELU__DATABASE__URL | sqlite:///app/data/selu.db?mode=rwc | SQLite connection string. |
SELU__EXTERNAL_URL | — | Public URL of your instance. Set when behind a reverse proxy for correct webhook callback URLs. |
SELU__BASE_PATH | — | URL path prefix for reverse proxy sub-path deployments (e.g., /selu). |
SELU__MARKETPLACE_URL | https://selu.bot/api/marketplace/agents | Agent marketplace API endpoint. |
SELU__INSTALLED_AGENTS_DIR | /app/installed_agents | Directory where marketplace agents are installed. |
SELU__AGENTS_DIR | /app/agents | Directory for bundled default agent definitions. |
SELU__RELEASE_METADATA_URL | https://selu.bot/api/releases/selu | Release metadata endpoint for the update system. |
SELU__EGRESS_PROXY_ADDR | 0.0.0.0:8888 | Egress proxy address for capability containers. |
SELU__MAX_CHAIN_DEPTH | 3 | Maximum event chain depth to prevent infinite loops. |
System updates
Section titled “System updates”Variables used by the built-in update system. SELU_RELEASE_CHANNEL and the SELU_IMAGE_* variables use single underscores because they are read directly via std::env::var, not through the configuration library.
| Variable | Default | Description |
|---|---|---|
SELU_RELEASE_CHANNEL | stable | Release channel: stable, dev, or nightly. |
SELU_IMAGE_TAG | — | Current Docker image tag. Managed automatically by the update system. |
SELU_IMAGE_DIGEST | — | Current image digest for verification. Managed automatically. |
SELU_IMAGE_VERSION | — | Current semantic version (e.g., v1.5.0-dev). Managed automatically. |
SELU_IMAGE_BUILD | — | Current build number. Managed automatically. |
Updater sidecar connection
Section titled “Updater sidecar connection”These variables configure how the orchestrator communicates with the updater sidecar.
| Variable | Default | Description |
|---|---|---|
SELU_UPDATER_URL | http://selu-updater:8090 | URL of the updater sidecar service. |
SELU_UPDATER_SHARED_SECRET | — | Shared secret for authenticating with the updater sidecar (sent as X-Selu-Updater-Secret header). |
SELU_UPDATER_REQUEST_TIMEOUT_SECS | 30 | Timeout for requests to the updater sidecar. |
Updater sidecar
Section titled “Updater sidecar”The updater sidecar is a separate container that performs updates while Selu restarts. It uses the UPDATER__ prefix with double-underscore nesting.
| Variable | Default | Description |
|---|---|---|
UPDATER__SERVER__HOST | 0.0.0.0 | Host the updater API listens on. |
UPDATER__SERVER__PORT | 8090 | Port the updater API listens on. |
UPDATER__SHARED_SECRET | — | Shared secret for authenticating requests from the orchestrator. |
UPDATER__COMPOSE_FILE | ./docker-compose.yml | Path to Docker Compose file. |
UPDATER__COMPOSE_PROJECT_DIR | — | Docker Compose project directory. |
UPDATER__COMPOSE_SERVICE | selu | Service name in the Compose file to update. |
UPDATER__UPDATER_SERVICE | — | Service name of the updater itself in the Compose file. |
UPDATER__COMPOSE_ENV_FILE | ./.env | Path to .env file for persisting update variables. |
UPDATER__HEALTH_URL | http://127.0.0.1:3000/api/health | Health check endpoint to verify updates. |
UPDATER__HEALTH_TIMEOUT_SECS | 90 | How long to wait for health checks to pass after an update. |
UPDATER__HEALTH_INTERVAL_SECS | 3 | Interval between health check attempts. |
UPDATER__DOCKER_BIN | — | Path to Docker binary. |
UPDATER__IMAGE_REPO | ghcr.io/selu-bot/selu | Docker image repository for Selu. |
UPDATER__SELF_UPDATE_ON_APPLY | false | Whether the sidecar refreshes itself during the same update run. |
WhatsApp bridge sidecar
Section titled “WhatsApp bridge sidecar”The updater can also manage a WhatsApp bridge container:
| Variable | Default | Description |
|---|---|---|
UPDATER__WHATSAPP_BRIDGE_ENABLED | — | Enable WhatsApp bridge sidecar management. |
UPDATER__WHATSAPP_BRIDGE_IMAGE_REPO | — | Docker image for the WhatsApp bridge. |
UPDATER__WHATSAPP_BRIDGE_CONTAINER_NAME | — | Container name for the WhatsApp bridge. |
UPDATER__WHATSAPP_BRIDGE_DATA_VOLUME | — | Data volume for the WhatsApp bridge. |
UPDATER__WHATSAPP_BRIDGE_NETWORK | — | Docker network for the WhatsApp bridge. |
UPDATER__WHATSAPP_BRIDGE_PORT | — | Port for the WhatsApp bridge. |
LLM providers
Section titled “LLM providers”LLM provider credentials are not configured through environment variables. They are stored encrypted in the database and managed through the Selu dashboard under Settings → Providers.
Supported providers: Anthropic, OpenAI, AWS Bedrock, and Pico (OpenAI-compatible local AI server).
Channels
Section titled “Channels”Channel credentials (Telegram bot tokens, BlueBubbles/iMessage configuration) are not configured through environment variables. They are managed through the dashboard under Pipes.
Release channels
Section titled “Release channels”| Channel | Update frequency | Description |
|---|---|---|
stable | Every few weeks | Tested releases with full changelogs |
dev | Weekly | Newer features and improvements |
nightly | Daily | Builds from main branch (may be unstable) |
Set your preferred channel with SELU_RELEASE_CHANNEL or change it in the System Updates interface.