Install

Clean machine to a running stack

Linux or WSL2 on x86-64 (amd64). The v0.2.0 prebuilt images are validated for this architecture; ARM64 images are not included in this release. The images are public on GHCR and can be downloaded without signing in. Anonymous pulls and an isolated rootless Docker installation passed on September 22, 2026. Allow several gigabytes for the images and bundled model assets.

Prerequisites

git, rootless Podman, and a compose provider. No Python, Node or uv on the host.

# Debian 13
sudo apt-get update && sudo apt-get install -y git podman docker-compose
# Ubuntu 24.04
sudo apt-get update && sudo apt-get install -y git podman podman-compose

Prefer Compose v2 (packaged as docker-compose) and fall back to podman-compose only where v2 is not packaged. Installing docker-compose does not install a Docker daemon; Podman still runs the containers.

The compose-provider trap. podman-compose 1.3.x fails podman compose up with Error: invalid port format and silently passes unexpanded ${VAR:-default} values into the containers. Install docker-compose and run podman compose up -d again.

Rootless Podman (the tested path)

curl -fLO https://github.com/Dyluhn/disco-releases/releases/download/v0.2.0/disco-source-v0.2.0.tar.gz
curl -fLO https://github.com/Dyluhn/disco-releases/releases/download/v0.2.0/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
tar -xzf disco-source-v0.2.0.tar.gz
cd disco-v0.2.0
systemctl --user daemon-reload
systemctl --user start dbus.socket
loginctl enable-linger "$USER"
systemctl --user enable --now podman.socket
export DISCO_SANDBOX_SOCKET=$XDG_RUNTIME_DIR/podman/podman.sock
podman compose up -d
podman compose logs app-server   # prints the UI URL and the pairing token

The two systemctl --user lines set up the per-user services Podman just added; skipping them is the usual cause of sd-bus call: Interactive authentication required part-way through a run. enable-linger keeps the stack up after you log out. The export points the Build sandbox at your rootless socket; keep it exported for every later podman compose command in the same shell.

Rootless Docker

Do not run the Podman lines. Rootless Docker comes from Docker’s installer, not a distribution package:

sudo apt-get update && sudo apt-get install -y git curl uidmap dbus-user-session docker-compose-v2
sudo systemctl disable --now docker.service docker.socket
systemctl --user daemon-reload && systemctl --user start dbus.socket
loginctl enable-linger "$USER"
curl -fsSL https://get.docker.com/rootless | sh
export PATH="$HOME/bin:$PATH"
export DOCKER_HOST="unix://$XDG_RUNTIME_DIR/docker.sock"
curl -fLO https://github.com/Dyluhn/disco-releases/releases/download/v0.2.0/disco-source-v0.2.0.tar.gz
curl -fLO https://github.com/Dyluhn/disco-releases/releases/download/v0.2.0/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
tar -xzf disco-source-v0.2.0.tar.gz
cd disco-v0.2.0
DISCO_LOCAL_ENGINE=docker DISCO_SANDBOX_SOCKET=$XDG_RUNTIME_DIR/docker.sock docker compose up -d

On Ubuntu 23.10 and later the installer stops at RootlessKit failed because unprivileged user namespaces are restricted; the reference has the AppArmor exception to finish the install. A build from a checkout that dies within 20 seconds on a dns error is rootless Docker’s network namespace, not Disco: give the daemon explicit resolvers in ~/.config/docker/daemon.json.

Windows

Use WSL2 with a Debian or Ubuntu distribution and follow the Podman path inside it. Docker Desktop works too; then host.docker.internal reaches services on the Windows side.

Confirm it is up

podman ps --format '{{.Names}} {{.Status}}'     # or: docker ps --format ...

Expect three containers Up … (healthy): app-server, agent-server, frontend. A fourth, sandbox-image, is expected to be Exited (0); it pulls the sandbox image and stops. Check with podman ps, not compose ps: the compose providers print different things and one never prints health at all.

Open http://localhost:8088. A browser on the same machine pairs itself. Next: connect a model.

Update

cd disco-v0.2.0 # download and review the new source archive before upgrading
podman compose pull && podman compose up -d

Your data lives in the disco-data volume and survives updates. Before a major version, take a backup: the reference covers backup and restore, starting at boot and upgrade and uninstall.

Hardware

  • 8 GB RAM works with DISCO_ENCODER_TIER=lite (about 0.15 GB of encoder weights); 16 GB for the full local retrieval tier (about 4 GB).
  • A useful local driver is a 24–32B-class instruction model with a 32k+ context window. Smaller CPU-only models are for smoke tests.
  • Real Build runs want Podman or Docker isolation; the process sandbox is for local development only.

Reference: docs/self-host.md in the repository is the complete, versioned version of this guide. When the two disagree, the repository is right.