Releases: devnullvoid/pvetui
Releases Β· devnullvoid/pvetui
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.
v1.0.6
π Release v1.0.6
Added
- VM Action Protection System: Comprehensive protection mechanism to prevent VM actions while operations are pending
- Context Menu Protection: Lifecycle actions (start, stop, restart, delete, migrate) are hidden when VMs have pending operations
- Keyboard Shortcut Protection: Shell, VNC, and context menu shortcuts are blocked for VMs with pending operations
- Visual Indicators: Pending VMs show dimmed status with special indicators
- Menu Title Updates: Context menu titles show current pending operation status (e.g., "Guest Actions (Starting)")
- Snapshot Protection: Create, delete, and rollback snapshot operations are blocked while VMs have pending operations
- Configuration Protection: VM config editing and storage resizing are blocked during pending operations
- Migration Protection: Migration dialog is blocked for VMs with pending operations
- Refresh Protection: Individual VM refresh and global refresh are blocked while operations are pending
- Auto-Refresh Protection: Auto-refresh cannot be enabled while there are pending operations
- Helper Functions: Added
CanVMPerformActions()andGetVMPendingOperation()for easier pending state checking - Thread-Safe Operations: All pending state operations use proper mutex protection for concurrent access
Fixed
- VM Pending State Timing: Fixed visual glitch where deleted VMs would briefly return to "normal" state before being removed
- Delete Operations: VMs now stay in pending state until refresh completes and they're removed from the UI
- Migration Operations: VMs stay in pending state until refresh shows them in their new location
- Consistent Behavior: All operations now maintain pending state until refresh operations complete
- Better User Experience: Users can see VMs remain in pending state until operations truly complete
Dependencies
- Core Dependencies: Updated key dependencies to latest versions
- github.com/stretchr/testify: bumped from 1.10.0 to 1.11.1
- github.com/rivo/tview: bumped to 0.42.0
- github.com/spf13/cobra: bumped from 1.9.1 to 1.10.1
- golang.org/x/term: bumped from 0.34.0 to 0.35.0
- github.com/gdamore/tcell/v2: bumped from 2.8.1 to 2.9.0
- Build Dependencies: Updated build and CI dependencies
- golang: bumped from 1.24.5-alpine to 1.25.1-alpine
- actions/setup-go: bumped from 5 to 6
- actions/checkout: bumped from 4 to 5
Refactored
- VM Migration Code Organization: Moved migration-specific functions to dedicated file
- New File:
vm_migration.gocreated to house all VM migration functionality - Moved Functions:
showMigrationDialog()andperformMigrationOperation()relocated fromdialogs.go - Clean Separation: Migration logic now properly separated from general dialog functions
- Better Maintainability: Migration features can now be developed and maintained independently
- New File:
v1.0.5
π Release v1.0.5
MAJOR BREAKING CHANGE
- Project Renamed to pvetui
- Rename was necessary in order to remain compliant with Proxmox trademark
- Old paths referencing
proxmox-tuimust be renamed topvetui. For example:mv ~/.config/proxmox-tui ~/.config/pvetui - Additional migration steps:
- Update any shell aliases or scripts referencing the old binary name
- Update any systemd service files or cron jobs
- Update any documentation or bookmarks referencing the old project name
- Environment Variables: Change prefix from
PROXMOX_toPVETUI_(e.g.,PROXMOX_HOSTβPVETUI_HOST)
- Impact: This change affects configuration paths, binary names, environment variables, and all project references
Added
- 32-bit builds: Add official 32-bit binaries by request in #25
- Linux:
linux/386 - Windows:
windows/386 - Included in GoReleaser config and local Makefile release target
- Linux:
- DEB/RPM Packages: Traditional Linux package formats automatically generated by GoReleaser
Documentation
- README Updates: Fixed CLI argument conventions and improved documentation
- Updated all CLI examples to use correct double-dash format (
--configinstead of-config) - Added comprehensive CLI reference table with all available flags and short versions
- Fixed broken anchor links in navigation for better user experience
- Replaced problematic emojis with compatible ones for consistent anchor generation
- Updated project title to 'TUI for Proxmox Virtual Environment' for trademark compliance
- Added trademark disclaimer to clarify non-affiliation with Proxmox Server Solutions GmbH
- Enhanced demo section with both GIF (GitHub compatible) and WebM (high quality) options
- Fixed CLI examples throughout all documentation files for consistency
- Updated all CLI examples to use correct double-dash format (
v1.0.4
π Release v1.0.4
Added
- Guest name editing: Added ability to change QEMU VM names and LXC container hostnames from the config page
- QEMU VMs: Edit the "name" field which updates the VM display name
- LXC containers: Edit the "hostname" field which updates the container hostname
- Real-time title updates show the new name as you type
- Changes are saved to Proxmox and reflected immediately in the UI
- Input validation prevents invalid hostname characters (underscores, spaces, special chars)
- Validates hostname format (no leading/trailing hyphens, proper length limits)
- Fixed UI refresh issue with professional polling approach that verifies API changes before refreshing
- Added loading indicators during API propagation delay for better user experience
- Enhanced header component with ShowWarning method for better user feedback
- Refactored polling functionality into dedicated function for improved maintainability
- Fixed race condition by polling both config and cluster resources endpoints to ensure complete propagation
- Cross-platform config and cache paths: Added native support for Windows config/cache directories
- Windows: Config in
%APPDATA%/proxmox-tui, Cache in%LOCALAPPDATA%/proxmox-tui - macOS: Uses XDG-style paths (
~/.config/proxmox-tui,~/.cache/proxmox-tui) for consistency with other TUI applications - Linux: Maintains existing XDG support (
~/.config/proxmox-tui,~/.cache/proxmox-tui) - Maintains backward compatibility with existing XDG functions
- Environment variables still override platform defaults when set
- Windows: Config in
Breaking Changes
- Windows users only: Existing config files in XDG-style paths need to be moved to new platform-specific locations
- Windows: Move from
~/.config/proxmox-tui/to%APPDATA%/proxmox-tui/ - macOS/Linux: No changes required - existing paths continue to work
- The application will automatically use the new paths on first run after this update
- Windows: Move from
Fixed
- Community Scripts: returning from installation no longer blanks the screen. The selector now closes before refresh and a brief post-resume delay ensures stable UI restore.
- Data Refresh: new containers/VMs created by community scripts are shown immediately without restarting. After install we trigger a hard refresh (cache cleared) and the manual refresh rebuilds the guest list from fresh cluster data.
- Header: eliminated brief spinner flash that could reappear after success/error messages.
- Manual Refresh stability: VM list now rebuilt strictly from cluster resources; filtering preserved across consecutive refreshes; removed VM details flicker and selection jump by stabilizing selection and suppressing programmatic callbacks during list rebuild.
- VM delete selection fallback: after deleting a VM, selection now moves to the first remaining VM and the details panel updates accordingly; clears details when the list becomes empty.
- Manual Refresh optimization: refactored complex refresh logic into separate functions for better maintainability; reduced UI update calls and improved incremental node enrichment; fixed regression where VM list would become empty after refresh due to enriched nodes not preserving VM data from original cluster resources.
v1.0.3
π Release v1.0.3
Added
- Guest power actions: Added Shutdown (graceful), Stop (force), and Reset (hard, QEMU-only) alongside Restart/Start in the guest context menu, with clear confirmations and shortcuts.
Fixed
- Windows: Saving profiles could fail with "The system cannot find the path specified"
- Ensure config directory creation uses OS-agnostic path handling when saving from the config/profile wizards and menu actions.
- Fixes saving when adding/editing profiles and when setting default profile on Windows.
- Windows: Locally built binaries sometimes failed to start
- Align local Windows builds with release artifacts by disabling CGO and using baseline CPU target.
- Scoped compatibility flags to Windows/amd64 only to avoid affecting other platforms.
- UI: Reduce noisy page removal errors in logs
- Remove pages only when present to avoid benign "Failed to remove β¦ page" errors.
v1.0.2
π Release 1.0.2
Fixed
- Profile Switching: Separate Active vs Default profile
- Introduced a non-persisted runtime
ActiveProfiledistinct from the persisteddefault_profilein config. - Switching profiles in the UI now updates only the active profile; the default indicator and config file are not overwritten.
- UI header shows the active profile, while the profiles menu star correctly marks the persisted default.
- Validation prefers the active profile when set, falling back to the default profile.
- Introduced a non-persisted runtime
- VNC Profile Switching: Fixed VNC sessions not updating when switching connection profiles
- VNC service now properly closes all existing sessions when switching profiles
- Ensures new VNC connections use the updated client connection
- Prevents VNC sessions from trying to connect to old servers after profile changes
- Maintains session management integrity across profile switches
- VNC Browser Opening on Linux: Fixed VNC connection issues when xdg-open is not available
- Added detection for missing xdg-open command before attempting to open browser
- Shows helpful error dialog with shortened VNC URL when browser cannot be opened automatically
- Implements URL forwarding system: shortened URLs (e.g.,
http://localhost:45167/vnc-forward) automatically redirect to full VNC sessions - Uses scrollable text area for long VNC URLs to prevent UI overflow and improve readability
- Improved dialog positioning and width to properly display long URLs without truncation
- Enhanced button focus and keyboard handling (Enter/Escape) for proper dialog dismissal
- Clarifies that the VNC server is still running and ready for connection
- Prevents confusing situation where VNC server starts but browser doesn't open
- Provides clear instructions for manual connection with the VNC URL
- Especially important for WSL and minimal Linux distributions that don't include xdg-open
- Config Wizard Theme Integration: Fixed config wizard to use the same theme colors as the main application
- Config wizard now applies custom theme configuration before setting tview styles
- Ensures consistent visual appearance between main app and config wizard
- Fixed input field colors to match the default theme (black instead of blue)
- Applied to both standalone config wizard and embedded profile wizard
- Config Wizard Loading Issues: Fixed config wizard to properly load existing configuration files
- Fixed config wizard to load from default locations (
~/.config/proxmox-tui/config.yml) - Added profile resolution and application logic to config wizard flow
- Ensured both
--config-wizardflag andconfig-wizardsubcommand work consistently - Fixed issue where config wizard wouldn't load existing profiles when no config file specified
- Fixed config wizard to load from default locations (
- Profile Wizard Validation: Fixed profile wizard to properly recognize filled authentication fields
- Fixed profile wizard to create profile entries in memory for new profiles
- Ensured form fields and validation logic work with the same data structure
- Fixed validation to properly detect when password or token authentication is provided
- Resolved issue where profile wizard wouldn't recognize filled authentication information
- Profile Deletion Deadlock: Fixed deadlock when deleting connection profiles
- Removed nested
QueueUpdateDrawcalls that caused deadlocks - Fixed profile deletion modal to close properly after operation completion
- Used direct UI updates instead of queued updates to prevent deadlocks
- Ensured proper focus restoration after profile deletion operations
- Removed nested
- Shell Connection Deadlock: Fixed deadlock when opening shell to VM without IP address
- Added
showMessageSafefunction that doesn't useQueueUpdateDrawto avoid deadlocks - Updated shell functions to use
CreateErrorDialogfor errors andshowMessageSafefor info messages - Fixed issue where screen would flash without showing error message to user
- Provide clear error message explaining why connection failed and how to fix it
- Follow same pattern as VNC functions to ensure consistency and prevent deadlocks
- Added
- noVNC Extra Keys Display: Fixed broken 'extra keys' image display in embedded noVNC client
- Updated noVNC submodule from v1.6.0 to v1.6.0-11-g4cb5aa4 (11 commits ahead)
- Includes upstream fix for extra keys image display bug
- Resolves issue where extra keys button images would not display correctly
- Guest List Search Selection Mismatch: Fixed issue where selected item's details didn't match the selected item when searching/filtering
- Fixed programmatic selection not triggering VM/node changed callbacks
- Ensures details panel always shows correct information for selected item
- Applied to search filtering, selection restoration, and VM operations
- Resolves issue where details panel would show stale information after filtering
- showMessage Deadlock Prevention: Updated showMessage calls to use showMessageSafe to prevent deadlocks
- Fixed showMessage calls in button handlers, event callbacks, and goroutines
- Applied to VM config forms, snapshot operations, script selector, and connection profiles
- Prevents UI deadlocks when showing error messages from async operations
- Ensures consistent user experience without blocking the interface
v1.0.1
π Release 1.0.1
Added
- Cobra CLI Framework: Migrated from Go's standard flag package to cobra for enhanced CLI experience
- Much better help text formatting with proper descriptions and organization
- Environment variable support with automatic binding to
PROXMOX_*variables - Subcommand architecture for future extensibility (config-wizard subcommand)
- Professional CLI interface with improved error handling and validation
- Maintains 100% backward compatibility with existing functionality
- Task List Refresh: Automatically refresh tasks list when VM operations complete
- Ensures tasks created by VM operations are immediately visible
- Provides better visibility into operation progress and completion
- Applied to start/stop/restart operations
- Delete and migration operations already refresh tasks via manualRefresh()
Fixed
- Data Refresh Issues: Improved data refresh after volume resize and snapshot rollback operations
- Volume resize now shows updated volume size immediately and displays the resize task
- Snapshot rollback now shows updated VM status and displays the rollback task
- Especially important for LXC containers that get shut down after rollback
- Extracted reusable
refreshVMDataAndTasksfunction for consistent behavior - Added 2-second delay to allow Proxmox API to update config data before refresh
- Prevents UI lockup by using non-blocking goroutine for delay
- VM Selection Preservation: Fixed selection jumping during pending operations
- Preserve selected VM by ID and node instead of index position
- Fixes issue where selected guest would change during pending status
- Ensures consistent user experience during long-running operations
- Applied to VM operations (start/stop/restart) and migration operations
- Makefile Cross-Platform Build: Fixed hardcoded GOOS/GOARCH in build target (#19)
- Now builds for host platform by default instead of forcing Linux/amd64
- Allows environment variable override for cross-compilation
- Enables native development on macOS, Windows, and other platforms
- Thanks to @unclesp1d3r for the detailed report and solution
- Go Install Documentation: Fixed incorrect installation instructions and improved macOS guidance (#20)
- Removed non-functional
go install @latestcommand (git submodule limitation) - Renamed misleading
install-remoteMakefile target toinstall-gofor clarity - Added macOS Gatekeeper warning in README with direct link to troubleshooting guide
- Updated troubleshooting documentation with correct installation methods
- Thanks to @unclesp1d3r for reporting macOS Gatekeeper issues
- Removed non-functional
- First-Run Configuration Issues: Fixed app failing to launch without config file (#21)
- Fixed bootstrap flow to handle config wizard before profile resolution
- Fixed profile resolution to not assume 'default' profile when no profiles exist
- Improved onboarding flow with clear user guidance after config creation
- Ensured --config-wizard flag and config-wizard subcommand work without existing config
- Maintained full SOPS functionality for encrypted configuration support
- Thanks to @BenRachmiel for the detailed bug report and reproduction steps
π¦ Downloads
Choose the appropriate binary for your platform:
- Linux AMD64:
proxmox-tui-linux-amd64.tar.gz - Linux ARM64:
proxmox-tui-linux-arm64.tar.gz - macOS Intel:
proxmox-tui-darwin-amd64.tar.gz - macOS Apple Silicon:
proxmox-tui-darwin-arm64.tar.gz - Windows AMD64:
proxmox-tui-windows-amd64.zip - Windows ARM64:
proxmox-tui-windows-arm64.zip
π Verification
Verify your download with the provided checksums.txt file:
shasum -a 256 -c checksums.txtπ Installation
- Download the appropriate archive for your platform
- Extract the binary:
tar -xzf proxmox-tui-*.tar.gz(or unzip for Windows) - Make executable (Unix):
chmod +x proxmox-tui-* - Run:
./proxmox-tui-* --help
v1.0.0
π Release 1.0.0
Added
- Snapshot Management: Added comprehensive snapshot management for VMs and containers
- Full CRUD operations: create, delete, and rollback snapshots
- Proper API integration with Proxmox snapshot endpoints
- QEMU vs LXC support with VM state handling (QEMU only)
- Theme-consistent UI with proper keyboard navigation
- Escape key support for all dialogs and forms
- Proper handling of 'current' state display as 'NOW'
- Comprehensive error handling and user feedback
- Connection Profile Management: Added comprehensive profile management system for multiple Proxmox connections
- Profile switching, editing, and persistence with validation
- Automatic migration from legacy single-connection config
- Global Menu: Added comprehensive global menu with intuitive letter-based shortcuts
- Quit Confirmation: Added consistent quit confirmation dialog for both hotkey and menu with VNC session awareness
- Flexible Theming System: Added comprehensive theming support with automatic terminal emulator adaptation
- Semantic Color Constants: Centralized color management with semantic meaning across themes
- Terminal Theme Adaptation: Automatic adaptation to popular terminal themes (Dracula, Nord, Solarized, etc.)
- Configuration Options: Theme settings in config file with
use_terminal_colorsandcolor_schemeoptions - Documentation: Comprehensive theming guide with setup instructions for popular terminal emulators
- Zero Configuration: Works out of the box with most terminal emulators while maintaining semantic consistency
- Display Node Storage Pools: Added node storage pools to node details panel
- Added comprehensive custom theming support:
- Users can override all semantic UI colors via the config file (
theme.colors). - Supports hex codes, ANSI color names, and the special value
default. - All themeable color keys are documented in docs/THEMING.md.
use_terminal_colorsconfig option controls whether to use terminal palette or custom colors.- See docs/THEMING.md for full details and configuration examples.
- Users can override all semantic UI colors via the config file (
- Built-in themes: default, dracula, catppuccin-mocha, gruvbox, nord, rose-pine, tokyonight, solarized, kanagawa, everforest. Users can select a built-in theme with theme.name in the config and override any color.
- Interactive Config Wizard and Editor:
- Added a full-screen, interactive TUI wizard for creating and editing the main config file.
- Automatically launches on first run if no config is found, or can be invoked at any time with
--config-wizard. - Pre-fills fields from existing config, validates input, and provides clear error/success feedback.
- Supports both password and token authentication, and SOPS/age-encrypted configs with opt-in re-encryption.
- All onboarding and config editing flows now use consistent, user-friendly modals and prompts.
Changed
- Major Code Refactoring: Comprehensive refactoring to improve code organization and maintainability
- Split large UI component files into focused, single-responsibility modules
- Improved separation of concerns across all UI components
- Enhanced maintainability and testability while preserving all functionality
- Logger Architecture Improvements: Enhanced logging system with better error handling and circular import resolution
- Configuration Package Split: Modularized configuration management with separate profile and file operation modules
- UI Simplification: Removed redundant Global menu hotkey from footer display since Esc opens the global menu
Fixed
- Node details panel and API now support displaying multiple storage pools per node, instead of only one. All storage pools are shown with usage stats and theming.
- FormButton Theming: Fixed FormButton styling to use proper theme colors instead of hardcoded tview.Styles colors, ensuring consistent appearance with other UI elements
- FormButton Refactoring: Refactored FormButton to embed a real tview.Button, providing proper button styling, behavior, and theme consistency
- FormButton Sizing: Fixed FormButton to properly size and center the button instead of taking up the entire width
- FormButton Alignment: Added configurable positioning options (center, left, right, custom) for FormButton alignment within forms
- GolangCI-Lint Configuration: Updated golangci-lint configuration to be compatible with newer versions, fixed GitHub Actions CI failures, and implemented conservative linting with zero errors while maintaining essential code quality checks
π¦ Downloads
Choose the appropriate binary for your platform:
- Linux AMD64:
proxmox-tui-linux-amd64.tar.gz - Linux ARM64:
proxmox-tui-linux-arm64.tar.gz - macOS Intel:
proxmox-tui-darwin-amd64.tar.gz - macOS Apple Silicon:
proxmox-tui-darwin-arm64.tar.gz - Windows AMD64:
proxmox-tui-windows-amd64.zip - Windows ARM64:
proxmox-tui-windows-arm64.zip
π Verification
Verify your download with the provided checksums.txt file:
shasum -a 256 -c checksums.txtπ Installation
- Download the appropriate archive for your platform
- Extract the binary:
tar -xzf proxmox-tui-*.tar.gz(or unzip for Windows) - Make executable (Unix):
chmod +x proxmox-tui-* - Run:
./proxmox-tui-* --help