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
Metadata
Release files for gaol 2026.3.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gaol-2026.3.5.tar.gz | 807.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gaol-2026.3.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.4 MB
Release files / gaol-2026.3.5.tar.gz
| Download URL | gaol-2026.3.5.tar.gz |
|---|---|
| Size | 807.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bbdd9441f83bb8de9dd50620abca591d09cee3199717002dfafdfc61d0230dda
|
|
BLAKE2b-256 checksum How to use checksums |
de7ba6c2c7d5e80289c43f7244ce7fecb650df7427daa64ac9033014ccc13bac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / gaol-2026.3.5-py3-none-any.whl
| Download URL | gaol-2026.3.5-py3-none-any.whl |
|---|---|
| Size | 632.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e5f5d7b8796b95028fd88d51122820dd54cf2190a941be9d9f9982dd53c8294d
|
|
BLAKE2b-256 checksum How to use checksums |
5b29aa6d5d7832f2dbd3e58f673f58454d15aa747c38a0d6a1680164b38e35c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|