Skip to content

Releases: devnullvoid/pvetui

v1.3.3

09 May 21:56
9554fb7

Choose a tag to compare

🚀 Release v1.3.3

Added

  • LXC/VM create: moved to node context menu: "Create VM" and "Create LXC" are no longer in the global menu. They are now only accessible from the node context menu, where the target node is already in scope.
  • LXC Edit Configuration: Swap field: New "Swap (MB)" input in the Edit Configuration modal for LXC containers, positioned below Memory. Setting swap to 0 is now correctly sent to the API (disabling swap), which the previous save path silently skipped.
  • LXC create: Nesting toggle: New "Nesting" checkbox in the LXC creation form (enabled by default) that sets features=nesting=1 on the container, allowing Docker and nested containers.
  • Storage: Template Catalog download: New "Template Catalog" option in the storage Download Content menu (available when the storage supports vztmpl). Fetches the Proxmox appliance template list (pveam available) and lets you pick a template by section (All / system / mail / turnkeylinux) and download it directly to the selected storage — equivalent to pveam download <storage> <template>.
  • Ansible plugin: env setting: New plugins.ansible.env config map for passing arbitrary environment variables (e.g. ANSIBLE_CONFIG, ANSIBLE_ROLES_PATH, ANSIBLE_HOST_KEY_CHECKING) to all ansible and ansible-playbook invocations. Configurable via General Settings in the toolkit or directly in config YAML.

Fixed

  • LXC Edit Configuration: false-positive * marker on network modal: Opening and closing the "Edit Network Interfaces" sub-form without making any changes no longer marks the parent form title with *. The comparison baseline is now normalized through the same parse→rebuild round-trip used when saving, eliminating spurious change detection caused by key-order differences in the raw API strings.
  • LXC create: privileged container creation: The unprivileged field was being sent as a JSON boolean (false), which Proxmox does not reliably accept. It is now sent as an integer (0/1) consistent with how Proxmox represents boolean-like fields internally. This fixes creation of privileged containers.
  • LXC/VM create: rootfs storage dropdown shows storages from other cluster nodes: GetNodeStorages now filters out storages not active on the queried node. Proxmox returns all cluster-configured storages from /nodes/{node}/storage but marks inaccessible ones with active=0; previously non-shared local storages from other nodes were shown in the rootfs dropdown.
  • Edit Configuration: network changes now prompt to Save: After applying changes in the "Edit Network Interfaces" sub-form, the header shows "Network settings updated — press Save to apply" and the parent form title gains a * marker as a persistent reminder that the changes are staged in memory and require pressing Save to persist to Proxmox.
  • go install version info: Build date and commit hash now show correctly in the About modal when installed via go install. Release constants are embedded in internal/version/release.go and updated automatically by the release script, serving as a fallback when ldflags and VCS metadata are unavailable.
  • Release script: make release prompt ordering: The confirmation block now renders before the y/N prompt when running under make. Previously stdout buffering caused the prompt to appear ahead of the confirmation text.
  • Release script: master sync before merge: make release now fast-forwards local master to origin/master before merging develop, preventing push rejection when CI has auto-committed to master (e.g. Nix vendorHash update) since the previous release.

v1.3.2

20 Apr 04:31
76224b9

Choose a tag to compare

🚀 Release v1.3.2

Added

  • Ansible Ad-Hoc Tasks: Expanded the ansible plugin beyond the ping preset so the toolkit can run structured ad-hoc Ansible module invocations against generated inventory, using module/module-args plus the existing scope, limit, target, and timeout controls.
  • CLI: nodes shell and guests shell: New interactive shell subcommands that open a terminal session directly from the CLI, matching the TUI's S shortcut behaviour.
    • pvetui nodes shell <node> — SSHes to a Proxmox node.
    • pvetui guests shell <vmid> — enters an LXC container via pct enter (or pct exec for NixOS containers) over SSH to the host node, or connects directly to a QEMU VM via SSH using the VM's IP address. Respects vm_ssh_user / vm_ssh_keyfile for QEMU VMs.
    • Authentication follows the standard priority: SSH agent → configured keyfile → ~/.ssh defaults.
    • Unlike the TUI, no "Press Enter to return to TUI" prompt is shown on exit.
  • CLI: Tab completion for nodes and guests: All CLI subcommands that accept a <node> or <vmid> argument now provide dynamic tab completion by querying the Proxmox API. VM completions include the guest name and type as a description (visible in zsh and fish). Requires shell completions to be active (pvetui completion <shell>).

v1.3.1

15 Apr 03:34
d4361c4

Choose a tag to compare

🚀 Release v1.3.1

Added

  • Shell Completions: pvetui completion now generates shell completion scripts for bash, zsh, fish, and PowerShell via Cobra's built-in completion support. Run pvetui completion <shell> --help for installation instructions.
  • SSH Key Configuration: Added ssh_keyfile and vm_ssh_keyfile per-profile config fields (and corresponding --ssh-keyfile / --vm-ssh-keyfile CLI flags and PVETUI_SSH_KEYFILE / PVETUI_VM_SSH_KEYFILE env vars) for specifying SSH private key paths explicitly. When no keyfile is configured, pvetui now also consults the running SSH agent (SSH_AUTH_SOCK) before falling back to standard key paths (~/.ssh/id_ed25519, id_rsa, id_ecdsa).

Fixed

  • gRPC Security Update: Upgraded indirect dependency google.golang.org/grpc from v1.79.1 to v1.79.3 to address CVE-2026-33186, an authorization bypass in HTTP/2 :path pseudo-header validation.

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.