Keep your friends close, your supply chain in a VM.
DVM is a small Bash wrapper around Lima for creating disposable Fedora development VMs on macOS. It is meant to keep project code, package scripts, AI tools, language runtimes, SSH/GPG keys, and random dev dependencies away from the host.
DVM targets macOS today. The same VM-isolation idea can make sense on Linux, but Linux support is not implemented or tested.
It is intentionally not a full VM platform, package manager, dotfiles framework, secret manager, or hard sandbox beyond what Lima/macOS virtualization provide. The core stays small. Most of the project is docs and examples for wiring your own per-VM setup.
The idea: one project, one VM, one shell config. Recreate or remove the VM when you are done.
Requirements:
- macOS 13+
- Bash
- Lima:
brew install lima
Core idea:
dvm init myapp
dvm create myapp
dvm myappdvm myapp opens ~/code/myapp inside the VM by default.
Each VM has one shell config:
~/.config/dvm/vms/myapp.sh
Example:
DVM_PORTS="3000:3000"
DVM_SETUP_SCRIPTS="$DVM_SETUP_SCRIPTS common.sh"
dvm_vm_setup() {
git clone git@github.com:you/myapp.git "$DVM_CODE_DIR"
}Hosted AI CLIs are a recipe:
DVM_SETUP_SCRIPTS="$DVM_SETUP_SCRIPTS ai.sh"
DVM_AI_TOOLS="claude codex opencode mistral"
DVM_AI_YOLO="1"Then run dvm setup myapp and use claude, codex, opencode, or vibe
inside the VM. AI wrappers run as dvm-agent and use YOLO mode by default. Set
DVM_AI_YOLO="0" to keep approval prompts.
Commands:
dvm init [name]
dvm edit <name>
dvm create <name>
dvm setup <name>
dvm setup-all
dvm upgrade <name>
dvm upgrade-all
dvm enter <name>
dvm ssh <name> [command...]
dvm ssh-key <name>
dvm gpg-key <name>
dvm list
dvm rm <name> [--force]
Docs:
- Start: Install, Dependencies, Create VMs, Config
- Daily use: Commands, Recipes, Updates, Networking, Releases
- Setup examples: Languages, Node supply-chain hardening, Dotfiles, SSH, GPG, and signing
- Services and AI: AI, Services
- Project: Extending DVM, Uninstall