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.1.tar.gz (780.8 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.1-py3-none-any.whl (613.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gaol-2026.3.1.tar.gz
  • Upload date:
  • Size: 780.8 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.1.tar.gz
Algorithm Hash digest
SHA256 ef1c1ec59c55c39f3cc4e497c7d39ec911ccdd5f0ba307bb2a96b37dce4395a6
MD5 8fcf20aed91018949615545e0c86e6c3
BLAKE2b-256 2412018ca92fa99ce56004d7bf6b562c011d68b1d28d95c260bae4873bce74c4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gaol-2026.3.1-py3-none-any.whl
  • Upload date:
  • Size: 613.3 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ca91a3fccf350b72a9c09b52d082e2f95904e9d21da6507c2bb6e5ef8a87ad18
MD5 4f1dd2d41f1d832680b8879fab61bf76
BLAKE2b-256 5719cf4cc202a89e14787bd1a63c19b676fb09cb795a66e892e0aa12d11d693f

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