# pallab-js/r-utm architecture

> Architecture diagram of the GitHub repository pallab-js/r-utm, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pallab-js/r-utm
- Repository: https://github.com/pallab-js/r-utm

## Overview

VibeVisor is a macOS desktop manager for Linux ARM64 virtual machines. Its user-facing workflow is VM management in the Svelte interface, backed by Tauri commands that validate configuration and launch or control QEMU; it also exposes monitoring and SPICE display, plus documented import/export and settings capabilities. The Rust core includes disk-image tools, CPU allocation, direct-kernel boot support, and security/rate-limiting utilities. Some subsystem links are omitted because the excerpts do not show their callers.

Main entry points: [`src-tauri/src/lib.rs`](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/lib.rs) (App commands), [`src-tauri/src/vibe_core/launcher.rs`](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/launcher.rs) (QEMU launcher), [`src-tauri/src/vibe_core/storage.rs`](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/storage.rs) (Disk snapshots), [`src/routes/+page.svelte`](https://github.com/pallab-js/r-utm/blob/main/src/routes/%2Bpage.svelte) (VM management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_main_ui["VM management<br/>[+page.svelte]"]
  node_create_wizard["Create VM"]
  node_edit_vm["Edit VM<br/>[EditVmModal.svelte]"]
  node_settings_ui["Settings<br/>[Settings.svelte]"]
  node_spice_ui["SPICE display"]
  node_chart["Metrics chart<br/>[Chart.svelte]"]
  node_metrics_store["Metrics store<br/>[metrics.ts]"]
end

subgraph group_commands["Tauri commands"]
  node_tauri["App commands<br/>[lib.rs]"]
end

subgraph group_vmcore["VM runtime"]
  node_config["VM configuration<br/>[config.rs]"]
  node_launcher["QEMU launcher<br/>[launcher.rs]"]
  node_qmp["QMP client<br/>[qmp.rs]"]
  node_monitor["VM monitoring<br/>[monitor.rs]"]
  node_storage["Disk snapshots<br/>[storage.rs]"]
end

subgraph group_support["Host support"]
  node_cores["CPU allocation<br/>[cores.rs]"]
  node_kernel["Kernel boot<br/>[kernel.rs]"]
  node_security["Security utilities<br/>[security.rs]"]
  node_limiter["Command limiter<br/>[rate_limiter.rs]"]
end

node_user(("VM operator"))
node_qemu["QEMU"]
node_qemu_img["qemu-img"]

node_user -->|"manages VMs"| node_main_ui
node_tauri -->|"validates config"| node_config
node_tauri -->|"launches QEMU"| node_launcher
node_tauri -->|"rate limits"| node_limiter
node_tauri -->|"controls VM"| node_qmp
node_launcher -->|"validates paths"| node_security
node_launcher -->|"spawns"| node_qemu
node_storage -->|"runs commands"| node_qemu_img

click node_main_ui "https://github.com/pallab-js/r-utm/blob/main/src/routes/%2Bpage.svelte"
click node_create_wizard "https://github.com/pallab-js/r-utm/blob/main/src/lib/components/CreateVmWizard.svelte"
click node_edit_vm "https://github.com/pallab-js/r-utm/blob/main/src/lib/components/EditVmModal.svelte"
click node_settings_ui "https://github.com/pallab-js/r-utm/blob/main/src/lib/components/Settings.svelte"
click node_spice_ui "https://github.com/pallab-js/r-utm/blob/main/src/lib/components/SpiceDisplay.svelte"
click node_chart "https://github.com/pallab-js/r-utm/blob/main/src/lib/components/Chart.svelte"
click node_metrics_store "https://github.com/pallab-js/r-utm/blob/main/src/lib/stores/metrics.ts"
click node_tauri "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/lib.rs"
click node_config "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/config.rs"
click node_launcher "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/launcher.rs"
click node_qmp "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/qmp.rs"
click node_monitor "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/monitor.rs"
click node_storage "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/storage.rs"
click node_cores "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/cores.rs"
click node_kernel "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/kernel.rs"
click node_security "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/security.rs"
click node_limiter "https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/rate_limiter.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main_ui,node_create_wizard,node_edit_vm,node_settings_ui,node_spice_ui,node_chart,node_metrics_store toneBlue
class node_tauri toneAmber
class node_config,node_launcher,node_qmp,node_monitor,node_storage toneMint
class node_cores,node_kernel,node_security,node_limiter toneRose
class node_user,node_qemu,node_qemu_img toneIndigo
```

## Components

### Desktop interface

- [VM management](https://github.com/pallab-js/r-utm/blob/main/src/routes/%2Bpage.svelte): `src/routes/+page.svelte`
- [Create VM](https://github.com/pallab-js/r-utm/blob/main/src/lib/components/CreateVmWizard.svelte): `src/lib/components/CreateVmWizard.svelte`
- [Edit VM](https://github.com/pallab-js/r-utm/blob/main/src/lib/components/EditVmModal.svelte): `src/lib/components/EditVmModal.svelte`
- [Settings](https://github.com/pallab-js/r-utm/blob/main/src/lib/components/Settings.svelte): `src/lib/components/Settings.svelte`
- [SPICE display](https://github.com/pallab-js/r-utm/blob/main/src/lib/components/SpiceDisplay.svelte): `src/lib/components/SpiceDisplay.svelte`
- [Metrics chart](https://github.com/pallab-js/r-utm/blob/main/src/lib/components/Chart.svelte): `src/lib/components/Chart.svelte`
- [Metrics store](https://github.com/pallab-js/r-utm/blob/main/src/lib/stores/metrics.ts): `src/lib/stores/metrics.ts`

### Tauri commands

- [App commands](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/lib.rs): `src-tauri/src/lib.rs`

### VM runtime

- [VM configuration](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/config.rs): `src-tauri/src/vibe_core/config.rs`
- [QEMU launcher](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/launcher.rs): `src-tauri/src/vibe_core/launcher.rs`
- [QMP client](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/qmp.rs): `src-tauri/src/vibe_core/qmp.rs`
- [VM monitoring](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/monitor.rs): `src-tauri/src/vibe_core/monitor.rs`
- [Disk snapshots](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/storage.rs): `src-tauri/src/vibe_core/storage.rs`

### Host support

- [CPU allocation](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/cores.rs): `src-tauri/src/vibe_core/cores.rs`
- [Kernel boot](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/kernel.rs): `src-tauri/src/vibe_core/kernel.rs`
- [Security utilities](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/security.rs): `src-tauri/src/vibe_core/security.rs`
- [Command limiter](https://github.com/pallab-js/r-utm/blob/main/src-tauri/src/vibe_core/rate_limiter.rs): `src-tauri/src/vibe_core/rate_limiter.rs`

### Other components

- **VM operator**
- **QEMU**
- **qemu-img**

## Connections

- VM operator → VM management: manages VMs (evidence: `README.md`)
- App commands → VM configuration: validates config (evidence: `src-tauri/src/lib.rs`)
- App commands → QEMU launcher: launches QEMU (evidence: `src-tauri/src/lib.rs`)
- App commands → Command limiter: rate limits (evidence: `src-tauri/src/lib.rs`)
- App commands → QMP client: controls VM (evidence: `src-tauri/src/lib.rs`)
- QEMU launcher → Security utilities: validates paths (evidence: `src-tauri/src/vibe_core/launcher.rs`)
- QEMU launcher → QEMU: spawns (evidence: `src-tauri/src/vibe_core/launcher.rs`)
- Disk snapshots → qemu-img: runs commands (evidence: `src-tauri/src/vibe_core/storage.rs`)
