Skip to content

Releases: devnullvoid/pvetui

v1.0.9

12 Nov 15:27
e031e2a

Choose a tag to compare

πŸš€ 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/exec and /agent/exec-status endpoints
    • 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
  • 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, and last -n 20 to the default Linux VM and LXC whitelists for faster troubleshooting.

Fixed

  • Guest Agent Response Parsing: Fixed critical bug where Proxmox returns exited field 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 install builds now report the correct semantic version by using debug.ReadBuildInfo() to extract module metadata instead of hard-coding "vdev".

v1.0.8

05 Nov 02:00
7ef881a

Choose a tag to compare

πŸš€ 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 install and 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

22 Oct 03:15
1d7b7e2

Choose a tag to compare

πŸš€ Release v1.0.7

Added

  • Pluggable feature architecture for UI contributions with runtime registration and lifecycle management.
  • Community Scripts functionality extracted into the community-scripts plugin; enable it via the plugins.enabled setting.
  • 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 DefaultRetryCount constant 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.enabled list instead of falling back to legacy defaults.
  • Cache implementation now uses json.RawMessage to 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/k navigation 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 channel panics 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

13 Sep 18:26
552570c

Choose a tag to compare

πŸš€ 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() and GetVMPendingOperation() 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.go created to house all VM migration functionality
    • Moved Functions: showMigrationDialog() and performMigrationOperation() relocated from dialogs.go
    • Clean Separation: Migration logic now properly separated from general dialog functions
    • Better Maintainability: Migration features can now be developed and maintained independently

v1.0.5

25 Aug 01:21
39f6b21

Choose a tag to compare

πŸš€ 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-tui must be renamed to pvetui. 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_ to PVETUI_ (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
  • 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 (--config instead 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

v1.0.4

19 Aug 13:56

Choose a tag to compare

πŸš€ 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

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

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

09 Aug 20:09

Choose a tag to compare

πŸš€ 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

08 Aug 03:48

Choose a tag to compare

πŸš€ Release 1.0.2

Fixed

  • Profile Switching: Separate Active vs Default profile
    • Introduced a non-persisted runtime ActiveProfile distinct from the persisted default_profile in 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.
  • 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-wizard flag and config-wizard subcommand work consistently
    • Fixed issue where config wizard wouldn't load existing profiles when no config file specified
  • 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 QueueUpdateDraw calls 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
  • Shell Connection Deadlock: Fixed deadlock when opening shell to VM without IP address
    • Added showMessageSafe function that doesn't use QueueUpdateDraw to avoid deadlocks
    • Updated shell functions to use CreateErrorDialog for errors and showMessageSafe for 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
  • 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

06 Aug 12:38

Choose a tag to compare

πŸš€ 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 refreshVMDataAndTasks function 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 @latest command (git submodule limitation)
    • Renamed misleading install-remote Makefile target to install-go for 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
  • 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

  1. Download the appropriate archive for your platform
  2. Extract the binary: tar -xzf proxmox-tui-*.tar.gz (or unzip for Windows)
  3. Make executable (Unix): chmod +x proxmox-tui-*
  4. Run: ./proxmox-tui-* --help

v1.0.0

03 Aug 04:38

Choose a tag to compare

πŸš€ 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_colors and color_scheme options
    • 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_colors config option controls whether to use terminal palette or custom colors.
    • See docs/THEMING.md for full details and configuration examples.
  • 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

  1. Download the appropriate archive for your platform
  2. Extract the binary: tar -xzf proxmox-tui-*.tar.gz (or unzip for Windows)
  3. Make executable (Unix): chmod +x proxmox-tui-*
  4. Run: ./proxmox-tui-* --help