Skip to content

Releases: devnullvoid/pvetui

v1.3.0

21 Mar 20:27
8afbd72

Choose a tag to compare

🚀 Release v1.3.0

Added

  • Command Runner: Custom Commands: The Command Runner plugin now exposes a "Custom Command..." entry at the top of the command menu for all target types (host, LXC container, QEMU VM). Users can type any non-interactive command and execute it directly without it needing to be on the whitelist. After a successful run, pressing w on the result screen promotes the command into the session whitelist and inserts it at the top of the command list immediately — no close/reopen required. Commands run without a PTY; sudo requiring a password will fail fast with a clear error, as will interactive programs.

  • CLI Subcommands: pvetui can now be used as a non-interactive CLI tool in addition to launching the TUI. Running any subcommand bypasses the TUI entirely, making pvetui composable in scripts and AI agent workflows.

    • pvetui nodes list — list all cluster nodes with status and resource metrics.
    • pvetui nodes show <node> — detailed view of a single node.
    • pvetui guests list — list all VMs and LXC containers with optional --node, --status, and --type filters.
    • pvetui guests show <vmid> — detailed view of a single guest.
    • pvetui guests start|stop|shutdown|restart <vmid> — lifecycle operations returning a UPID.
    • pvetui guests exec <vmid> <command> — execute a shell command inside a running guest. QEMU VMs use the guest agent (no SSH to the guest required), with automatic PowerShell wrapping on Windows. LXC containers use pct exec over SSH to the Proxmox node (ssh_user must be configured). Supports --timeout.
    • pvetui tasks list — list recent cluster tasks with --recent N (default 20).
    • --output / -o persistent flag selects json (default, structured stdout) or table (human-readable).
    • All subcommands respect --profile and work transparently with aggregate group profiles (fan-out queries across all member nodes).
    • No TUI startup banners are emitted when a subcommand is active.
    • Errors are written as JSON to stderr; the process exits non-zero on failure.

v1.2.1

14 Mar 20:54
0ee1a5d

Choose a tag to compare

🚀 Release v1.2.1

Fixed

  • Community Scripts Metadata Source: Switched the Community Scripts plugin from the stale archive fallback to the newly exposed public PocketBase metadata API at db.community-scripts.org, restoring up-to-date script listings while keeping install script execution on community-scripts/ProxmoxVE.
  • Community Scripts Development Script Labeling: Community Scripts entries now indicate when a script is in development and sourced from the community-scripts/ProxmoxVED dev repository.

v1.2.0

14 Mar 17:45
9073afd

Choose a tag to compare

🚀 Release v1.2.0

Added

  • Storage Browser Navigation: Added a first-class Storage page with its own configurable shortcut (Alt+4 by default), footer/help integration, node-scoped storage browsing, content filtering, and storage refresh controls.
  • Storage Content Acquisition: Added storage-level download actions for URL-based ISO/template/import downloads and OCI image pulls from the Storage page.
  • Guest Creation Flows: Added initial node/global creation flows for VMs and LXCs, including VM creation from ISO-based installers and LXC creation from templates.

Fixed

  • Storage Browser Actions: Added storage-content context actions for deleting ISO/template/snippet/backup entries and restoring backups directly from the Storage page, while removing the redundant Storage Browser entry from the Global menu.
  • Community Scripts Metadata Source: Temporarily restored Community Scripts plugin metadata loading by switching from the removed upstream frontend JSON path to the archived community-scripts/ProxmoxVE-Frontend-Archive metadata source while upstream stabilizes a replacement for the new website architecture.

v1.1.0

08 Mar 22:24
5ac3b32

Choose a tag to compare

🚀 Release v1.1.0

Added

  • Ansible Toolkit Plugin: Added a new opt-in ansible plugin with integrated toolkit workflows for generating inventory from loaded Proxmox nodes/guests (YAML or INI, compact/expanded styles, optional custom inventory_vars), previewing/saving inventory, running ansible -m ping, executing ansible-playbook with reusable form state, and providing an SSH setup guide. Includes plugin settings for default user/password/key path, limit behavior, and default Ansible extra arguments.

Fixed

  • Startup Profile Chooser Default Handling: When default_profile is unset, startup now correctly prompts for profile/group selection even if a profile is literally named default, and non-interactive launches now return a clear error instead of exiting successfully without starting the app.
  • Template Guest Handling: Template VMs/CTs are now labeled as templates in the guest list and Guest Details, no longer appear as ordinary stopped guests for lifecycle UX, and are excluded from start-oriented context-menu and batch-action flows.

v1.0.20

28 Feb 09:31
f8edc54

Choose a tag to compare

🚀 Release v1.0.20

