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.4.tar.gz (806.9 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.4-py3-none-any.whl (632.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gaol-2026.3.4.tar.gz
  • Upload date:
  • Size: 806.9 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.4.tar.gz
Algorithm Hash digest
SHA256 b9a9245442fd4da0f417715ff4e3d113b0a22e9e94558d71f6cdf53d9c5bce79
MD5 abe8e994bd996aab8e52c7cc01eee515
BLAKE2b-256 ae18615c950d6db878abb416b2a75a86fbf1e152350eece9fd1112810ad6de07

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gaol-2026.3.4-py3-none-any.whl
  • Upload date:
  • Size: 632.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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 42a714897cba083bec2e47674c2d89dd36277a9814d199a9da43c3954d06ea7d
MD5 e74b248a66d51f593f090a460130be9f
BLAKE2b-256 1507892264e96ebc4e99457a6edf83d35777b91248abe353ddc7b8180e9875de

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