selu
The core application server. Handles the dashboard, message routing, local SQLite data, and orchestration.
Selu runs as a set of Docker containers, making it easy to deploy on any machine that supports Docker. This guide walks you through the architecture and setup.
A Selu deployment consists of the main Selu server container and on-demand agent containers:
selu
The core application server. Handles the dashboard, message routing, local SQLite data, and orchestration.
Agent containers
Each installed agent runs in its own container. These are created automatically when you install agents from the marketplace.
All containers communicate over an internal Docker network. Agent containers connect to the server via gRPC.
mkdir selu && cd selubash <(curl -fsSL https://selu.bot/install.sh)bash <(curl -fsSL https://selu.bot/install.sh) --yes --channel stableOpen http://localhost:3000 in your browser to access the Selu dashboard.

The default docker-compose.yml looks like this:
services: selu: image: ghcr.io/selu-bot/selu:${SELU_IMAGE_TAG:-stable} ports: - "${SELU__SERVER__PORT:-3000}:${SELU__SERVER__PORT:-3000}" environment: - SELU__ENCRYPTION_KEY=${SELU__ENCRYPTION_KEY} - SELU__SERVER__HOST=0.0.0.0 - SELU__SERVER__PORT=${SELU__SERVER__PORT:-3000} - SELU__DATABASE__URL=sqlite:///app/data/selu.db?mode=rwc - SELU__MARKETPLACE_URL=https://selu.bot/api/marketplace/agents - SELU__INSTALLED_AGENTS_DIR=/app/installed_agents - SELU__RELEASE_METADATA_URL=https://selu.bot/api/releases/selu volumes: - /var/run/docker.sock:/var/run/docker.sock - selu-data:/app/data - ./installed_agents:/app/installed_agents
volumes: selu-data: external: true name: ${SELU_DATA_VOLUME}Older installations stored Selu data in ./data. To migrate, open that installation directory and rerun the installer. It stops Selu and the updater, copies the complete data directory into a new managed volume, verifies the database copy, and only then switches Docker Compose. Your old ./data directory remains as an inactive fallback copy.
bash <(curl -fsSL https://selu.bot/install.sh)This is a one-time installer migration. A normal update from the Selu dashboard doesn’t rewrite your storage configuration.
If Docker no longer has a cached image for an installed agent’s capability — for example after clearing Docker’s image cache or moving Selu to a new host — Selu recovers automatically:
You can also restore missing images proactively without waiting for a user to trigger it:
stable, dev, nightly).Selu verifies release digests from https://selu.bot/api/releases/selu before applying updates.
Updates are applied by the selu-updater sidecar container, so update jobs continue even while Selu is being restarted.
By default, the sidecar does not refresh itself in the same run. It applies its own image refresh on the next update cycle.
SELU__ENCRYPTION_KEY secret. This key protects encrypted credentials at rest.SELU_DATA_VOLUME in .env, along with .env, docker-compose.yml, and installed_agents.See the Environment Variables reference for all available configuration options.