Skip to content

Environment Variables

All Selu configuration is done through environment variables, typically set in your .env file alongside docker-compose.yml.

Only one variable is required to start Selu:

VariableDescription
SELU__ENCRYPTION_KEYEncryption key for stored credentials. Use a random string of at least 32 characters.
VariableDescriptionDefault
SELU__SERVER__PORTPort the Selu dashboard listens on3000
SELU__SERVER__HOSTIP address to bind to0.0.0.0
SELU__EXTERNAL_URLPublic URL of your instance (needed for webhooks behind a reverse proxy)
SELU__BASE_PATHURL path prefix when running behind a reverse proxy on a sub-path (e.g., /selu)

Selu uses an embedded SQLite database. By default it’s stored inside the container at /app/data/selu.db.

VariableDescriptionDefault
SELU__DATABASE__URLSQLite connection stringsqlite:///app/data/selu.db?mode=rwc

The built-in update system is configured with these variables:

VariableDescriptionDefault
SELU_RELEASE_CHANNELRelease channel: stable, dev, or nightlystable
SELU__RELEASE_METADATA_URLURL for release metadata APIhttps://selu.bot/api/releases/selu

The update system also writes these variables to your .env file automatically — you don’t need to set them:

VariableDescription
SELU_IMAGE_TAGCurrent Docker image tag
SELU_IMAGE_DIGESTImage digest used for verification
SELU_IMAGE_VERSIONRelease version (e.g., v1.5.0)
SELU_IMAGE_BUILDBuild number

The update sidecar runs alongside Selu and manages the actual update process. These variables are pre-configured by the installer — you normally don’t need to change them.

VariableDescriptionDefault
SELU_UPDATER_URLURL of the updater sidecarhttp://selu-updater:8090
SELU_UPDATER_SHARED_SECRETShared secret for authenticating with the sidecar
SELU_UPDATER_REQUEST_TIMEOUT_SECSTimeout for requests to the sidecar (seconds)30
VariableDescriptionDefault
SELU__MARKETPLACE_URLAgent marketplace API URLhttps://selu.bot/api/marketplace/agents
SELU__INSTALLED_AGENTS_DIRDirectory for installed marketplace agents/app/installed_agents

LLM provider credentials (Anthropic, OpenAI, Bedrock) and channel credentials (Telegram, iMessage) are managed through the Selu dashboard — not through environment variables. Go to Settings → Providers to add your API keys, or Pipes to set up messaging channels.

VariableDescriptionDefault
SELU__EGRESS_PROXY_ADDREgress proxy address for agent containers0.0.0.0:8888
SELU__MAX_CHAIN_DEPTHMaximum event chain depth (prevents loops)3
.env
SELU__ENCRYPTION_KEY=a1b2c3d4e5f6...
# Release channel
SELU_RELEASE_CHANNEL=stable
# If behind a reverse proxy
# SELU__EXTERNAL_URL=https://selu.example.com

You can also set variables directly in docker-compose.yml under the environment key, but the .env file is simpler for most setups.

Selu uses a double-underscore (__) separator for nested configuration. For example:

  • SELU__SERVER__PORT → server port
  • SELU__EXTERNAL_URL → external URL

A few variables used by the update system (SELU_RELEASE_CHANNEL, SELU_IMAGE_TAG, etc.) use single underscores because they are read directly, not through the configuration library.

ChannelUpdate frequencyBest for
StableEvery few weeksProduction use (recommended)
DevWeeklyEarly access to new features
NightlyDailyTesting (may be unstable)

You can also switch channels in the dashboard under System Updates.