Skip to content

Repository files navigation

vLens icon

vLens

Native macOS vCenter/ESXi inventory — inspired by RVTools, with features RVTools doesn't have.

macOS 14+ Swift 6 Go/govmomi Latest release License: GPLv3


vLens pulls vCenter/ESXi inventory into a fast, native SwiftUI window — every VM, host, datastore, network, and license, sortable and searchable, exportable to CSV or XLSX. If you've used RVTools on Windows, the data will look familiar; the app won't. No .NET, no VM/Wine, no Windows box just to run a reporting tool.

It covers essentially everything RVTools does (29 tabs total, 25 of RVTools' 26 documented tabs — only vFileInfo is missing) — but it isn't just a port. vLens adds several things RVTools doesn't have: historical performance data sampled over a time window you choose, point-in-time inventory snapshots you can compare, a one-page PDF management report, and quiet awareness of published VMware security advisories and ESXi/vCenter end-of-life dates.

Status: signed, notarized, and distributed — see Releases for a ready-to-run DMG, or Building from source below. Sparkle checks that feed automatically and offers in-app updates. Still in active development, and not yet validated against a real vCenter 7/8/9 environment (everything so far is verified against vcsim, govmomi's protocol-accurate simulator).


vLens vInfo tab, Demo Mode

Features

29 tabs vInfo, vCPU, vMemory, vDisk, vSnapshot, vTools, vNetwork, vCD, vFloppy, vUSB, vPartition, vApp, vSource, vHost, vDatastore, vCluster, vRP, vSwitch, vPort, dvSwitch, dvPort, vNic, vSC+VMK, vHBA, vMultipath, vLicense, vHealth, plus vLens' own vPerformance and Snapshots
RVTools parity Only vFileInfo (datastore file browser) is deliberately out of scope — RVTools' own docs flag it as slow and rarely used
vHealth 21 of RVTools' 24 documented health-check rules, thresholds adjustable in Preferences, re-evaluates instantly on change
Tags & Custom Attributes vSphere Tags (CIS REST Tagging API) and Custom Attributes on VM/Host/Cluster/Datastore — shown on vCluster/vDatastore, exported for all four
vPerformance (not in RVTools) Historical CPU/RAM/disk-IO usage over a time window you choose (1 hour–30 days), not just an instantaneous snapshot
Snapshots & Compare (not in RVTools) Record a point-in-time set of inventory metrics, compare any two later with a color-coded delta
PDF report (not in RVTools) One-page management summary — vCenter identity, counts, charts, vHealth status — generated on demand
Security advisories (not in RVTools) Quiet toolbar badge when Broadcom publishes a CRITICAL/HIGH VMware security advisory
Export CSV and XLSX, whatever the current tab shows, already filtered by search
Auto Refresh Optionally re-collect inventory on a timer (1 minute–1 hour) while connected — off by default
Trust-on-first-use Certificate fingerprint shown and pinned on first connect, like SSH host keys — a changed certificate later is a hard block, never silent
Demo mode Every tab filled with realistic mock data — try the whole app without a vCenter
In-app Help & onboarding Native Help panel (no external site), one-time welcome + per-feature tips
In-app feedback Bug reports / feature requests, submitted directly as a GitHub issue — no telemetry, and you see exactly what diagnostic info would go along with it before you click Send

vLens connect screen

Building from source

Prefer a ready-to-run build? See Releases. To build from source instead:

git clone https://github.com/canberkys/vlens.git
cd vlens

# Swift app
swift build
swift test

# Go helper (vCenter client — see Architecture below)
cd helper
go build -o vlens-helper .
cd ..

# Run
swift run vLens

Requirements: macOS 14 Sonoma or later, Swift 6.0+, Go 1.27+.

To produce a signed, packaged .app (requires your own Apple Developer ID — see scripts/release.sh for the one-time notarytool setup):

./scripts/release.sh

Testing without a real vCenter

vLens ships with dev-only tooling built on vcsim — govmomi's own simulator, the same engine behind the upstream vcsim CLI. It's a real SOAP/PropertyCollector server, not a mock; vlens-helper talks to it exactly as it would talk to a real vCenter.

cd helper
go run ./vcsim              # small model, fast iteration
go run ./vcsim -bulk        # ~1,200 VMs / 34 hosts / 4 clusters / 12 datastores

Point vLens's Connect screen at the printed https://127.0.0.1:PORT/sdk URL with username user / password pass (vcsim accepts anything), approve the self-signed certificate, and every tab fills with real (simulated) data. collectAll finishes in well under a second even at the bulk scale.


Architecture

Sources/vLens/       SwiftUI app — connect screen, tabs, Help, Preferences, Feedback
Sources/vLensCore/   Shared library — models, health checks, export, local stores
helper/              Go module (govmomi) — the actual vCenter client

vLens talks to vCenter through an embedded Go binary (vlens-helper), not a pure-Swift SOAP client — Swift has no maintained vSphere SDK, and govmomi (the same library behind Terraform's, Packer's, and Kubernetes' vSphere providers) already solves that problem well. The Swift app and helper speak a small JSON protocol over stdin/stdout — one process per collection, one login, one PropertyCollector pass per vim25 object type.

Full architecture rationale, every tab's exact data source, and the complete vHealth rule status live in docs/vLens-Reference.md.


Data stored locally

~/Library/Application Support/vLens/
  connection-profiles.json    # saved host/username (never the password)
  inventory-snapshots.json    # Snapshots tab history
  certificate-trust.json      # pinned certificate fingerprints (trust-on-first-use)

Passwords, when you choose to save a connection, go to macOS Keychain — never to a file on disk. No analytics, no telemetry, no phone-home. The Feedback screen is the one thing that talks to the outside world, and only when you explicitly click Send — it shows you exactly what diagnostic info (app/macOS version, connected vCenter version — never your host, username, or password) would be attached before it goes anywhere.


Roadmap

See CLAUDE.md (project context/status log) for the detailed, actively maintained roadmap. Near-term: real vCenter 7/8/9 validation once VPN access allows it.


License

GPLv3 — see LICENSE. Copyleft: you're free to use, study, modify, and redistribute this code, including commercially, as long as your version stays open source under the same license. The LICENSE file includes a small set of additional permissions (allowed under GPLv3 §7) that specifically prohibit passing off a modified version as the official vLens project, or using the vLens name/icon for a derivative without saying it's derived.

About

Native macOS vCenter/ESXi inventory tool — inspired by RVTools, built for Mac

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages