Skip to content

Releases: devnullvoid/pvetui

v1.4.1

08 Jun 02:22
9cfca6c

Choose a tag to compare

🚀 Release v1.4.1

Added

  • Cloudsmith Linux package repository: Added release publishing for DEB/RPM packages to the public Cloudsmith OSS repository, plus README install instructions and OSS hosting attribution.
  • Ansible community Proxmox inventory: The Ansible plugin can now use a generated community.proxmox.proxmox dynamic inventory source via plugins.ansible.inventory_source: community_proxmox, deriving non-secret connection fields plus secret environment variables from the active pvetui profile so saved inventory files can be reused without writing Proxmox secrets into them.
  • Ansible bootstrap UID: Bootstrap Access can now create or update the managed Ansible user with a configured numeric UID via plugins.ansible.bootstrap.uid.
  • Application settings dialog: Added in-app editing for icon display, debug logging, cache/age directories, theme configuration, and key bindings, plus SSH key path fields in profile editing.
  • Mock-backed media generation: make screenshots, make demo, and the mock VHS E2E runner now launch pvetui against the bundled Proxmox mock API with a generated config and media fixture, making screenshot and demo regeneration reproducible without a real cluster.

Fixed

  • Settings persistence: TUI configuration saves now preserve show_icons and apply settings/profile actions to the active custom config path when one is in use.
  • Icon toggle coverage: Startup progress, onboarding, and snapshot/backup message emoji prefixes now respect show_icons, while operational status indicators and spinners remain visible.
  • Active profile SSH settings: Changes to an active profile's SSH users, key files, and jump host now apply to new SSH/plugin operations immediately without requiring profile reactivation.

v1.4.0

23 May 22:47
206c06b

Choose a tag to compare

🚀 Release v1.4.0

Added

  • CLI: guests create vm / guests create lxc: Create QEMU VMs and LXC containers from the CLI with the same field coverage as the TUI forms. Supports memory, cores, disk storage, ISO attachment, network bridge, start-after-create, and auto-assigned VMIDs (via GetNextID). For LXC, accepts a package name (e.g. debian-12-standard) and resolves it to the latest full template filename via the aplinfo catalog. Commands block until the Proxmox task completes by default; --no-wait returns the task UPID immediately.

  • CLI: guests migrate <vmid> <target-node>: Migrate a guest to another node. Mode is selected automatically (QEMU running → online, QEMU stopped → offline, LXC → restart) matching TUI behaviour; --online / --offline override for QEMU. --no-wait supported.

  • CLI: guests delete <vmid>: Delete a VM or LXC container from the CLI. Supports --purge (remove all associated storage volumes) and --force (delete even if the guest is running). Blocks until the Proxmox task completes by default; --no-wait returns the task UPID immediately.

  • CLI: storage command group: New top-level command group for storage and content management:

    • storage list [--node] — list all storages across the cluster; shows per-node rows for shared storages.
    • storage show <node> <storage> — show details for a specific storage.
    • storage content list <node> <storage> [--type] — list content items with optional type filter.
    • storage content delete <node> <storage> <volid> [--no-wait] — delete a content item.
    • storage download url <node> <storage> <url> [--filename] [--content-type] [--no-wait] — download from a URL; content type inferred from extension (.isoiso, .tar.*vztmpl, .imgimport).
    • storage download template <node> <storage> <template> [--section] [--no-wait] — download an appliance template; accepts full filename or package name with auto-resolution.
    • storage download oci <node> <storage> <reference> [--no-wait] — pull an OCI image.
    • storage restore <node> <storage> <volid> <vmid> [--confirm] [--type] [--no-wait] — restore a guest from a vzdump backup. Prints a dry-run summary without --confirm; guest type inferred from volid prefix.
    • Tab completions for <node>, <storage>, and <template> positional arguments.

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.