Architecture
Storage and configuration
Application data, schema-v2 config.json, VM disks, atomic writes, and permissions.
Wave VM stores local application state in the platform application data directory resolved by Tauri from the bundle identifier com.wavevm.desktop.
Typical locations
- Linux:
$XDG_DATA_HOME/com.wavevm.desktopor~/.local/share/com.wavevm.desktop - macOS:
~/Library/Application Support/com.wavevm.desktop - Windows:
%APPDATA%\com.wavevm.desktop
The macOS and Windows paths are documented by the project but their host behavior has not been verified in this environment.
Created files
config.json # versioned application configuration (schema v2)
vms/<machine-id>/ # one directory per machine
disk.qcow2 # blank QCOW2 virtual disk
qemu.log # latest QEMU run log
qmp.sock # private QMP socket while runningThe vms/ directory is created at startup. A machine directory and its disk are created when a machine is created. Wave VM does not automatically remove VM directories or disks.
Configuration schema
The current schema is version 2. config.json contains schemaVersion, createdAtUnix, lastOpenedUnix, and a vms array. Each VM record stores its identifier, name, guest architecture, memory, virtual CPUs, disk path, disk size, lifecycle state, optional last error, and timestamps.
Schema versions 0 and 1 are migrated to version 2. A version newer than the supported schema is rejected with config_version_unsupported rather than being silently rewritten. Persisted starting, running, or stopping states are reconciled when the application starts.
Atomic writes and permissions
Configuration writes use a temporary file in the same directory, followed by an atomic rename. On Unix, the temporary file and final configuration are written with 0600 permissions. Application directories and machine directories are set to 0700. VM disks are set to 0600. The parent directory is synced after a successful rename.
Storage management is read-only
Source references
- config/store.rs — schema, migration, atomic writes, and permissions.
- vm/disk.rs — QCOW2 creation and overwrite protection.
- state.rs — application data initialization and shutdown.
Continue with Security model.