Cross-platform container and VM management tool
Project description
gaol
Containers and VMs all the way down.
A cross-platform container and VM management tool supporting Docker, systemd-nspawn, and libvirt.
Installation
With uv (recommended)
git clone <repo-url>
cd gaol
uv pip install -e .
With pip
git clone <repo-url>
cd gaol
pip install -e .
With pipx (isolated global install)
pipx install .
Quick Start
# Create a container
gaol create mycontainer --distro trixie
# Start the container
gaol start mycontainer
# Execute a command
gaol exec mycontainer -- bash
# List containers
gaol list
# Stop and destroy
gaol stop mycontainer
gaol destroy mycontainer
Features
- Multiple runtimes: Docker, systemd-nspawn, libvirt/QEMU
- Profiles: Reusable configurations for common setups (dev tools, GUI, networking)
- Snapshots: Save and restore container state
- Declarative specs: Define containers in YAML/TOML files
- Secrets management: Encrypted secrets with
${secret:NAME}syntax - GPU passthrough: NVIDIA, AMD, and Intel GPU support
- Container diff: Compare filesystem states and audit changes
- Health checks: HTTP, TCP, and command-based monitoring
- Dev tunnels: Expose containers to the internet via cloudflared
- Shell integration: Completions and prompt integration for bash/zsh/fish
Runtimes
| Runtime | Platform | Use Case |
|---|---|---|
| Docker | Linux, macOS | General purpose, wide compatibility |
| systemd-nspawn | Linux | Lightweight, native systemd integration |
| libvirt/QEMU | Linux | Full VM isolation for untrusted workloads |
Profiles
Apply pre-configured profiles to containers:
# Create with profiles
gaol create mydev --distro trixie --profile dev-python --profile gui
# List available profiles
gaol profiles list
# Show profile details
gaol profiles show dev-python
Built-in profiles include: base, dev-python, dev-node, dev-rust, gui, tailscale, tor, docker-in-docker, and more.
Declarative Specs
Define containers in YAML:
# mycontainer.yaml
name: web-dev
runtime: nspawn
distro: trixie
profiles:
- dev-python
- gui
environment:
DATABASE_URL: "postgres://localhost/mydb"
ports:
8080: 80
gaol spec apply mycontainer.yaml --start
Container Diff
Compare container filesystems and track changes:
# Compare two containers
gaol diff containers container-a container-b
# Compare snapshots
gaol diff snapshots mycontainer --from baseline --to current
# Audit changes since last snapshot
gaol audit mycontainer --packages
Development
# Install dev dependencies
uv pip install -e ".[dev]"
# Run tests
uv run pytest
# Run linter
uv run ruff check src/
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
gaol-2026.2.2.tar.gz
(8.0 MB
view details)
File details
Details for the file gaol-2026.2.2.tar.gz.
File metadata
- Download URL: gaol-2026.2.2.tar.gz
- Upload date:
- Size: 8.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9236e74921d420d01b239631d2b75a37d3cdd38f31b8c7f8c7217cca0776ff62
|
|
| MD5 |
58010964a8d67e47ad7e6ecb37665ada
|
|
| BLAKE2b-256 |
080cbb16e2ae9007a108bc13eeafa8dec1d220798c43e2e79d3ebed123e14718
|