
utmd
Disposable VM sandbox manager for UTM on macOS. Create, run, and prune isolated development environments.
Installation • Quick Start • Usage • Config • JSON Output
Features
- Template-based cloning — create VMs from base templates (
[t]-linux,[t]-macos) - Disposable lifecycle —
create→run→rmfor one-off sandboxes,prunefor batch cleanup - Smart naming — exact names, templates with
{prefix}{os}-{rand}, or prefix + OS combinations - Batch pruning — filter by prefix, OS, or age (
--older-than 24h,--older-than 7d) - Machine readable — JSON output for all commands, designed for automation and agent pipelines
- Non-destructive — only removes
utmd-prefixed VMs, leaves personal VMs untouched - Dry run support —
--dry-runpreviews actions without mutating state - Global automation flags —
--json,--quiet,--yes,--dry-run,--config
Installation
Homebrew
Cargo
Build from source
Quick Start
Usage
Create and run sandboxes
Manage existing VMs
Batch pruning
Config
Create the config file with utmd init:
Default config path: ~/.config/utmd/config.toml
= "/Applications/UTM.app"
= "/usr/local/bin/utmctl"
= "/Users/user/Library/Application Support/utmd/state.json"
= "utmd-"
[]
= "[t]-linux"
= "[t]-macos"
[]
= "{prefix}{os}-{rand}"
= 4
= 8
[]
= false
= false
Environment variables
Environment variables override config values. Precedence: CLI flags > environment > config file > built-in defaults.
JSON Output
All commands return wrapped JSON with a stable top-level shape:
Use --json to force JSON output. On first run, utmd checks for the utmctl dependency and reports an error if it is missing.