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.2.0.tar.gz (7.1 MB view details)

Uploaded Source

Built Distribution

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

gaol-2026.2.0-py3-none-any.whl (601.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gaol-2026.2.0.tar.gz
  • Upload date:
  • Size: 7.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","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.2.0.tar.gz
Algorithm Hash digest
SHA256 cc1a10ba4e7c9ba2899e8290cb9ff30d4f8459c81e60cef32099fb6e4a0c4fd3
MD5 5717db36b346a41711fccfa728a4ddbd
BLAKE2b-256 98fa59a4f10ae6545d6827a17d030e672e3a3a1bbc8ab335954e1ba89a493b76

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gaol-2026.2.0-py3-none-any.whl
  • Upload date:
  • Size: 601.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5bfbb5ef90fc6cff0c86b21eba422e1b295f961ac0d3bae9cca4433acb9f319c
MD5 399c19ddcf1ddc6e3df9d5d0b5aa2aa1
BLAKE2b-256 cf131c6947c14829bb688e2de9c418c8a124bdbfc91159118c847f59ed05e672

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