Added

  • Guest Network Config Editor: Added an “Edit Network Interfaces” action in guest configuration with a dedicated interface editor (bridge/VLAN/rate/firewall plus VM/CT-specific fields), including LXC DHCP/Static IP assignment toggle and LXC nameserver/searchdomain fields, writing back to Proxmox netX config entries on save.
  • Cluster Group Mode (HA Failover): Added per-group group_settings with mode: cluster so a group can connect through one active profile and automatically fail over to the next healthy candidate.
  • Group Mode Controls in Profiles UI: Added a mode selector to the Edit Group dialog and a cluster mode marker in the Connection Profiles list.

Fixed

  • Guest Details Description Consistency: The Description row now always appears in Guest Details and shows N/A when a guest description is empty; for stopped guests, details now hydrate description from config when available.

  • Running Guest CPU Metric Stability: Running guests now display 0.0% CPU instead of transient N/A when APIs briefly return invalid non-finite CPU values after restart.

  • Guest Selection Snap-Back After Config Save Refresh: Preserved any user-initiated list selection changes made during in-flight refreshes so completion no longer forces selection back to the pre-refresh guest/node.

  • Transient CPU N/A After Guest Restart: Sanitized non-finite numeric values from API responses during single-guest refreshes so running guests no longer briefly show CPU as N/A when metrics momentarily return NaN/Inf after restart.

  • Tasks Panel Focus Freeze: Fixed an immediate freeze when tabbing from Task History to Active Operations by keeping task table cells selectable and avoiding a tview table selection loop.

  • Cluster Failover Refresh Re-entrancy: Triggered failover refresh asynchronously to avoid nested QueueUpdateDraw callback paths.

  • Single Guest Refresh IP Staleness: Fixed per-guest refresh so running guests (including LXC containers after network/VLAN changes) update IP information without requiring a full cluster refresh.

v1.0.19

22 Feb 03:32
53d34c0

Choose a tag to compare

🚀 Release v1.0.19

Added

  • Vim-Style List Navigation: Added gg (top) and G (bottom) navigation in focused Nodes, Guests, and Tasks lists/tables.
  • Guest Multi-Select + Batch Actions: Added Space-based guest multi-selection and batch context-menu actions so you can queue operations across multiple selected guests.
  • Task Queue Throughput Control: Added a global in-progress concurrency limit so queued operations are processed without overloading the API/task polling path.
  • Queued Task Cancellation: Added support for canceling queued tasks before they enter the running state.
  • Advanced Guest Filter Modal: Added a Guests-page advanced filter modal (default Ctrl+f, configurable via key_bindings.advanced_guest_filter) with structured criteria for status, type, node, and tag matching, while preserving combined text-search + advanced filtering across refreshes.

Fixed

  • Release Workflow Social Announcements: Prevented Mastodon announcement failures from breaking GoReleaser runs by handling social posting in the non-blocking release announcement script step.
  • Community Script Install on Fish Shells: Forced remote script installer commands to execute under /bin/bash -lc so node accounts using fish as default shell can install community scripts without shell syntax errors.
  • Task Panel Focus Stability: Prevented a Tasks-page freeze when tabbing between Task History and Active Operations by avoiding layout rebuilds during active task refreshes and tightening pane focus switching logic.
  • Latest golangci-lint Compatibility: Updated affected code paths to satisfy current gosec/staticcheck rules (log taint handling, URL validation hardening for community script metadata fetches, and fmt.Fprintf formatting fixes), keeping local and CI lint runs aligned.
  • Global Menu Defaults: Esc is now the primary global menu key by default, while global_menu remains configurable as an optional additional shortcut.
  • Global Menu Unbind Support: key_bindings.global_menu: "" now correctly disables the additional global-menu shortcut instead of silently reverting to the default.
  • Task Keybind Configurability: toggle_task_panel and task_stop_cancel can now be customized like other key bindings.
  • Help Modal Keybinding Layout: Reorganized help sections so task controls and page-specific actions are grouped more clearly.
  • Back Navigation Consistency: Standardized back/close handling so Backspace works alongside Escape in Command Runner, Snapshot Manager, and Backup Manager flows.
  • Context Menu Placement: Node/Guest context menus are now anchored near the focused list selection instead of always centered, keeping details panes visible while menus are open.

v1.0.18

15 Feb 03:36
cbd68dc

Choose a tag to compare

🚀 Release v1.0.18

Added

  • Async Task Queue System: Introduced a queued background task system for VM operations with task panel visibility controls, UPID tracking, improved keyboard/focus behavior, and safer non-blocking UI execution flow.
  • Profile/Group CLI Listing: Added --list-profiles to print configured connection profiles and aggregate groups (including key connection details and memberships) and exit, making it easier to pair with --profile for direct startup selection.
  • QEMU Guest Agent Toggle in VM Config Editor: Added a checkbox to VM Edit Configuration so the QEMU guest agent can be enabled/disabled directly from the TUI.

