An open API service indexing awesome lists of open source software.

https://github.com/devnullvoid/pvetui

Terminal UI for Proxmox VE
https://github.com/devnullvoid/pvetui

go proxmox proxmox-ve pve terminal-ui tui virtualization

Last synced: 16 days ago
JSON representation

Terminal UI for Proxmox VE

Awesome Lists containing this project

README

          

pvetui



A Terminal User Interface For Proxmox Virtual Environment


Features โ€ข
Screenshots โ€ข
Installation โ€ข
Configuration โ€ข
Usage โ€ข
CLI โ€ข
Theming โ€ข
VNC Console


GitHub release
License
Go Version
Build Status
Total Downloads
Ask DeepWiki

## ๐Ÿš€ Features

- **Lightning Fast**: Intelligent caching for responsive performance
- **Complete Management**: VMs, containers, nodes, and cluster resources
- **Multi-Profile Support**: Manage multiple Proxmox connections with profile switching
- **Automatic Migration**: Legacy configs seamlessly migrate to modern profile-based format
- **Secure Authentication**: API tokens or password-based auth with automatic renewal
- **Integrated Shells**: SSH directly to nodes, VMs, and containers
- **VNC Console Access**: Embedded noVNC client with automatic authentication
- **Plugin System**: Opt-in extensions including the Community Scripts installer; enable via Manage Plugins dialog or config file
- **Modern Interface**: Vim-style navigation with customizable key bindings
- **Flexible Theming**: Automatic adaptation to terminal emulator color schemes
- **Comprehensive Documentation**: Detailed guides for configuration, theming, and development
- **Proxmox API Browser**: Interactive Proxmox VE API reference at [devnullvoid.github.io/pvetui-openapi](https://devnullvoid.github.io/pvetui-openapi/)
- **Group Mode (multi-cluster)**: Combine multiple Proxmox profiles into one unified view with routed actions per cluster
- **CLI Subcommands**: Use `pvetui` non-interactively from scripts or AI agent workflows โ€” list/show nodes, guests, and tasks; create and migrate VMs/LXCs; manage storage content, download templates and OCI images, and restore backups

## ๐Ÿ“ธ Screenshots


Node Management

Node Management - Real-time cluster monitoring and control


Guest Management

Guest Management - VM and container operations

**๐Ÿ“ธ See [docs/SCREENSHOTS.md](docs/SCREENSHOTS.md) for a complete showcase of all available screenshots and interface features**

## ๐Ÿ“ฆ Installation

### Quick Start

### **Install via Go** (Go 1.24+)

> **Recommended for Go users**: pvetui now supports one-command install using Go modules!

```bash
go install github.com/devnullvoid/pvetui/cmd/pvetui@latest
```

**From Pre-compiled Binaries:**

1. Download from [Releases](https://github.com/devnullvoid/pvetui/releases)
2. Extract and run: `./pvetui`

**Linux DEB/RPM Packages:**

Prebuilt `.deb` and `.rpm` packages are published with each GitHub release. Download the package for your architecture from [Releases](https://github.com/devnullvoid/pvetui/releases), then install it with your system package manager:

```bash
# Debian/Ubuntu
sudo apt install ./pvetui_*_linux_amd64.deb

# Fedora/RHEL/openSUSE
sudo dnf install ./pvetui_*_linux_amd64.rpm
```

**Linux Package Repository (Cloudsmith):**

```bash
# Debian/Ubuntu
curl -sLf 'https://dl.cloudsmith.io/public/devnullvoid/pvetui/cfg/setup/bash.deb.sh' | sudo bash
sudo apt update
sudo apt install pvetui

# Fedora/RHEL/openSUSE
curl -sLf 'https://dl.cloudsmith.io/public/devnullvoid/pvetui/cfg/setup/bash.rpm.sh' | sudo bash
sudo dnf install pvetui
```

[![OSS hosting by Cloudsmith](https://img.shields.io/badge/OSS%20hosting%20by-cloudsmith-blue?logo=cloudsmith&style=flat-square)](https://cloudsmith.com)

Package repository hosting is graciously provided by [Cloudsmith](https://cloudsmith.com) as free hosting for open-source projects.

> **macOS Users**: You may encounter Gatekeeper warnings with pre-compiled binaries. See [Troubleshooting Guide](docs/TROUBLESHOOTING.md#-macos-issues) for solutions including bypassing the warning or building from source.

### Package Managers

**Arch Linux (AUR):**
[![pvetui-bin on AUR](https://img.shields.io/aur/version/pvetui-bin?label=pvetui-bin)](https://aur.archlinux.org/packages/pvetui-git/)
[![pvetui on AUR](https://img.shields.io/aur/version/pvetui?label=pvetui)](https://aur.archlinux.org/packages/pvetui/)
[![pvetui-git on AUR](https://img.shields.io/aur/version/pvetui-git?label=pvetui-git)](https://aur.archlinux.org/packages/pvetui-git/)

```bash
# Binary package (recommended)
yay -S pvetui-bin

# Build release package from source
yay -S pvetui

# OR build from source
yay -S pvetui-git
```

**macOS (Homebrew Cask):**

```bash
# Install directly from the tap (brew will auto-clone devnullvoid/homebrew-pvetui)
brew install --cask devnullvoid/pvetui/pvetui
```

**Windows (Scoop):**

```bash
# Add the bucket
scoop bucket add pvetui https://github.com/devnullvoid/scoop-pvetui

# Install pvetui
scoop install pvetui
```

**From Source:**

```bash
git clone https://github.com/devnullvoid/pvetui.git
cd pvetui
make install # Build and install from source
# or: make install-go # Install via Go toolchain
```

## ๐Ÿ”ง Configuration

### First Run & Interactive Config Wizard

- On first run, the app will offer to create and edit a config file in a user-friendly TUI wizard
- Launch the wizard anytime with `--config-wizard`
- Create and manage multiple connection profiles with validation
- Edit, validate, and save your config (supports SOPS-encrypted files)
- Only one authentication method (password or token) per profile is allowed
- All errors and confirmations are shown in clear, interactive modals

### Configuration Format

pvetui uses a modern multi-profile configuration format that supports multiple Proxmox connections:

```yaml
profiles:
default:
addr: "https://your-proxmox-host:8006"
user: "your-user"
realm: "pam"
# Choose one authentication method:
password: "your-password" # Method 1: Password auth
# OR
token_id: "your-token-id" # Method 2: API token (recommended)
token_secret: "your-secret"
insecure: false
ssh_user: "your-ssh-user"
vm_ssh_user: "vm-login-user" # Optional: overrides ssh_user for QEMU VM shells
ssh_keyfile: "~/.ssh/id_ed25519" # Optional: SSH private key (defaults to SSH agent / standard paths)
vm_ssh_keyfile: "~/.ssh/id_vm" # Optional: key for QEMU VM shells (defaults to ssh_keyfile)
ssh_jump_host: # Optional: configure a bastion host for SSH
addr: "jump.example.com"
user: "jumpuser"
keyfile: "/path/to/jump.key"
port: 2222
groups:
- all-servers

work:
addr: "https://work-proxmox:8006"
user: "workuser"
token_id: "worktoken"
token_secret: "worksecret"
realm: "pam"
insecure: false
ssh_user: "workuser"
vm_ssh_user: "work-vm-user"
ssh_jump_host:
addr: "work-jump.example.com"
port: 2222
groups:
- all-servers

default_profile: "all-servers" # Can be a profile name or a group name
# Optional per-group behavior:
group_settings:
all-servers:
mode: aggregate # default: combine all member profiles
prod-ha:
mode: cluster # connect to one healthy profile with automatic failover
debug: false
show_icons: true # Controls decorative TUI and startup/status message emoji prefixes
```

`vm_ssh_user` is optional; when omitted, pvetui reuses `ssh_user`. Set it if your Proxmox host SSH account differs from the accounts you use to log into QEMU guests so VM shells work without duplicating profiles. `ssh_keyfile` is optional; when omitted, pvetui uses the running SSH agent (`SSH_AUTH_SOCK`) if available, then falls back to `~/.ssh/id_ed25519`, `~/.ssh/id_rsa`, and `~/.ssh/id_ecdsa`. `vm_ssh_keyfile` follows the same logic and falls back to `ssh_keyfile`. `ssh_jump_host` is optional and lets you route SSH connections through a bastion host when your Proxmox nodes or VMs are not directly reachable.

Guest tags can be edited from the VM/LXC **Edit Configuration** form using a semicolon-separated list (for example: `prod;monitoring;db`).

### Plugins

pvetui includes an opt-in plugin system for optional features. Plugins are **disabled by default** and must be explicitly enabled.

#### Built-in Plugins

- **`ansible`**: Global-menu Ansible toolkit with pvetui YAML/INI inventory generation, optional `community.proxmox.proxmox` dynamic inventory support, ad-hoc module execution, playbook execution, and SSH setup guidance
- **`community-scripts`**: Adds the popular Community Scripts installer to node context menus
- **`command-runner`**: Execute whitelisted commands on Proxmox hosts via SSH (requires SSH key setup)
- **`guest-insights`** *(legacy alias: `demo-guest-list`)*: Full guest insights modal (filter/sort/jump-to-guest)

#### Enabling Plugins

**Method 1: Manage Plugins Dialog (Recommended)**

1. Press `g` to open the Global Menu
2. Select **Manage Plugins**
3. Use arrow keys or `j`/`k` to navigate the plugin list
4. Press `Space` to toggle plugins on/off
5. Press `Enter` to save changes
6. Restart pvetui for changes to take effect

**Method 2: Configuration File**

Add plugin IDs to your config file:

```yaml
plugins:
enabled:
- "ansible"
- "community-scripts"
- "command-runner"
- "guest-insights" # Guest Insights plugin (legacy alias: demo-guest-list)
```

The Ansible plugin defaults to pvetui's generated inventory. Advanced users can set
`plugins.ansible.inventory_source: community_proxmox` to generate a temporary
`.proxmox.yml` source for the `community.proxmox.proxmox` inventory plugin. pvetui
derives non-secret connection fields (`url`, `user`, `token_id`) and password/token
secret environment variables from the active profile when possible, so saved
community inventory files can be reused outside pvetui without writing Proxmox
secrets into them.

**๐Ÿ“– For plugin development and advanced details, see [docs/PLUGINS.md](docs/PLUGINS.md)**

### Profile Management

The built-in profile manager allows you to:

- **Switch between profiles** (e.g., home, work, development)
- **Add new profiles** with different Proxmox connections
- **Edit existing profiles** with validation
- **Delete profiles** with confirmation
- **Set default profile** for automatic connection

Access the profile manager through the global menu.

### Group Mode (multi-cluster)

Combine several profiles into a named group to see a unified cluster view (CPU/mem/storage/tasks/guests). Actions are routed to each guestโ€™s source profile/cluster; migration targets are limited to the VMโ€™s own cluster.

Launch directly into a group:

```bash
pvetui --profile="my-group"
```

Notes:

- Group names must not conflict with profile names (validation enforced).
- Refreshes fetch fresh data from all member profiles; pending states are tracked per source profile.
- Migrations stay within the VMโ€™s original cluster; groups of standalone nodes will show โ€œNo other online nodes available.โ€

#### Group Modes

Groups support two operating modes via `group_settings`:

- `aggregate` (default): combines resources from all profiles in the group.
- `cluster`: active/passive behavior for HA-style setups. pvetui connects through one healthy profile at a time and fails over automatically.

Example:

```yaml
group_settings:
all-servers:
mode: aggregate
prod-ha:
mode: cluster
```

### API Token Setup (Recommended)

1. In Proxmox web interface: **Datacenter โ†’ Permissions โ†’ API Tokens**
2. Click **Add** โ†’ Set user (e.g., `root`) โ†’ Enter token ID
3. Copy the generated **Token ID** and **Secret** to your config

> Note: Proxmox displays the Token ID in the form `user@realm!tokenid` (for example: `root@pam!mytoken`). When configuring pvetui, split those parts into separate fields:

```yaml
profiles:
default:
addr: "https://your-proxmox-host:8006"
user: "root" # from user@realm!tokenid โ†’ user
realm: "pam" # from user@realm!tokenid โ†’ realm
token_id: "mytoken" # from user@realm!tokenid โ†’ tokenid
token_secret: "YOUR_SECRET"
```

### Encrypted Configuration

Supports [SOPS](https://github.com/getsops/sops) encrypted config files. Point to an encrypted YAML file with `--config` and it will decrypt automatically.

Not using SOPS yet? pvetui now auto-detects cleartext `password` and `token_secret` values in plain YAML configs and rewrites the file with encrypted blobs (while updating the running config) as soon as you connect successfully. That keeps legacy configs safe without forcing you to adopt a new workflow.

**๐Ÿ“– For detailed configuration options, key bindings, theming, and advanced features, see [docs/CONFIGURATION.md](docs/CONFIGURATION.md)**

**๐Ÿ“š Complete documentation is available in the [docs/](docs/) folder**

## ๐Ÿ”Œ Usage

```bash
# Auto-detects config at ~/.config/pvetui/config.yml
./pvetui

# Or specify custom config
./pvetui --config /path/to/config.yml
```

Default paths:

- Linux/macOS config: `~/.config/pvetui/config.yml`
- Linux/macOS cache: `~/.cache/pvetui`
- Windows config: `%APPDATA%/pvetui/config.yml`
- Windows cache: `%LOCALAPPDATA%/pvetui`

Windows legacy fallback:

- Existing `~/.config/pvetui/config.yml` is still auto-detected.
- Existing `~/.cache/pvetui` is still used if the newer `%LOCALAPPDATA%/pvetui` path does not exist.

### Command Line Options

| Flag | Short | Environment Variable | Description |
|------|-------|----------------------|-------------|
| `--config` | `-c` | n/a | Path to YAML config file |
| `--output` | `-o` | n/a | CLI subcommand output format: `json` (default) or `table` |
| `--profile` | `-p` | n/a | Connection profile to use (overrides default_profile) |
| `--no-cache` | `-n` | n/a | Disable caching |
| `--version` | `-v` | n/a | Show version information |
| `--config-wizard` | `-w` | n/a | Launch interactive config wizard and exit |
| `--list-profiles` | | n/a | List available connection profiles/groups and exit |
| `--addr` | | `PVETUI_ADDR` | Proxmox API URL |
| `--user` | | `PVETUI_USER` | Proxmox username |
| `--password` | | `PVETUI_PASSWORD` | Proxmox password |
| `--token-id` | | `PVETUI_TOKEN_ID` | Proxmox API token ID |
| `--token-secret` | | `PVETUI_TOKEN_SECRET` | Proxmox API token secret |
| `--realm` | | `PVETUI_REALM` | Proxmox realm |
| `--insecure` | | `PVETUI_INSECURE` | Skip TLS verification |
| `--api-path` | | `PVETUI_API_PATH` | Proxmox API path |
| `--ssh-user` | | `PVETUI_SSH_USER` | SSH username |
| `--vm-ssh-user` | | `PVETUI_VM_SSH_USER` | QEMU VM SSH username (defaults to ssh-user) |
| `--ssh-keyfile` | | `PVETUI_SSH_KEYFILE` | SSH private key file (defaults to SSH agent / standard paths) |
| `--vm-ssh-keyfile` | | `PVETUI_VM_SSH_KEYFILE` | SSH private key for QEMU VM connections (defaults to ssh-keyfile) |
| `--ssh-jumphost-addr` | | `PVETUI_SSH_JUMPHOST_ADDR` | SSH jump host address |
| `--ssh-jumphost-user` | | `PVETUI_SSH_JUMPHOST_USER` | SSH jump host user |
| `--ssh-jumphost-keyfile` | | `PVETUI_SSH_JUMPHOST_KEYFILE` | SSH jump host identity file |
| `--ssh-jumphost-port` | | `PVETUI_SSH_JUMPHOST_PORT` | SSH jump host port |
| `--debug` | | `PVETUI_DEBUG` | Enable debug logging |
| `--cache-dir` | | `PVETUI_CACHE_DIR` | Cache directory path |
| `--age-dir` | | `PVETUI_AGE_DIR` | Age key directory path |
| `--show-icons` | | `PVETUI_SHOW_ICONS` | Show decorative icons/emojis in UI and startup/status messages |

**Environment Variables**: All flags can also be set via environment variables with `PVETUI_` prefix (e.g., `PVETUI_ADDR`, `PVETUI_USER`).

### Key Bindings

| Key | Action | Key | Action |
|-----|--------|-----|--------|
| `h j k l` | Navigate | `Alt+1/2/3` | Switch views |
| `Enter` | Select | `[ ]` | Previous/Next view |
| `s` | SSH Shell | `v` | VNC Console |
| `m` | Context Menu | `g` | Global Menu |
| `/` | Search | `a` | Auto-refresh |
| `?` | Help | `q` | Quit |

Customize keys via the `key_bindings` section in your config. This includes task-panel controls (`tasks_toggle_queue`, `task_stop_cancel`) in addition to global navigation/actions. See [docs/CONFIGURATION.md#key-bindings](docs/CONFIGURATION.md#key-bindings) for all options (including macOS `Opt` key support).

## ๐Ÿ–ฅ๏ธ CLI Subcommands

> **AI Agent / Claude Code skill available:** `npx skills add github:devnullvoid/pvetui` โ€” installs the [`pvetui-cli` skill](skills/pvetui-cli/SKILL.md) so agents know how to use these commands.

`pvetui` doubles as a non-interactive CLI tool. Running any subcommand skips the TUI entirely, making it easy to use in shell scripts, cron jobs, and AI agent workflows.

All subcommands share the same config file, `--profile` selection, and group/aggregate profile support as the TUI. Output defaults to JSON (stdout); pass `--output table` for human-readable output. Errors are written as JSON to stderr and the process exits non-zero on failure.

### Nodes

```bash
# List all cluster nodes
pvetui nodes list
pvetui nodes list --output table

# Show a specific node
pvetui nodes show pve01
```

### Guests (VMs and Containers)

```bash
# List all guests
pvetui guests list
pvetui guests list --output table

# Filter by node, status, or type
pvetui guests list --node pve01 --status running --type qemu

# Show a specific guest
pvetui guests show 100

# Lifecycle operations (returns UPID)
pvetui guests start 100
pvetui guests shutdown 100 # graceful ACPI shutdown
pvetui guests stop 100 # force power-off
pvetui guests restart 100
pvetui guests delete 100 # permanently delete (guest must be stopped)
pvetui guests delete 100 --purge # also remove from backup/replication jobs

# Execute a command in a QEMU VM via the guest agent (no SSH to the guest needed)
pvetui guests exec 100 "uptime"
# Execute a command in an LXC container via pct exec over SSH to the node
pvetui guests exec 200 "df -h" --timeout 60s

# Open an interactive shell (node SSH or container/VM shell)
pvetui nodes shell pve01
pvetui guests shell 100

# Create a VM (auto-assigns VMID if omitted)
pvetui guests create vm --node pve01 --name myvm --disk-storage local-zfs --disk-size 32
pvetui guests create vm --node pve01 --name myvm --disk-storage local-zfs --disk-size 32 \
--memory 4096 --cores 4 --iso local:iso/debian-12.iso --start

# Create an LXC container (accepts package name or full template filename)
pvetui guests create lxc --node pve01 --hostname myct --rootfs-storage local-zfs \
--template debian-12-standard
pvetui guests create lxc --node pve01 --hostname myct --rootfs-storage local-zfs \
--template debian-12-standard --memory 1024 --swap 512 --start

# Migrate a guest to another node (mode selected automatically)
pvetui guests migrate 100 pve02
pvetui guests migrate 100 pve02 --no-wait # return UPID immediately
```

`exec` automatically wraps commands in `/bin/sh -c` on Linux guests and `powershell.exe` on Windows guests. The guest must be running with the QEMU guest agent active.

Commands that produce Proxmox tasks (`create`, `migrate`) block until completion by default. Pass `--no-wait` to return the task UPID immediately.

### Storage

```bash
# List storages (all nodes, or filter to one)
pvetui storage list
pvetui storage list --node pve01 --output table

# Show a specific storage
pvetui storage show pve01 local-zfs

# List content in a storage (optional type filter: iso, vztmpl, backup, images)
pvetui storage content list pve01 local
pvetui storage content list pve01 local --type iso

# Delete a content item
pvetui storage content delete pve01 local local:iso/old-image.iso

# Download an ISO from a URL
pvetui storage download url pve01 local https://example.com/debian-12.iso

# Download an appliance template (package name or full filename)
pvetui storage download template pve01 local debian-12-standard
pvetui storage download template pve01 local debian-12-standard_12.7-1_amd64.tar.zst

# Pull an OCI image
pvetui storage download oci pve01 local registry.example.com/myimage:latest

# Restore a guest from a vzdump backup (dry-run without --confirm)
pvetui storage restore pve01 local local:backup/vzdump-qemu-100-2024.tar.zst 100
pvetui storage restore pve01 local local:backup/vzdump-qemu-100-2024.tar.zst 100 --confirm
```

### Tasks

```bash
# List recent cluster tasks (default: last 20)
pvetui tasks list
pvetui tasks list --recent 50 --output table
```

### Profiles

All subcommands work with `--profile` and aggregate groups:

```bash
# Use a specific profile
pvetui --profile prod guests list

# Fan out across all members of an aggregate group
pvetui --profile all-servers guests list --status running
```

### Shell Completions

`pvetui` provides shell completion scripts for bash, zsh, fish, and PowerShell via Cobra's built-in completion support.

```bash
# Fish
pvetui completion fish | source
# Persist across sessions:
pvetui completion fish > ~/.config/fish/completions/pvetui.fish

# Zsh
pvetui completion zsh > "${fpath[1]}/_pvetui"

# Bash
pvetui completion bash > /etc/bash_completion.d/pvetui
# Or for a single user:
pvetui completion bash >> ~/.bash_completion

# PowerShell
pvetui completion powershell | Out-String | Invoke-Expression
```

Run `pvetui completion --help` for full installation instructions for your shell.

## ๐ŸŽจ Theming

pvetui supports semantic theming with automatic adaptation to your terminal's color scheme.

**๐Ÿ“– For detailed theming options, built-in themes, and color customization, see [docs/CONFIGURATION.md#theming](docs/CONFIGURATION.md#theming) and [docs/THEMING.md](docs/THEMING.md)**

## ๐Ÿ“บ VNC Console Access

Built-in noVNC client provides seamless console access:

- **Zero Configuration**: Works out of the box
- **Automatic Authentication**: No separate login required
- **Universal Support**: VMs, containers, and node shells
- **Secure Proxy**: Local WebSocket proxy handles connections

**Note**: Node VNC shells require password authentication (Proxmox limitation).

**Important**: VNC ports must be opened and accessible on the connected Proxmox server. The TUI creates a local WebSocket proxy that connects to the Proxmox VNC endpoint, so ensure your Proxmox server's VNC ports are properly configured and accessible from your client machine.

## ๐Ÿ”ง Requirements

- Access to Proxmox VE cluster
- SSH access for shell functionality
- Go 1.24+ (for building from source)

## ๐Ÿ’ก Tips

- **Use SSH keys for authentication**: For best security and convenience, set up SSH key-based authentication with your Proxmox hosts. Avoid password-based SSH logins.
- **Passwordless pct access**: Add a sudoers rule on your Proxmox hosts to allow your user to run `pct enter` and `pct exec` without being prompted for a password. Proxmox VE does **not** install `sudo` by default, so either install it (and grant your non-root `ssh_user` rights) or connect as `root` so commands run without `sudo`. Example sudoers line:

```
youruser ALL=(ALL) NOPASSWD: /usr/sbin/pct enter *, /usr/sbin/pct exec *
```

### ๐Ÿ› ๏ธ Troubleshooting

Check our **[Troubleshooting Guide](docs/TROUBLESHOOTING.md)** for solutions to common problems including:

- ๐ŸŽ **macOS Gatekeeper warnings** (`zsh: killed` errors)
- ๐ŸชŸ **Windows SmartScreen** and antivirus issues
- ๐Ÿง **Linux permission** problems
- ๐Ÿ”ง **General installation** and configuration issues

## ๐Ÿณ Container Usage (Dev/Test)

Container-based runs are supported for development and testing workflows.

See [docs/DOCKER.md](docs/DOCKER.md) for Docker/Podman details.

## ๐Ÿ—บ๏ธ Features Roadmap

Planned and actively prioritized:

- **Role-aware operation mode**: Compatibility with non-admin Proxmox roles (for example, "operator"-style permissions) with clear capability detection and graceful UI fallback when actions are not allowed.

Recently shipped (may receive further refinements):

- **Template Catalog download**: Browse and download Proxmox appliance templates directly from the storage browser โ€” equivalent to `pveam available` + `pveam download`. Filter by section (system / mail / turnkeylinux) and download to any `vztmpl`-capable storage.
- **LXC improvements**: Nesting toggle (default on) and Swap field in the Edit Configuration modal; privileged container creation fixed; guest creation moved to the node context menu where the target node is already in scope.
- **Expanded guest configuration management**: Edit guest CPU, memory, swap (LXC), name/tags, start-at-boot, network interfaces (bridge, VLAN, MAC, rate limit, firewall, LXC IP config), and storage volume resizing โ€” all from the guest context menu.
- **Guest creation workflows**: Guided creation for both VMs and LXCs with node selection, auto-assigned VMID, storage/ISO/template discovery, network bridge, and safe defaults.
- **Storage management**: Dedicated Storage page (Alt+4) with nodeโ€“storage tree, content browser with type filtering (ISOs, templates, backups, snippets, disk images), URL download, OCI pull, backup restore, and content deletion.

Under evaluation (higher complexity):

- **SDN management**: Valuable but broad in scope; likely to start with read-only visibility before write operations.
- **Advanced cluster/network workflows**: Additional orchestration features that may require phased rollout to keep UX predictable in TUI.

If a roadmap item is critical for your environment, open an issue with your use case and required Proxmox version.

## ๐Ÿค Contributing

Contributions welcome! Check the [issues page](https://github.com/devnullvoid/pvetui/issues).

## ๐Ÿ“ License

MIT License - see [LICENSE](LICENSE) file for details.

This repository vendors assets from [noVNC](https://github.com/novnc/noVNC) under MPL-2.0, BSD, SIL OFL, MIT, and CC BY-SA licenses. Refer to [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md) for a full breakdown and include that file plus `internal/vnc/novnc/LICENSE.txt` (and sub-licenses) with any binary release artifacts to satisfy attribution and redistribution requirements.

## โ„ข๏ธ Trademark Notice

**Proxmoxยฎ** is a registered trademark of Proxmox Server Solutions GmbH in the EU, the U.S., and other countries. This project is not affiliated with, endorsed by, or sponsored by Proxmox Server Solutions GmbH. "Proxmox" is used solely to describe compatibility with Proxmox Virtual Environment software.

---

### Upgrading Embedded noVNC

This repository includes the noVNC HTML/JS client under `internal/vnc/novnc` via [git subtree](https://www.atlassian.com/git/tutorials/git-subtree). To upgrade to a newer noVNC version, run:

```bash
git subtree pull --prefix=internal/vnc/novnc https://github.com/novnc/noVNC.git --squash
```

Replace `` with the desired version. After updating, prune unnecessary files if you only need the built assets. Commit the results to share the update with all users.