- feat(pbs): the PBS refresh interval is a free value from 5 minutes to 24 hours, replacing six fixed presets with a 30 minute minimum
- fix(install):
metadata.jsonis synced on every install rather than only the first;kpackagetoolruns once and the incremental sync only coveredcontents/, so the About tab kept reporting whichever version was current when the plasmoid was first installed
- feat(pbs): snapshots are listed across every namespace the token can see instead of the root namespace only; the namespace tree is enumerated once per datastore and each namespace fetched separately, so guests backed up into a non-root namespace now report their backup status (the snapshots endpoint returns only the requested namespace and rejects
max-depth, so the tree has to be walked client-side) - fix(pbs): a namespace listing that fails or returns nothing usable falls back to the root namespace rather than leaving the datastore with no snapshots, covering tokens without namespace-listing privilege and PBS versions predating the endpoint
- refactor(pbs): the three tiers of in-flight PBS requests are tracked by one type (
PbsRequestTally) that drains a tier and registers the requests it spawned in the same step, so backup correlation cannot run against a partial result - refactor(pbs): backup-status key derivation moved into
ProxmoxDataUtils::backupStatusKey(); it was previously built from two independent format strings about 2000 lines apart with no test - test(pbs): coverage for namespace-response parsing (malformed rows, duplicates and empty payloads all degrading to root) and for request-tier accounting, including a datastore draining fully while another namespace listing is still outstanding
- fix(pbs): keyring entries are now identified by token identity (
pbsTokenSecret:<tokenId>@<host>:<port>) instead of host alone, so two endpoints sharing one PBS server no longer overwrite each other's secrets; PBS secrets stored before this change are not migrated and must be re-entered (oldproxmon-pbs-<host>entries are unreachable and can be removed manually with kwalletmanager) - fix(pbs): backup-status rows are now scoped by endpoint, so one PBS server holding backups for multiple Proxmox clusters no longer attributes one cluster's backup state to another cluster's VM/CT rows (requires each endpoint's PBS token to be scoped to that endpoint's datastores)
- fix(config): multi-host PBS secret stash keys on token identity (was host only) and clears each stored entry individually instead of wiping the whole stash
- fix(controller): multi-host PBS refresh iterates the validated endpoint queue, so endpoints missing a PVE host/token ID are no longer fetched for PBS
- test(pbs): regression tests for key-identity discrimination (distinct tokens/ports on a shared PBS host) and debug-log redaction of the new key format
- feat(configBehavior): add a toggle to enable/disable the stats panel, independent of power actions (defaults on; included in Backup/Restore and defaults)
- fix(VmRow/LxcRow): action-button reservation width now tracks which features are enabled, so the row tightens up instead of leaving dead space when the stats or power buttons are toggled off
- fix(console): honor configured trusted CA on VNC/LXC WebSocket connections (single-host, multi-host shared or per-endpoint), matching the API path; previously only the ticket-fetch request used it
- fix(controller): auto-retry timer now actually schedules the retry after the computed backoff (previously only the banner text was set)
- fix(controller): wire lowLatency setting through to request timeouts (10s → 5s when enabled)
- fix(main): stop killing errorMessage/retryStatusText property bindings with imperative writes (explicit propagation via Connections)
- fix(config): KCM Restore Defaults no longer enables Ignore SSL (cfg_ignoreSslDefault now matches main.xml)
- fix(controller): collapse duplicate PBS refresh at startup (cert setters routed through the existing debounce)
- chore(main): drop dead onPbsTestSucceeded/onPbsTestFailed handlers (leftover from removed PBS test button)
- fix(main): coerce host-shell visible binding to bool (silences undefined-to-bool warning at load)
- docs: sync ARCHITECTURE/developer notes with current code; drop completed multihost-models handoff; correct QtKeychain license file name (BSD-3-Clause)
- feat(configGeneral): Backup / Restore section: export all settings to a versioned JSON file and import them back with schema validation and a confirm prompt; token secrets are never exported (whitelist + serialized-output guard) and matching keychain entries are picked up automatically after Apply
- refactor(configGeneral): Default Settings now uses the same export-envelope format as Backup/Restore and captures all settings (previously a flat 6-field single-host file); legacy flat seeds are still read via a dedicated fallback (tokenSecret in them is never applied) and rewritten in the new format on next save
- refactor(main.qml): startup defaults seed applies the full validated envelope to Plasmoid.configuration (drops binding-breaking direct assignments)
- test(configportability): QML logic suite (qmltestrunner) wired into CTest covering round-trip, secret exclusion, import validation, needsSecrets detection and the legacy defaults reader
- feat(stats): add per-VM/CT stats panel: CPU/mem sparkline from RRD history (last hour, 10-minute grid) plus best-effort IP address (QEMU guest agent for VMs, /interfaces for LXC); IP anonymized in dev mode
- fix(NodeSection): add missing right margin on node card to match the VM/LXC list's scrollbar reserve
- fix(proxmoxclient): isolate task poll requests from refresh cancellation to prevent stuck busy spinner
- fix(main): add action busy guard on status change; clears spinner via checkStateChanges if onActionReply never fires
- fix(config): UI alignment and field sizing across all config tabs for consistent cross-distro rendering
- fix(configGeneral): move SSL toggles into single/multi-host sections; PBS fields hidden when disabled
- fix(configGeneral): add Delete Default button to defaults section
- fix(configBehavior): align labels and dropdowns consistently
- fix(configAppearance): fix label vertical alignment against spinboxes
- refactor(NodeSection): node header status pill → 10×10 dot; computer-symbolic → vm icon; font size bumps
- chore: remove legacy secret key candidate fallback chain
- refactor(vncclient): drop remote resize (SetDesktopSize) and desktopsize encoding
- fix(vnckeysym): recover base keysym from Qt key code when modifiers suppress text (ctrl+key)
- fix(vncclient): use explicit_bzero for ticket zeroization; null client-data slot before free to close GetPassword race
- chore(icons): update lxc/vm icons
- fix(VmRow/LxcRow): bundle JetBrains Mono for consistent cross-distro font metrics
- fix(VmRow/LxcRow): fix monospace text vertical centering
Tested on Ubuntu 26 (KDE 6.6.4), Fedora 44 (KDE 6.6.5), Manjaro (KDE 6.6.5), openSUSE Tumbleweed (KDE 6.6.5)
- fix(VmRow/LxcRow): normalize row spacing, monospace stats labels at 12px, wider containers, vertical centering
- fix(VmRow/LxcRow): add left margin to power buttons; reduce row left margin 8→4px
- fix(VmRow/LxcRow): tighten stats block (90→80px) and mem label (46→34px) to close PBS-to-stats gap
- fix(proxmoxcontroller): extend backup age display to weeks (7d+) and years (52w+)
- fix(install): checksum-based sync; skip kpackagetool re-register if already installed
- fix(configGeneral): remove notification toggle; bind via bool prop
- fix(proxmoxclient): treat task WARNINGS as non-fatal
- chore(main.qml): comment cleanup and dead code removal
- docs(README): tighten security and SSL wording
- Feat: power actions toggle: enable/disable start/stop/restart buttons per endpoint
- Fix: collapse backup status row layout when hidden (VmRow, LxcRow)
- Fix: TapHandler hitbox by setting explicit width/height on compact representation root
- LXC terminal: rework data path and add copy/paste support
- UI: SSL warning text now uses bright red; security warnings added to ignore SSL toggles
- UI: rename Console section to Features in behavior settings
- Install: extend auto-rebuild watcher to cover Qt6, libvncclient, qtermwidget6, and additional libraries
- Install: add
--no-watcherflag to skip auto-rebuild watcher setup - Build: add mold linker support
- Docs: script cleanup and security section trimmed to keychain and loopback limitation
- Docs: add LXC terminal resize reflow known limitation
- Fixed VNC crash and deadlock when closing console mid-connection
- Fixed PBS in-flight request abort on cancelAll()
- Fixed per-endpoint certificate passing to VNC/TTY proxy in multi-host mode
- Gated verbose debug logging behind developer mode
- Added VNC console and LXC terminal support
- Added PBS (Proxmox Backup Server) backup status integration
- Added per-endpoint SSL certificate support for multi-host mode
- Added tag and VMID exclusion filters for PBS
- Refactored plasmoid controller logic from QML to C++
- Added GPU-accelerated frame renderer for VNC
- Hardened secret storage and keyring handoff
- Added journalctl-based debug log capture
- Fixed multi-host notification batching
- Added PBS backup status integration
- Added tag and VMID exclusion filters for PBS
- Added PBS trusted cert config fields and error surface path
- Fixed PBS startup race condition, double-fetch, and cancelAll bugs
- Fixed PBS config reload and interval default causing breakage
- Refactored plasmoid controller logic from QML to C++
- Shifted secret, refresh, and action orchestration into C++ controller
- Hardened secret storage and keyring handoff
- Added basic appearance color controls and config tab icons
- Added per-host enable toggle for multi-host mode
- Fixed multi-host notification batching and compact time display
- Fixed action task follow-through to final success or failure
- Fixed KWallet qdbus fallback to be fully asynchronous
- Fixed keyring write confirmation before marking secrets ready
- Removed legacy plaintext secret migration paths
- Fixed multi-host key autodetect stability and label preservation
- Fixed multi-host config refresh and key migration alignment
- Fixed notification and endpoint namespace collisions
- Fixed compact CPU%, wildcard regex, and keyring error path
- Fixed verbose debug logging gated behind developer mode
- Fixed node header text overflow and empty state label centering
- Added transfer timeout for stalled connections
- Added two-click action confirmation overlay
- Added identity redaction toggle for notifications
- Added warning hint for host/token refresh issues
- Pinned VM action buttons with tooltips and hover state
- Fixed CPU/RAM label alignment
- Fixed in-flight reply handling
- Added multi-host mode with per-host enable toggle (up to 5 hosts)
- Added notification filtering with whitelist/blacklist and wildcard support
- Added KWallet auto-restore on widget re-add
- Added auto-retry with exponential backoff
- Added low latency mode for LAN setups
- Added graceful per-node failure handling
- Added two-click power action confirmation
- Fixed compact representation click area
- Fixed scrollbar gutter overlap with action buttons
- Fixed cfg_* key bindings for config persistence
- Added QtKeychain secure credential storage
- Added DBus notifier for state change notifications
- Improved HTTP error reporting
- Fixed KCM/native plugin decoupling
- Dropped plaintext secret storage
- Added compact representation with animation
- Added developer mode for verbose logging
- Added logging levels and timestamps
- Improved height calculation and layout
- Fixed icon animations
- Added Kirigami migration for Plasma 6.6.2 compatibility
- Fixed PlasmaCore.Units/Theme deprecation warnings
- Added AppArmor documentation
- Added cross-distro install script with auto dependency detection
- Added auto-update mechanism with systemd integration
- Added visual tokens and refined theming
- Added remote power actions (start, stop, reboot, suspend)
- Added KWallet/QtKeychain secure credential storage
- Added SSL certificate trust support
- Added per-node request failure tolerance
- Initial release
- Basic Proxmox VE node, VM, and LXC monitoring
- Single-host connection with API token authentication