Incus provides powerful system containers and virtual machines with superior security and isolation, but lacks the declarative multi-container orchestration that Docker Compose offers. This tool bridges that gap:
docker-compose.yml files with Incus containersStatus: Stable.
up, down, start, stop, restart, list (and ps), logs, exec, config, plus build, healthd, incus (pass-through), and self-updatecompose.incus.yaml overrides and x-incus / x-incus-compose extensions for raw Incus optionsdown/up, avoids registry rate limits)depends_on: service_healthy ordering via the ic-healthd sidecar docup --scale and orphan pruningshm_size, container_name, etc.)INCUS_COMPOSE_* environment variables for every flag, with a configurable parallel worker count docRequires podman or docker for image building and an Incus https remote (needed for healthchecking) with OCI registries added.
See Getting Started for the full setup walkthrough.
Install the latest release:
curl -sSfL https://raw.githubusercontent.com/lxc/incus-compose/main/install.sh | sh -s -- -b ~/.local/bin
Or grab a prebuilt archive from the Releases Page.
Then point it at your existing compose.yaml:
# Start services
incus-compose up
# View logs
incus-compose logs -f
# List running services
incus-compose list
# Stop and remove
incus-compose down
incus-compose uses a resource-first design, see Architecture Documentation for details.
The following channels are available for you to interact with the Incus community.
You can file bug reports and feature requests at: https://github.com/lxc/incus-compose/issues/new
Community support is handled at: https://discuss.linuxcontainers.org
Fixes and new features are greatly appreciated. Make sure to read our contributing guidelines first!
This project is inspired by @bketelsen.
Some components are adapted from docker compose.
The install.sh script is adapted from golangci-lint.
This project uses AI tools as development aids (drafting, iteration, reviews, tests, and documentation). Architecture, constraints, and final code decisions are owned by the human committers.
Earlier development was on Gitlab.