Skip to main content

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


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.3.2.tar.gz (780.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gaol-2026.3.2-py3-none-any.whl (613.4 kB view details)

Uploaded Python 3

File details

Details for the file gaol-2026.3.2.tar.gz.

File metadata

  • Download URL: gaol-2026.3.2.tar.gz
  • Upload date:
  • Size: 780.7 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

Hashes for gaol-2026.3.2.tar.gz
Algorithm Hash digest
SHA256 6cdd588175490ee35b0791200b85477e49491b9bf3a472604fca24785965f24c
MD5 01187bb8ebbb7171390c765e9e63057e
BLAKE2b-256 f4014fec2f64a0b57f8551897377dd788b20b090899b5adf1945cb4816027404

See more details on using hashes here.

File details

Details for the file gaol-2026.3.2-py3-none-any.whl.

File metadata

  • Download URL: gaol-2026.3.2-py3-none-any.whl
  • Upload date:
  • Size: 613.4 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

Hashes for gaol-2026.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f69aed0e7952b27392106295647584d54d220f60bad9efafd7b903c72f251cc7
MD5 4405fd4871cfa5aabb95f30899ec7b22
BLAKE2b-256 a30285386f96dcedbadca236aef8b8fd6bb5772e1783dfe0bdf55d3176388ea9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page