Changed

  • Nix Flake Source Handling: flake.nix now uses src = self for buildGoModule to reduce repeated source copying and improve local nix build/nix run performance.

Fixed

  • Guest Insights Plugin ID Compatibility: Renamed the plugin identifier to guest-insights while keeping demo-guest-list as a backward-compatible alias so existing configs continue to load without changes.
  • Form Label Readability: Standardized form field labels to use HeaderText color across VM/task/wizard dialogs for improved readability in terminal themes where default secondary text appears too dim.

v1.0.17

01 Feb 16:45
c10e043

Choose a tag to compare

🚀 Release v1.0.17

Added

  • Node Disk SMART Information: Node details now display disk health status and SMART data for all attached disks, including disk type (SSD/HDD), size, model, and health status (PASSED/FAILED).
  • System Update Notifications: Node details now show available system package updates with version information, displaying up to 5 pending updates with a count of any additional updates.
  • Icon Toggle: Added multiple ways to control icons/emojis throughout the UI. Icons are enabled by default. To disable: use --show-icons=false CLI flag, PVETUI_SHOW_ICONS=false environment variable, or show_icons: false in YAML config. (#75)
  • Guest Tags: Added editable tag list for VM/LXC configuration, using a semicolon-separated tag field in the Edit Configuration form. (#76)
  • SSH Jump Host Support: Added SSH jump host (bastion host) configuration for accessing Proxmox environments through an intermediate SSH server. Configure via config wizard, CLI flags (--ssh-jumphost-addr, --ssh-jumphost-user, --ssh-jumphost-keyfile, --ssh-jumphost-port), environment variables (PVETUI_SSH_JUMPHOST_ADDR, PVETUI_SSH_JUMPHOST_USER, PVETUI_SSH_JUMPHOST_KEYFILE, PVETUI_SSH_JUMPHOST_PORT), or YAML config (ssh_jump_host section). Per-profile configuration supported.
  • Release Announcements: GoReleaser now posts release announcements to Mastodon and Bluesky when the required secrets are configured.

Changed

  • Release Pipeline: Simplified GitHub token configuration by removing duplicate secret names (HOMEBREW_TAP_TOKEN, SCOOP_BUCKET_TOKEN) in favor of consistent _GITHUB_TOKEN naming.
  • Makefile Build: make build now uses the build cache by default; set REBUILD=1 to force a full toolchain rebuild.
  • Local Dev Workflow: Added build-fast and test-quick targets and cached package lists for faster local builds/tests; optional TRIMPATH=0 disables trimpath in local builds.
  • Nix Flake: Automated vendorHash updates with dependency changes to prevent hash mismatches on Nix installations. (#80, #81)

Fixed

  • UI Deadlocks: Eliminated nested QueueUpdateDraw deadlocks that occurred when displaying error messages from menu handlers by switching to direct SetFocus calls. This fixes deadlocks in various scenarios including interacting with offline nodes and group connection handling.
  • Group Connection Handling: Improved connection handling during bootstrap and resource fetching in aggregate groups to prevent UI freezes.
  • Group Mode Filter Persistence: Fixed active search filters being lost during manual refresh (Ctrl+R) and after VM operations in aggregate group mode. Filters now persist correctly across all refresh operations.
  • Group Mode VM Details Refresh: Fixed VM details panel not updating after operations (reboot, start, stop, etc.) in group mode by ensuring the correct profile-specific client is used to fetch fresh VM data.
  • Group Mode Source Profile Preservation: Fixed VMs losing their cluster association after operations in group mode, which caused "source profile not set" errors. The SourceProfile field is now preserved when refreshing individual VM data.
  • Group Mode Initial Loading Feedback: Added header loading message "Loading guest agent data" during initial startup in group mode. Previously, profile names would appear in the UI without warning after a silent enrichment process.
  • CI Cache Noise: Removed redundant Go module cache restore in CI to prevent tar "File exists" errors during lint/test/build jobs.
  • Group Mode Config Polling: Avoided cross-profile cluster resource polling when only tags change, reducing delays after saving guest configuration.
  • Header Loading Animation: Prevented overlapping loading spinners that made the header animation appear overly fast during concurrent updates.

v1.0.16

02 Jan 02:39
d1917c5

Choose a tag to compare

🚀 Release v1.0.16

Added

  • Age Key Directory Override: Allow specifying where .age-identity and .age-recipient are stored via age_dir, --age-dir, or PVETUI_AGE_DIR for shared config setups. (#72)
  • Tilde Expansion for Paths: ~ now expands in age_dir and cache_dir values 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-wizard without 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/pvetui setups are discovered. (#69, #70)

v1.0.15

22 Dec 00:15
a039b2e

Choose a tag to compare

🚀 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_profile can 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 GetNodeStorages API 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.