Proxmox Desktop is a native Windows client for Proxmox VE. It gives quick access to all your virtual machines and LXC containers across a cluster, without going through the WebGUI — directly from your Windows desktop.
Built with WPF and Material Design, using an MVVM architecture (CommunityToolkit) and a fully async HTTP client with automatic retry.
- 🖥️ VM/LXC Dashboard — Grid or list view of all machines with real-time status, CPU%, RAM%, uptime
- 🌐 Multi-server — Connect several Proxmox clusters at once and see them side by side
- 📊 Stats bar — Total / Running / Stopped / VMs / LXC at a glance
- 🗂️ Server & node sidebar — Filter by cluster or node with a single click
- 🏷️ Proxmox tags — Shown on each card, click a tag to filter
- 🧭 Sorting — By name, VMID, CPU, RAM, status or uptime
- 🕑 Activity log — Side panel recording power actions, state changes and errors
- 🔍 Search — Filter by name, VMID, node or server
- 🖥️ Integrated console — NoVNC, xTermJS and SPICE (Virt-Viewer)
- ⚡ Power control — Start / Shutdown / Reboot / Suspend / Hibernate / Force Stop / Reset
- 🔐 Dual authentication — Classic login + TOTP, or Proxmox API Token
- 🔔 Windows notifications — Native toast on VM state changes
- ⌨️ Keyboard shortcuts —
F5refresh ·Ctrl+Fsearch ·Escclear - 🔄 Auto-refresh — Configurable interval, ticket renewed automatically every 90 min
- 🌙 Dark / Light theme — Toggle in one click, remembered between sessions
| Login | Dashboard | VM Card |
|---|---|---|
| Component | Version | Link |
|---|---|---|
| Windows | 10 (build 17763+) or 11 | — |
| WebView2 Runtime | Latest (pre-installed on Windows 11) | microsoft.com/edge/webview2 |
| Virt-Viewer + UsbDk (SPICE only) | Latest | spice-space.org |
.NET runtime is bundled. No separate .NET installation required — the app is self-contained.
- Download the latest
.zipfrom the Releases page - Extract anywhere
- Run
ProxmoxDesktop.exe
git clone https://github.com/Kofysh/Proxmox-Desktop.git
cd "Proxmox-Desktop/Proxmox Desktop"
dotnet build -c ReleaseEvery push to master and every pull request automatically triggers a build. If it succeeds, a build artifact (ProxmoxDesktop-win-x64) is uploaded and available for 7 days under the Actions tab — no tag needed.
Releases are created three ways:
Option 1 — Automatic on version bump (recommended):
Bump <InformationalVersion> in Proxmox Desktop/ProxmoxDesktop.csproj, commit and merge to master. The Release workflow reads the version, and if no v<version> tag exists yet, it builds, zips and publishes the GitHub Release automatically. Pushing master without changing the version is a no-op, so it never spams releases.
Option 2 — Git tag (from your machine):
git tag v2.2.0
git push origin v2.2.0Option 3 — Manual trigger (from GitHub UI):
- Go to Actions → Release
- Click Run workflow
- Enter the tag name (e.g.
v2.2.0) and confirm
Tags containing -beta or -rc are automatically marked as pre-releases.
On first launch, fill in:
| Field | Description | Example |
|---|---|---|
| Server | Proxmox IP or hostname | 192.168.1.10 |
| Port | API port (default 8006) | 8006 |
| Username | Proxmox user | root |
| Realm | Selected from the list | pam |
| Password | Password + TOTP if enabled | — |
| Skip SSL | For self-signed certificates | ✓ homelab |
Or via API Token:
PVEAPIToken=user@realm!tokenid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Credentials are saved to %AppData%\ProxmoxDesktop\config.json. The token secret is encrypted using Windows DPAPI.
For a dedicated account with minimal rights:
| Permission | Usage |
|---|---|
VM.Audit |
List and display VMs |
VM.Console |
Console access (NoVNC, xTermJS, SPICE) |
VM.PowerMgmt |
Power control |
Proxmox-Desktop/
├── Proxmox Desktop/ # Main WPF project
│ ├── Api/
│ │ ├── IApiClient.cs # Interface (mockable for tests)
│ │ ├── ApiClient.cs # Async HTTP client + retry
│ │ ├── ServerInfo.cs # Connection record
│ │ ├── Internal/ # Internal PVE response types
│ │ └── Models/ # MachineData, NodeData, LoginResult...
│ ├── Config/
│ │ ├── AppConfig.cs # Strongly-typed config
│ │ └── ConfigurationService.cs # JSON persistence + DPAPI
│ ├── Console/
│ │ └── SpiceLauncher.cs # Virt-Viewer launcher
│ ├── Controls/
│ │ ├── MachineCard.xaml # VM/LXC card
│ │ └── StatsBar.xaml # Dashboard stats bar
│ ├── Converters/ # StatusToBrush, BytesToReadable...
│ ├── Helpers/ # VisualTreeHelperExtensions
│ ├── Services/
│ │ └── NotificationService.cs # Native Windows Toast
│ ├── ViewModels/
│ │ ├── LoginViewModel.cs
│ │ └── MainViewModel.cs
│ ├── Views/
│ │ ├── LoginWindow.xaml
│ │ ├── MainWindow.xaml
│ │ └── ConsoleWindow.xaml
│ ├── App.xaml
│ └── ProxmoxDesktop.csproj
├── Screenshots/
├── Resources/
├── ProxmoxDesktop.sln
└── .github/workflows/
├── build.yml # Build + artifact on every push / PR
└── release.yml # Release on v*.*.* tag or manual trigger
Tech stack:
- UI: WPF + MaterialDesignThemes 5.1
- Architecture: MVVM — CommunityToolkit.Mvvm 8.4
- Web console: WebView2
- HTTP:
HttpClientfully async/await + retry - Notifications:
Microsoft.Toolkit.Uwp.Notifications - Serialization:
System.Text.Json - Secrets: Windows DPAPI
- Proxmox API Token support
- CPU% / RAM% metrics on each card
- Filter / search by name or VMID
- Group by node
- Windows Toast notifications
- Dark / Light theme
- Multi-server support (multiple Proxmox clusters)
- List view in addition to grid view
- Proxmox tags displayed on cards
- Action history / logs
- Bulk power actions on multiple machines
- Per-VM resource graphs (history)
Contributions are welcome. To propose a feature or report a bug:
- Open an Issue
- Fork the repo and create a
feature/nameorfix/namebranch - Submit a Pull Request targeting
master
Forked and rewritten from sakakun/Proxmox-Desktop (original WinForms app by Matthew Bate).