···1313- **Headless VM Management** - Run VMs in the background without GUI overhead
1414- **QEMU Integration** - Leverages QEMU for robust virtualization on both x86_64
1515 and ARM64 architectures
1616-- **Docker-like CLI** - Familiar commands for VM lifecycle management (run,
1717- start, stop, ps, rm, etc.)
1616+- **Docker-like CLI** - Familiar commands for VM lifecycle management (`run`,
1717+ `start`, `stop`, `ps`, `rm`, `logs`, `inspect`, etc.)
1818- **Configuration Files** - TOML-based configuration for reproducible VM setups
1919- **Multiple Input Sources** - Boot from local ISOs, remote URLs, or OCI
2020 registry images
···2424- **Pull & Push** - Store and retrieve VM images from OCI-compliant registries
2525 (GitHub Container Registry, Docker Hub, etc.)
2626- **Image Management** - List, tag, and remove local VM images
2727-- **Authentication** - Secure login/logout for private registries
2727+- **Authentication** - Secure login/logout for private registries with password
2828+ from stdin or interactive prompt
2829- **Cross-platform** - Automatic architecture detection and handling
2930 (amd64/arm64)
30313232+### 🐧 Quick Start Linux Distributions
3333+3434+- **Ubuntu** - Quick shortcuts like `vmx ubuntu` with automatic download
3535+- **Debian** - Support for `vmx debian` with cloud-init ready images
3636+- **Fedora** - Run `vmx fedora:43` with CoreOS and Server editions
3737+- **Alpine Linux** - Lightweight `vmx alpine` for minimal setups
3838+- **AlmaLinux** - Enterprise-ready with `vmx alma`
3939+- **Rocky Linux** - RHEL-compatible via `vmx rocky`
4040+- **NixOS** - Declarative systems with `vmx nixos`
4141+- **Gentoo** - Source-based distributions with `vmx gentoo`
4242+- **Fedora CoreOS** - Container-optimized OS with automatic version detection
4343+4444+All distributions automatically download the appropriate image for your
4545+architecture (ARM64/x86_64) and cache for subsequent runs.
4646+3147### 🌐 Networking
32483349- **Bridge Networking** - Create and manage network bridges for VM connectivity
3450- **Port Forwarding** - Easy SSH and service access with flexible port mapping
5151+ (e.g., `-p 2222:22,8080:80`)
3552- **Multiple Network Modes** - Support for various QEMU networking
3653 configurations
5454+- **Automatic Bridge Setup** - Creates network bridges automatically when needed
37553856### 💾 Storage & Volumes
39574058- **Volume Management** - Create, list, inspect, and delete persistent volumes
4159- **Multiple Disk Formats** - Support for qcow2 and raw disk images
4260- **Automatic Provisioning** - Volumes are created automatically from base
4343- images
6161+ images or attached to VMs
4462- **Flexible Sizing** - Configurable disk sizes for different workloads
6363+ (e.g., `-s 40G`)
6464+- **Volume Attachment** - Attach volumes to VMs with `-v` flag
6565+6666+### ☁️ Cloud-Init Support
6767+6868+- **Seed Image Creation** - Interactive `vmx seed` command to generate
6969+ cloud-init configuration
7070+- **User Data & Meta Data** - Full support for cloud-init user-data and
7171+ meta-data
7272+- **SSH Key Injection** - Automatically configure SSH authorized keys
7373+- **Custom User Setup** - Define default user, shell, and sudo permissions
7474+- **Instance Configuration** - Set hostname and instance ID for cloud
7575+ environments
45764677### 🔧 Advanced Features
47784848-- **Detached Mode** - Run VMs in the background as daemon processes
4949-- **Live Logs** - Stream VM output and follow logs in real-time
7979+- **Detached Mode** - Run VMs in the background as daemon processes with `-d`
8080+ flag
8181+- **Live Logs** - Stream VM output and follow logs in real-time with `-f` flag
5082- **VM Inspection** - Detailed information about running and stopped VMs
5151-- **Resource Configuration** - Customizable CPU, memory, and disk settings
8383+- **Resource Configuration** - Customizable CPU (type and cores), memory, and
8484+ disk settings
5285- **ARM64 & x86_64 Support** - Native support for both architectures with UEFI
5386 firmware
8787+- **Install Mode** - Persist changes to VM disk image with `--install` flag
8888+- **Automatic Caching** - Downloaded ISOs and images are cached locally for
8989+ faster subsequent runs
54905591### 🌍 HTTP API
56925793- **RESTful API** - Full-featured HTTP API for programmatic VM management
5894- **Bearer Authentication** - Secure API access with token-based auth
9595+ (auto-generated or custom via `VMX_API_TOKEN`)
5996- **Machines Endpoint** - Create, start, stop, restart, and remove VMs via API
6097- **Images Endpoint** - List and query VM images
6161-- **Volumes Endpoint** - Manage persistent storage volumes
9898+- **Volumes Endpoint** - Create, list, inspect, and delete persistent volumes
6299- **CORS Support** - Cross-origin requests for web-based tools
100100+- **Custom Port** - Configure API server port with `--port` flag or
101101+ `VMX_API_PORT` env var
6310264103## Installation
65104···100139vmx ghcr.io/tsirysndr/ubuntu:24.04
101140```
102141142142+### Quick Start with Linux Distributions
143143+144144+Use distribution shortcuts to quickly spin up VMs:
145145+146146+```bash
147147+# Ubuntu
148148+vmx ubuntu
149149+150150+# Debian
151151+vmx debian
152152+153153+# Fedora
154154+vmx fedora
155155+vmx fedora-coreos
156156+157157+# Alpine Linux
158158+vmx alpine
159159+160160+# AlmaLinux
161161+vmx alma
162162+163163+# Rocky Linux
164164+vmx rocky
165165+# NixOS
166166+vmx nixos
167167+168168+# Gentoo
169169+vmx gentoo
170170+```
171171+172172+These shortcuts automatically download the appropriate cloud-ready or
173173+installation images for your architecture (ARM64 or x86_64).
174174+103175### Pull and Run from Registry
104176105177```bash
···185257vmx volumes
186258187259# Create and attach a volume to VM
188188-vmx run ubuntu:24.04 -v my-data
260260+vmx run ubuntu -v my-data
261261+262262+# Create volume with custom size
263263+vmx run ubuntu -v my-data -s 50G
189264190265# Inspect a volume
191266vmx volume inspect my-data
···194269vmx volume rm my-data
195270```
196271272272+### Cloud-Init Configuration
273273+274274+```bash
275275+# Create a cloud-init seed image interactively
276276+vmx seed
277277+278278+# Create with custom output path
279279+vmx seed my-seed.iso
280280+281281+# Run VM with cloud-init seed
282282+vmx ubuntu --cloud --seed seed.iso
283283+284284+# The seed command will prompt for:
285285+# - Instance ID
286286+# - Hostname
287287+# - Default username
288288+# - User shell
289289+# - Sudo permissions
290290+# - SSH authorized keys
291291+```
292292+197293### Advanced Options
198294199295```bash
···204300 --memory 4G \
205301 --detach
206302207207-# With port forwarding (SSH on port 2222)
208208-vmx run ubuntu:24.04 -p 2222:22
303303+# With multiple port forwards (SSH and HTTP)
304304+vmx run ubuntu:24.04 -p 2222:22,8080:80
209305210306# With bridge networking
211307vmx run ubuntu:24.04 --bridge br0
212308213213-# With persistent disk
214214-vmx run ubuntu:24.04 \
309309+# With persistent disk and install mode
310310+vmx ubuntu:24.04 \
215311 --image /path/to/disk.img \
216312 --size 40G \
217217- --disk-format qcow2
313313+ --disk-format qcow2 \
314314+ --install
315315+316316+# With cloud-init and volume
317317+vmx run ubuntu:24.04 \
318318+ --cloud \
319319+ --seed seed.iso \
320320+ -v data \
321321+ -s 50G \
322322+ -d
218323```
219324220325## Configuration File
···282387283388### API Authentication
284389285285-All API requests require a Bearer token:
390390+All API requests require a Bearer token. The token is auto-generated on first
391391+run or can be set via the `VMX_API_TOKEN` environment variable:
392392+393393+```bash
394394+# Auto-generated token (displayed on startup)
395395+vmx serve
396396+397397+# Custom token
398398+export VMX_API_TOKEN=your-secret-token
399399+vmx serve
400400+401401+# Custom port
402402+vmx serve --port 3000
403403+# or
404404+export VMX_API_PORT=3000
405405+vmx serve
406406+```
407407+408408+API requests using the Bearer token:
286409287410```bash
288411curl -H "Authorization: Bearer your-token" http://localhost:8889/machines
···299422 "image": "ubuntu:24.04",
300423 "memory": "4G",
301424 "cpus": 4,
302302- "portForward": ["2222:22"]
425425+ "portForward": ["2222:22"],
426426+ "volume": "data"
303427 }'
304428305429# Start a machine
···309433# List all machines
310434curl http://localhost:8889/machines \
311435 -H "Authorization: Bearer your-token"
436436+437437+# Create a volume
438438+curl -X POST http://localhost:8889/volumes \
439439+ -H "Authorization: Bearer your-token" \
440440+ -H "Content-Type: application/json" \
441441+ -d '{
442442+ "name": "data",
443443+ "size": "50G"
444444+ }'
312445```
313446314447## Architecture Support
···324457### Development Environment
325458326459```bash
327327-# Initialize configuration
460460+# Quick start with Ubuntu
461461+vmx ubuntu:24.04
462462+463463+# Or initialize with custom configuration
328464vmx init
329465330466# Edit vmconfig.toml to your needs
331467# Then start the VM
332468vmx
333469334334-# SSH into the VM (port forwarding configured)
470470+# SSH into the VM (with port forwarding configured)
335471ssh -p 2222 user@localhost
472472+```
473473+474474+### Cloud-Init Setup
475475+476476+```bash
477477+# Create a cloud-init seed image
478478+vmx seed
479479+480480+# Run Ubuntu with cloud-init
481481+vmx ubuntu --cloud --seed seed.iso -p 2222:22 -d
482482+483483+# Wait for VM to boot and SSH in
484484+ssh -p 2222 ubuntu@localhost
336485```
337486338487### CI/CD Integration
···341490# Pull a pre-configured image
342491vmx pull ghcr.io/company/test-env:latest
343492344344-# Run tests in detached mode
345345-vmx run ghcr.io/company/test-env:latest -d
493493+# Run tests in detached mode with volume for results
494494+vmx run ghcr.io/company/test-env:latest -d -v test-results
346495347496# Execute tests and cleanup
348497vmx stop test-vm
349498vmx rm test-vm
499499+vmx volume rm test-results
350500```
351501352502### Multi-VM Setup
353503354504```bash
355355-# Start database VM
356356-vmx run postgres:14 -d -p 5432:5432 -v pgdata
505505+# Start database VM with persistent storage
506506+vmx run postgres -d -p 5432:5432 -v pgdata -s 20G
357507358358-# Start application VM
359359-vmx run app:latest -d -p 8080:8080
508508+# Start application VM with bridge networking
509509+vmx run app -d -p 8080:8080 --bridge br0
510510+511511+# Start cache VM
512512+vmx run redis -d -p 6379:6379
360513361514# List all running VMs
362515vmx ps
516516+```
517517+518518+### Quick Distribution Testing
519519+520520+```bash
521521+# Test different distributions
522522+vmx alpine -m 512M -C 1
523523+vmx fedora-coreos
524524+vmx nixos-m 4G -C 2
525525+vmx rockylinux -p 2222:22 -d
363526```
364527365528## License