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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gaol-2026.3.0.tar.gz.
File metadata
- Download URL: gaol-2026.3.0.tar.gz
- Upload date:
- Size: 780.2 kB
- 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 |
a885e799e30230fc779b3b4c63832f94ad3accfd51d77e2ac768f1ae52c6f0ad
|
|
| MD5 |
88d386571f7c2da1bb2502c5410c7538
|
|
| BLAKE2b-256 |
62da631efd24e945542665667600c2eb5d063d57e1df24bdee21ee15a723f0d5
|
File details
Details for the file gaol-2026.3.0-py3-none-any.whl.
File metadata
- Download URL: gaol-2026.3.0-py3-none-any.whl
- Upload date:
- Size: 612.8 kB
- Tags: Python 3
- 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 |
b5257337f3ec5d0be81028e750fe8fd07561b06db08e5551996eb3fcb93bceec
|
|
| MD5 |
f7869ae1c9f8ca12eaef962defb3807d
|
|
| BLAKE2b-256 |
c55f0000fe98574f914130c3aa0806ca85d9b7c20b00d54d65eec2d4e38fcfaa
|