ovftop

module
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 31, 2026 License: MIT

README

  ______      ________ _______ ____  _____
 / __ \ \    / /  ____|__   __/ __ \|  __ \
| |  | \ \  / /| |__     | | | |  | | |__) |
| |  | |\ \/ / |  __|    | | | |  | |  ___/
| |__| | \  /  | |       | | | |__| | |
 \____/   \/   |_|       |_|  \____/|_|

A terminal UI for deploying and managing OVF/OVA virtual machines on VMware ESXi and vCenter.

Midnight-Commander-style dashboard · guided deploy wizard · one-key clone & export · zero config server required

CI Release Go Reference Go Report Card


Why OVFTOP

Deploying an OVF/OVA to ESXi or vCenter usually means one of two things: clicking through the vSphere web client's import wizard for the hundredth time, or hand-assembling an ovftool command line and hoping you remembered every --net: and --prop: flag correctly.

OVFTOP is a fast, keyboard-driven terminal UI that sits on top of VMware's own ovftool. It gives you a live, browsable inventory of your host or vCenter, a guided step-by-step deploy wizard that builds the ovftool invocation for you (and lets you review it before anything runs), and one-key clone/export for VMs and templates — all without leaving the terminal, and without standing up any kind of server or agent.

If you've used htop, btop, k9s, or lazygit, you already know how to drive this.

Features

  • Live infrastructure tree — datacenters, clusters, hosts, VMs, templates, datastores, networks, and resource pools, in a collapsible Midnight-Commander-style tree with live CPU/memory/datastore usage gauges.
  • Guided deploy wizard — a 7-step flow (Source → Metadata → Settings → Network → Advanced → Summary → Deploy) that reads the OVF's own descriptor to prompt for exactly the properties and network mappings it declares, then shows you the full ovftool command before it runs.
  • Deploy from a local file or a URL — point it at a local .ovf/.ova, or give it a download URL and it fetches the file for you first.
  • One-key clone (F5) — clone a selected VM or template to a new VM without opening a wizard.
  • One-key export (F6) — export a selected VM/template back out to a .ova file, with live progress.
  • Live deploy/export progress — streamed ovftool output with a progress bar, not just a spinner.
  • Both ESXi and vCenter — works against a standalone ESXi host or a full vCenter inventory.
  • Saved connection profiles — with credentials encrypted at rest (AES-GCM, scrypt-derived key); see Credential storage.
  • Auto-refresh — the dashboard re-polls inventory on a configurable interval (off / 1 / 2 / 5 / 10 minutes) so long sessions stay in sync.
  • Four built-in themes — Dark, Light, Dracula, Nord — cycle with one keypress from Settings.
  • Built-in help & activity log — every keybinding is one F1 away; every connect/deploy/error is logged and viewable in-app (F8).

Screens at a glance

Screen Key What it does
Dashboard Infrastructure tree + details panel + live usage gauges
Deploy wizard F4 Guided OVF/OVA import, source → summary → live progress
Clone F5 Clone the selected VM/template to a new name
Export F6 Export the selected VM/template to a .ova
Settings F7 Theme, auto-refresh interval, config/log paths
Logs F8 Scrollable view of the app's own activity log
Menu F9 Discoverable list of the actions above, plus About
Help F1 Full keybinding reference

Requirements

  • VMware's official ovftool, installed separately and on your PATH. OVFTOP drives ovftool; it doesn't replace it, bundle it, or reimplement OVF parsing. Download it from VMware/Broadcom's support portal (free registration required) and install it for your OS.

    Why isn't this in the repo? ovftool is proprietary software under VMware's own EULA — this project can't legally redistribute it. install.sh in this repo is a convenience script that installs your own downloaded copy on Linux; it doesn't fetch it for you.

  • Network access to the ESXi host or vCenter Server you want to manage, plus an account with permission to import/export/clone VMs there.

  • Linux, macOS, or Windows. A terminal with reasonable Unicode/emoji support looks best (the tree and status bar use icons as status indicators), but everything is still fully legible without it.

