Skip to content
Back to Projects
Open Source2025

PXC: Bringing Product Design Thinking to Infrastructure Tooling

A modern CLI for Proxmox VM management that applies web UX principles to terminal interfaces. Built to make complex infrastructure operations safe, fast, and accessible from anywhere—including your phone.

PXC: Bringing Product Design Thinking to Infrastructure Tooling

Client

Open Source

Role

Product Designer, Full-Stack Developer, Open Source Maintainer

Technologies

React, Ink, TypeScript, Proxmox API, Node.js

Key Results

3levels
Safety Layers
80s
VM Creation Time
Multi-node
Cluster Support
v2.2.3
Version

The problem

A three-node cluster managed entirely from my phone.

I run a three-node Proxmox cluster. Claw, Nexus, and a handful of production VMs: websites, services, Minecraft servers for my son and his friends. Everything runs on this cluster. And I manage it all from my phone.

I use Blink Terminal on my iPhone and iPad. When a Minecraft server crashes while I'm at the grocery store, I need to fix it. When a service needs a restart while I'm at a coffee shop, I need to do it from there. SSH works fine from a phone. The tools waiting on the other end don't.

The web UI doesn't work on mobile. The CLI requires memorizing arcane flags.

The Proxmox web UI was designed for a desktop monitor. Panels, nested menus, drag-and-drop, hover states. None of it works on a phone screen. Even on an iPad the interface doesn't scale. Creating a VM, stopping a container, deleting an ISO: every operation means navigating a panel designed for 24 inches.

The alternative is qm create [vmid] --cores --memory --storage --net. That works from a phone. But the flags are arcane. A dozen of them minimum per VM. On a phone keyboard, each one is a trip hazard. You either memorize the pattern or look it up every time.

I looked for a CLI tool that wrapped this into something friendlier. Nothing existed for my use case. So I built one.

What I did

React components in the terminal. One question at a time.

I chose React and Ink. Ink renders React components to the terminal. I'm a React developer, so it was the tool I already knew. I'd seen interesting Ink projects and wanted to see what it could do. What I found was a framework that let me build terminal interactions with the same patterns I use on the web. Component composition. State management. Event handling. The same mental model, just a different render target.

The design came from the Vercel CLI. One question at a time. Guided steps. Nothing shown until you need it. Most tools dump everything on screen at once: a wall of flags and options. For the way my brain works, that's noise. The Vercel approach asks one thing, you answer, then it asks the next thing.

Nine screens. Each asking exactly one question.

Welcome. Identity. Compute. Storage. Network. ISO. Summary. Execute. Success or Error. The wizard auto-detects available storage pools, network bridges, and ISOs from your Proxmox node. No manual typing of pool names or bridge IDs. Arrow keys to navigate. Enter to confirm.

Configuration preferences are auto-saved. The next time you create a VM, your previous choices are the defaults. The tool learns how you use it.

Power users can skip the wizard entirely with flags. pxc create --cores 4 --memory 8192. The flag interface mirrors the wizard steps. Both paths produce the same result. The default path optimizes for clarity. The fast path optimizes for speed.

PXC CLI demo: creating and managing VMs from terminal

The safety system came from a close call.

I almost deleted the wrong VM. Working fast, scrolling through a list, my finger tapped the wrong line. I caught it in time. But it made me realize something. If you're managing production infrastructure from a phone, you're going to make mistakes. Not because you're careless. Because the interface gives you no room to be careful.

Three layers of confirmation for every destructive operation. Visual confirmation: "You are about to delete VM 103." Type-to-confirm: you must type the VM ID to proceed. A 10-second countdown, visible and cancellable.

Three layers because each one is a moment to stop and think. Nobody who genuinely wants to delete something is stopped by three seconds of friction. But a rushed tap on the wrong line: that gets caught. The countdown is configurable now. Five seconds. Disabled entirely. Your call. The default path stays safe.

ISO management got the same treatment. List, download, upload, delete. Cluster-aware, knows which node has which storage. Delete has the same three-layer confirmation. Consistent safety habits across every command.

Architecture that follows Proxmox's design.

PXC runs node-local. Each node has its own install. The tool shells out to Proxmox's internal commands: qm, pvesm, pvesh. The same commands the web UI uses under the hood. No separate daemon. No agent to deploy. npm install -g pxc and it works.

Multi-node support arrived in v2.0. The tool detects single-node or cluster and adjusts. List VMs grouped by node. See online and offline status. Choose a target node during creation. Per-node config means different defaults for different hardware: Ceph on one node, local ZFS on another. The tool respects the topology of your actual environment.

Mock mode was built early. npm run dev:mock runs the full wizard with fake data. No Proxmox node required. A deliberate investment: iterate on the interface fast, mock the infrastructure, ship faster. Build the test surface before you need it.

The result

80 seconds instead of three minutes.

The web UI takes two to three minutes to provision a VM. PXC does it in about 80 seconds. Not because it's doing less. Because it removes the friction. No panel navigation. No form filling. No hunting for the right dropdown. The wizard steps through each decision once, auto-discovers what's available, and executes.

It doesn't get used every day. When it does, it saves more time than it cost to build.

Creating a VM from my phone at a coffee shop. Shutting down a container from a parking lot. Checking cluster status from my iPad while watching TV. These operations were tedious or impossible before PXC. Now they're the fastest path through my infrastructure.

The project is MIT-licensed, written in TypeScript, and built for the people who run Proxmox clusters out of their own homelabs. GitHub issues have real users. npm has real downloads. It's not a portfolio piece. It's a tool that ships.

What's next: full remote orchestration from a single node.

The architecture is node-local today. But the cluster awareness already works. The next version controls all three nodes from any one of them. No extra installs. No central server. Just the same tool, smarter about where commands go.

If you run Proxmox and manage it from a phone, you know exactly why this tool exists.

GitHub → · npm → · npm install -g pxc

Project Gallery

PXC: Bringing Product Design Thinking to Infrastructure Tooling screenshot
PXC: Bringing Product Design Thinking to Infrastructure Tooling screenshot