Declarative container manager for reproducible dev boxes.
ZariBox reads a YAML file and keeps a container in sync with:
- container identity (
Image,HomeDir,ExtraFlags) - package set (
Packages) - optional post-install bootstrap commands (
Run)
Supported backends:
distroboxpodman
Backend selection precedence:
ZARIBOX_BACKENDenvironment variableBackend:field in YAML- default:
distrobox
zaribox status [file.yaml]
zaribox list
zaribox apply [file.yaml]
zaribox enter [file.yaml]
zaribox destroy [file.yaml]
zaribox helpIf no file is passed, ZariBox auto-selects the first *.yaml / *.yml in the current directory.
Minimal config:
Name: archbox
Image: archlinuxCommon fields:
Name(optional): container name, defaults to YAML filename stemImage(required): image to create fromBackend(optional):distroboxorpodmanHomeDir(optional): host directory mounted as container homeExtraFlags(optional): extra backend create flagsPackages(optional): package list to install and reconcileRun(optional): commands executed after creation/package install
Example:
Name: devbox
Backend: podman
Image: archlinux
HomeDir: /home/user/.local/share/zaribox/homes/devbox
ExtraFlags: --device nvidia.com/gpu=all
Packages:
- git
- neovim
- fish
Run:
- echo 'exec fish' >> ~/.bashrc- Python 3.10+
- PyYAML
- A container runtime backend:
distrobox(default), orpodman
Local install (copies project to ~/.local/lib/zaribox and installs launcher at ~/.local/bin/zaribox):
Install PyYAML into the Python environment used by the launcher before running the install script.
python3 -m pip install PyYAML
./install.sh installWith custom Python executable for launcher:
./install.sh install --python python3After install:
zaribox helpEnsure ~/.local/bin is in your PATH.
./install.sh uninstall