Container VMs
The devx vm commands manage the lifecycle of your local development VM — a Fedora CoreOS instance running inside Podman Machine.
Commands
devx vm init
Provisions a new VM with Cloudflare Tunnel and Tailscale pre-configured.
bash
devx vm initThis is the only command most developers need to run. It:
- Compiles a Butane config into Ignition format
- Creates a Podman Machine with the Ignition file
- Starts the VM and waits for systemd services to boot
- Verifies Cloudflare Tunnel and Tailscale connectivity
Flags:
| Flag | Default | Description |
|---|---|---|
--provider | podman | Backend: podman, docker, or orbstack |
--dry-run | — | Preview the Ignition config without creating the VM |
devx vm status
Shows the health of all three components:
bash
devx vm status┌──────────────────────────────────────────────────────
│ 📊 VM Status
├──────────────────────────────────────────────────────
│ VM: ✅ running
│ Cloudflare: ✅ connected (tunnel-id: abc123)
│ Tailscale: ✅ connected (100.x.x.x)
└──────────────────────────────────────────────────────devx vm resize
Dynamically adjust VM resources without reprovisioning:
bash
devx vm resize --cpus 4 --memory 8192devx vm ssh
Drop into an SSH shell inside the VM:
bash
devx vm sshdevx vm sleep / devx vm sleep-watch
Pause the VM to free resources, or run a background daemon that auto-sleeps idle VMs:
bash
devx vm sleep # Pause now
devx vm sleep-watch # Auto-sleep after idle timeoutdevx vm teardown
Stop and remove the VM. This is a destructive operation and will prompt for confirmation:
bash
devx vm teardownIgnition Configuration
The VM is configured using a Butane file that compiles to Ignition format. This config:
- Installs and starts
tailscaledandcloudflaredas systemd units - Sets kernel parameters (
fs.inotify.max_user_watches,fs.aio-max-nr) - Configures persistent volumes for container data
- Injects credentials from your
.envfile
The Butane templates are stored in internal/ignition/ and compiled at devx vm init time.
