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.desktop or ~/.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 running

The 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

Disk creation is implemented, but resizing, deleting, compacting, and attaching existing disks are not. The Storage page is an inventory. Wave VM preserves existing disks and machine directories rather than removing them automatically.

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.