Installation

Grab the archive for your OS/arch from the latest release, extract it, and put the ovftop binary on your PATH:

# Linux (amd64) example — swap in your OS/arch
curl -L https://github.com/mousavi-azure/ovftop/releases/latest/download/ovftop_<version>_linux_amd64.tar.gz | tar xz
sudo install -m 0755 ovftop /usr/local/bin/ovftop

Build from source

Requires Go 1.24+.

go install github.com/mousavi-azure/ovftop/cmd/ovftop@latest

or clone and build locally:

git clone https://github.com/mousavi-azure/ovftop.git
cd ovftop
go build -o ovftop ./cmd/ovftop

Install ovftool

# Linux, using this repo's helper against your own downloaded copy
sudo ./install.sh /path/to/VMware-ovftool-<version>-lin.x86_64.zip

On macOS/Windows, run VMware's own installer for ovftool.

Quick start

ovftop
  1. On first run you'll land on the connect screen — press n to add a connection profile (ESXi host or vCenter Server, hostname, credentials).
  2. On connect, OVFTOP discovers the full inventory and drops you on the dashboard.
  3. Navigate the tree with /, expand/collapse with Enter/Space.
  4. Press F4 to deploy an OVF/OVA, F5 to clone a selected VM/template, F6 to export one, F1 any time for the full keybinding reference.

Configuration & credential storage

OVFTOP stores its config, log, and encrypted credential vault in your OS's standard per-user config directory (e.g. ~/.config/ovftop on Linux, ~/Library/Application Support/ovftop on macOS):

File Contents
config.yaml Saved connection profiles (no secrets)
vault.enc AES-GCM–encrypted saved passwords
vault.key / vault.salt Local key material for the vault (0600 permissions)
ovftop.log Recent activity log, viewable in-app via F8

By default the vault's encryption key is a random 32-byte key generated once and stored locally with 0600 permissions — this protects against casual copying of the config directory, not against another process running as the same OS user. If you'd rather derive the key from a passphrase you supply on every launch instead, set:

export OVFTOP_MASTER_PASSWORD="your passphrase"

Building a release locally

Releases are built with GoReleaser from .goreleaser.yaml. To build all platform archives locally without publishing:

goreleaser release --snapshot --clean

Contributing

Issues and PRs are welcome. Before opening a PR:

go build ./...
go vet ./...
go test ./...
gofmt -l .   # should print nothing

Acknowledgements

Built with Bubble Tea, Lip Gloss, and Bubbles from Charm, govmomi for the vSphere API client, and Cobra for the CLI shell. Drives — but does not include — VMware's official ovftool.

License

MIT © 2026 Mostafa Mousavi — mousavi.dev

"OVF Tool" and "vSphere" are trademarks of VMware/Broadcom. This is an independent, unaffiliated project.

Directories

