Releases: devnullvoid/pvetui
v1.0.16
🚀 Release v1.0.16
Added
- Age Key Directory Override: Allow specifying where
.age-identityand.age-recipientare stored viaage_dir,--age-dir, orPVETUI_AGE_DIRfor shared config setups. (#72) - Tilde Expansion for Paths:
~now expands inage_dirandcache_dirvalues from config, flags, and environment variables.
Fixed
- Config Wizard Auth Validation: Read live form values at save time and validate the profile being edited to avoid stale auth errors across platforms. (#69, #70)
- Config Wizard Token Validation: Warn when only one of token ID/secret is provided so partial token input isn't silently discarded.
- Config Wizard Defaults: When launched via
--config-wizardwithout an existing config, the wizard now seeds from the default template to match onboarding behavior. (#69, #70) - Windows Config Path Handling: Default to the standard config path when launching the wizard without an existing config, and also probe XDG locations so legacy
~/.config/pvetuisetups are discovered. (#69, #70)
v1.0.15
🚀 Release v1.0.15
Added
- Backup Management: Comprehensive backup functionality for VMs and containers with visual task indicators and auto-refresh capabilities.
- Backup Performance: Optimized backup retrieval with caching and parallel storage scanning for faster loading.
- Backup UX: Added visual indicators for running backup tasks and auto-refresh when operations complete.
- Backup Navigation: Added 'Refresh' action (Ctrl+R) to Backup Manager for manual updates.
- Command Runner Descriptions: Display user-friendly descriptions for all commands to help users understand purpose before execution.
- Default Startup Group:
default_profilecan now be set to an aggregate group name so pvetui starts directly in the combined group view.
Fixed
- Backup Storage Listing: Fixed backup creation form and list by implementing proper
GetNodeStoragesAPI endpoint for accurate storage retrieval. - Backup Keyboard Handling: Whitelisted backup pages in keyboard handler to prevent global hotkey conflicts with form input.
- SOPS Group Management: Prevent unwanted re-encryption of already-encrypted configs during group operations.
- Profile Template Cleanup: Removed obsolete "work" profile from default configuration template to prevent confusion.
- Wizard Back-Tab Navigation: Restored Shift+Tab (back-tab) focus navigation in the Profile Editor and Config Wizard, including button rows.
- UI Deadlocks: Fixed deadlock issues in "Add Group" dialog and other UI components.
- Focus Management: Resolved focus loss in "Add Group" workflow and other form interactions.
- Profile/Group Name Conflicts: Startup validation now directs users to repair existing configs instead of offering to overwrite them, and UI entry points block creating groups or profiles with conflicting names.
- Config Repair Targeting: When a profile/group name conflict is detected on startup, the editor now opens the conflicting profile so it can be renamed.
- Onboarding Messaging: Startup guidance now distinguishes first-run setup from fixing an existing configuration.
- Footer Key Hints: Global menu and context menu shortcuts are now listed separately, with Esc shown for the global menu.
- Key Normalization: Ctrl+Shift+Tab normalization now preserves the Ctrl modifier across tcell versions.
Changed
- Task Polling Architecture: Decoupled task polling from App component for better separation of concerns.
v1.0.14
🚀 Release v1.0.14
Added
-
Aggregate Cluster Support: Introduced the ability to define and manage multiple Proxmox VE clusters as a single, aggregated view. Users can now:
- Configure aggregate groups within
config.ymlto combine multiple Proxmox profiles. - Switch between individual profiles and aggregate groups via the profile picker in the UI.
- Launch the application directly into an aggregate group using the
--profile="group-name"CLI flag. - View aggregated CPU, memory, storage, and task information across all connected clusters.
- Perform VM operations (start, stop, migration, etc.) on individual VMs within the aggregate view, with operations correctly routed to the respective source cluster.
- Utilize VNC and SSH shell access for VMs and nodes across aggregated clusters.
- Configure aggregate groups within
-
API spec generation: New
gen-openapiMake target andpve-openapi-gentool generate an OpenAPI 3 spec fromdocs/local/apidoc.js, making Proxmox endpoints easier to consume and keep in sync.
Fixed
- About dialog metadata: Widened the About modal so GitHub links no longer wrap/break and backfilled commit/build date when ldflags aren't provided (e.g.,
go install). - Plugin manager modal: Expanded the manage-plugins dialog further (wider center column) so long plugin descriptions stay visible.
- LXC shell via root SSH: Skip
sudowhen the profilessh_userisroot, preventing failures on Proxmox hosts without sudo and eliminating unnecessary elevation. - Community scripts navigation: Restored visible selection highlighting in the script/category lists.
- Community scripts install: Show script page link and explicit curl/bash command; installations no longer require sudo when connecting as root (fall back to
su). - Command runner SSH target: Use node IPs instead of hostnames for SSH, reducing DNS reliance.
- SSH debug visibility: Added debug logs for all SSH invocations (node/VM shells, command runner, community scripts) including user/host/command, and centralized logging to the single cache log file.
- IP address debugging (issue #56): Added comprehensive debug logging at cluster parsing, node lookup, and shell invocation stages to track IP addresses through the entire flow. Logs include string length, byte representation, and raw JSON values to help diagnose potential IP corruption issues.
- Hotkey override hook: UI components can now register a hotkey override instead of being added to the growing modal whitelist, reducing global shortcut conflicts.
- Profile add cancel: Cancelling “Add New Profile” no longer leaves a phantom
new_profileentry in the manager list. - Community scripts fetch: Script metadata now fetched concurrently (worker pool) to speed up inventory loading while respecting caching.
v1.0.13
🚀 Release v1.0.13
Added
- Enhanced Guest Search: Guest search now includes IP addresses and tags in addition to name, ID, type, status, and node name for more comprehensive filtering
Fixed
- noVNC Assets with go install: Fixed missing noVNC vendor files (pako compression library) when installing via
go installby renamingvendor/tolib/(Go's embed package excludes directories named 'vendor' by design). Theprune_novnc.shscript now automatically handles this transformation after updating the noVNC subtree from upstream. - Release packaging: Updated noVNC pako license paths in GoReleaser, RPM/DEB, and Docker release artifacts after moving
vendor/pakotolib/pako, restoring successful binary publishing. - Selection Visibility on Windows: Added reverse video attribute to selected items for better visibility on Windows Terminal with black backgrounds (Vintage, Campbell, IBM 5153 color schemes). Selected nodes/VMs now use inverted colors that work regardless of theme or terminal settings.
v1.0.12
🚀 Release v1.0.12
Added
- Command Runner Plugin: Standardized the Linux host/container/guest command sets and added richer troubleshooting helpers (process sorters,
ip route/link show, resolver dumps, etc.) plus expanded Windows networking/DNS commands so you can capture CPU, memory, and connectivity data from the same menu. - VM SSH User Override: New
vm_ssh_userconfig/flag/env option lets you specify a different SSH username for QEMU VM shells while keepingssh_userfor node/LXC access (falls back automatically when omitted).
Changed
- Command Runner Plugin: After closing the command output modal you now land back in the command list, making it much faster to run multiple commands back-to-back.
Fixed
- VM Migration Polling: Fixed migration operations to properly wait for Proxmox task completion via UPID before attempting to poll the target node, eliminating "Configuration file does not exist" errors during active migrations
- Task Completion Detection: Improved task completion detection to use the
EndTimefield instead of status string matching, ensuring all task failures (including "migration problems" and other non-standard error messages) are properly caught - Post-Operation Refresh Blocking: Fixed "Cannot refresh data while there are pending operations in progress" message appearing after successful VM operations by clearing pending state immediately after operation completion for all VM lifecycle actions (start, stop, shutdown, restart, reset, delete, and migrate)
v1.0.11
🚀 Release v1.0.11
Changed
- Guest Insights plugin now uses the full main panel dimensions so its table matches other plugin experiences.
- Tasks page table now expands to the full page width so its columns no longer appear cramped on larger terminals.
Fixed
- Startup auto-encryption now runs only when plain-text secrets are actually detected, eliminating the repeating “Encrypted sensitive fields” banner and unnecessary config rewrites.
- Non-SOPS config saves no longer duplicate the active connection at the bottom of
config.yml; sensitive-field encryption now keeps values inside their profile only.
v1.0.10
🚀 Release v1.0.10
Added
- Plaintext
password/token_secretvalues in non-SOPS configs are now auto-encrypted on startup, so sensitive fields never linger in cleartext on disk once you've successfully connected.
Changed
- Replaced the demo-oriented guest list plugin with a "Guest Insights" experience featuring a sortable/filterable table, jump-to-guest navigation, and on-demand metric refreshes so node actions are actually useful during day-to-day ops.
- Cluster status view now recognizes single-node installs, showing a sane 1/1 node count and a "Quorate: N/A" message instead of a scary "No" status.
v1.0.9
🚀 Release v1.0.9
Added
-
Command Runner Plugin - QEMU VM Support: Execute whitelisted commands on QEMU VMs via guest agent
- Commands execute via
/nodes/{node}/qemu/{vmid}/agent/execand/agent/exec-statusendpoints - Support for templated commands with parameters (e.g.,
systemctl status {service}) - 'C' keyboard shortcut on VMs with guest agent enabled and running
- Expanded VM command whitelist:
uptime,df -h,free -h,systemctl status,journalctl,ps aux,ip addr show - Polling logic to wait for command completion with proper timeout handling
- API client adapter to bridge plugin VM struct with full API client types
- Commands wrapped in
["/bin/sh", "-c", "command"]for shell feature support
- Commands execute via
-
Command Runner Plugin - OS-Aware VM Commands: Detect QEMU guest operating systems and show Linux shell or Windows PowerShell command lists automatically.
-
Command Runner Plugin - Expanded Linux/LXC Utilities: Added
journalctl -n 50,systemctl list-units --type=service --state=running,systemctl list-unit-files --state=enabled,who, andlast -n 20to the default Linux VM and LXC whitelists for faster troubleshooting.
Fixed
- Guest Agent Response Parsing: Fixed critical bug where Proxmox returns
exitedfield as integer (0/1) but code attempted to parse as boolean, causing infinite polling loop and "Invalid parameter 'pid'" errors on second poll - Version Detection:
go installbuilds now report the correct semantic version by usingdebug.ReadBuildInfo()to extract module metadata instead of hard-coding "vdev".
v1.0.8
🚀 Release v1.0.8
Changed
- Switched noVNC integration from a git submodule to a git subtree rooted at internal/vnc/novnc, ensuring full compatibility with
go installand other Go tooling. - All noVNC assets are now tracked directly in the repository. The update process is now documented in the README, and updating to new versions uses
git subtree pull.
v1.0.7
🚀 Release v1.0.7
Added
- Pluggable feature architecture for UI contributions with runtime registration and lifecycle management.
- Community Scripts functionality extracted into the
community-scriptsplugin; enable it via theplugins.enabledsetting. - Demo "guest list" plugin that adds a node action presenting running guests in a modal.
- LRU (Least Recently Used) cache eviction with configurable size limits to prevent unbounded memory growth.
- Configurable API retry count via
DefaultRetryCountconstant for easier tuning. - Manage Plugins dialog in the global menu to toggle plugins, persist configuration changes, and flag the required restart.
Changed
- Plugins are now disabled by default; update configuration to opt into optional features such as community scripts.
- Configuration files now honour the
plugins.enabledlist instead of falling back to legacy defaults. - Cache implementation now uses
json.RawMessageto eliminate double JSON marshaling/unmarshaling overhead. - FileCache now implements LRU eviction with doubly-linked list for efficient cache management.
- Manage Plugins dialog list now supports Vim-style
j/knavigation keys for faster keyboard control.
Fixed
- Allow post-operation refreshes to run by clearing VM pending state before triggering automatic data reloads after lifecycle actions.
- Removed potential password exposure from authentication debug logs.
- Fixed race condition in
AuthManager.GetValidToken()method with improved locking pattern. - Added HTTP request timeouts to all API methods (30-second default) to prevent indefinite hangs.
- BadgerDB goroutine leak fixed with proper cleanup channel for background garbage collection.
- Badger cache close routine is now idempotent to avoid
close of closed channelpanics during integration tests. - Lock file handling vulnerability fixed with proper PID validation to prevent cache corruption.
- File permissions in test files changed from 0o644 to 0o600 for better security.