A Jennifer client for the
Proxmox VE API.
get, post, put and delete reach every endpoint; typed verbs cover
nodes, guests (QEMU VMs and LXC containers), creating and deleting them,
power actions, cloning, templates, snapshots, IP addresses, migration,
disk resizing, cloud-init, backups and restores, ISOs and container
templates, metrics, pools, HA, firewall rules, permissions and background
tasks. It authenticates with an API token
or a password ticket (TOTP included) and trusts the cluster's own CA.
jvc add @deckyard/proxmoxOr unpack src/ from a release archive (deckyard-proxmox-<version>.tar.gz)
into vendor/deckyard/proxmox/.
use io;
import "@deckyard/proxmox/" as proxmox;
def c as proxmox.Client init proxmox.client("pve.example.com");
$c = proxmox.withCaCert($c, fs.readBytes("pve-root-ca.pem"));
$c = proxmox.withToken($c, "root@pam!automation", os.getEnv("PVE_TOKEN_SECRET"));
for (def g in proxmox.guests($c)) {
io.printf("%6d %-20s %s\n", $g.vmid, $g.name, $g.status);
}
def web as proxmox.Guest init proxmox.guest($c, 101);
def t as proxmox.Task init proxmox.waitTask($c, proxmox.start($c, $web), 60000);
io.printf("start: %s\n", $t.exitStatus);
Jennifer 0.25.0 or newer and the default jennifer binary: the deck needs
the net capability, which jennifer-tiny lacks.
tools/check-all.sh # the full gate, as CI runs it
jennifer test src/proxmox_test.j # the test overlay, offline
tools/check-docs.sh # docs against the code
tools/pack.sh dist # build the release archiveThe tests answer from a fake server on a loopback port. The examples need a real host; see their headers.
LGPL-3.0-only, see LICENSE. Copyright (C) 2026 mplx <mplx@jennifer-lang.dev>.
Proxmox is a registered trademark of Proxmox Server Solutions GmbH. This deck is not affiliated with or endorsed by it.