Path Synopsis
cmd
ovftop command
Command ovftop is a terminal UI for deploying and managing OVF/OVA virtual machines on VMware ESXi and vCenter via ovftool.
Command ovftop is a terminal UI for deploying and managing OVF/OVA virtual machines on VMware ESXi and vCenter via ovftool.
internal
config
Package config handles persisted application settings: connection profiles, preferences, and the encrypted credential vault.
Package config handles persisted application settings: connection profiles, preferences, and the encrypted credential vault.
deploy/ovf
Package ovf extracts OVF/OVA package metadata by running `ovftool --machineOutput <source>` in probe mode (no target) and parsing its structured output, rather than hand-rolling an OVF/tar/manifest parser — ovftool already handles both .ovf and .ova (and even remote URLs) authoritatively, so we lean on it for descriptor extraction the same way we lean on it for the deploy itself.
Package ovf extracts OVF/OVA package metadata by running `ovftool --machineOutput <source>` in probe mode (no target) and parsing its structured output, rather than hand-rolling an OVF/tar/manifest parser — ovftool already handles both .ovf and .ova (and even remote URLs) authoritatively, so we lean on it for descriptor extraction the same way we lean on it for the deploy itself.
logging
Package logging provides a simple append-only file logger for the application's own activity (connections, deployments, errors), viewable from the TUI's Logs screen (F8).
Package logging provides a simple append-only file logger for the application's own activity (connections, deployments, errors), viewable from the TUI's Logs screen (F8).
tui
Package tui wires the individual screens (connection wizard, main dashboard, deploy wizard, logs, menu) into a single Bubble Tea program, owning the active vSphere session and dispatching background work (connect, discover, refresh) as commands.
Package tui wires the individual screens (connection wizard, main dashboard, deploy wizard, logs, menu) into a single Bubble Tea program, owning the active vSphere session and dispatching background work (connect, discover, refresh) as commands.
tui/screens/connect
Package connect implements the connection wizard screen: a list of saved ESXi/vCenter profiles plus a form for adding, editing, and authenticating against new ones.
Package connect implements the connection wizard screen: a list of saved ESXi/vCenter profiles plus a form for adding, editing, and authenticating against new ones.
tui/screens/deploy
Package deploywizard implements the OVF/OVA deploy wizard: pick a source (URL download or local file browser), read its metadata, choose target settings and network mappings, configure OVF properties, review the generated ovftool command, and watch it run live.
Package deploywizard implements the OVF/OVA deploy wizard: pick a source (URL download or local file browser), read its metadata, choose target settings and network mappings, configure OVF properties, review the generated ovftool command, and watch it run live.
tui/screens/export
Package export implements the F6 Export screen: pick a local destination folder, then export the selected VM/template to an OVA file there via ovftool (the mirror image of the Deploy wizard's import flow).
Package export implements the F6 Export screen: pick a local destination folder, then export the selected VM/template to an OVA file there via ovftool (the mirror image of the Deploy wizard's import flow).
tui/screens/help
Package help implements the F1 Help screen: a static, scrollable reference for every keybinding in the app.
Package help implements the F1 Help screen: a static, scrollable reference for every keybinding in the app.
tui/screens/logs
Package logs implements the F8 Logs screen: a scrollable view of the application's own recent activity (connections, deployments, errors).
Package logs implements the F8 Logs screen: a scrollable view of the application's own recent activity (connections, deployments, errors).
tui/screens/main
Package dashboard implements the Midnight-Commander-style main screen: a top info bar, a left infrastructure tree, a right details panel, and a bottom F-key status bar.
Package dashboard implements the Midnight-Commander-style main screen: a top info bar, a left infrastructure tree, a right details panel, and a bottom F-key status bar.
tui/screens/menu
Package menu implements the F9 pull-down menu screen: a discoverable list of app-wide actions (view logs, switch theme, refresh, disconnect, quit) plus an inline About panel.
Package menu implements the F9 pull-down menu screen: a discoverable list of app-wide actions (view logs, switch theme, refresh, disconnect, quit) plus an inline About panel.
tui/screens/settings
Package settings implements the F7 Settings screen: theme selection, auto-refresh cadence, and read-only display of on-disk config locations.
Package settings implements the F7 Settings screen: theme selection, auto-refresh cadence, and read-only display of on-disk config locations.
tui/theme
Package theme defines the application's color palettes and the derived lipgloss styles shared by every screen and component.
Package theme defines the application's color palettes and the derived lipgloss styles shared by every screen and component.
version
Package version holds the application's semantic version (https://semver.org): MAJOR.MINOR.PATCH.
Package version holds the application's semantic version (https://semver.org): MAJOR.MINOR.PATCH.
vsphere
Package vsphere wraps govmomi to connect to an ESXi host or vCenter Server and discover its inventory (datacenters, clusters, hosts, datastores, networks, resource pools, VMs and templates).
Package vsphere wraps govmomi to connect to an ESXi host or vCenter Server and discover its inventory (datacenters, clusters, hosts, datastores, networks, resource pools, VMs and templates).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL