Custom themes for Proxmox VE (PVE), Proxmox Backup Server (PBS), and Proxmox Datacenter Manager (PDM) that integrate with the native Color Theme selector.
- Native Integration - Themes appear in built-in Color Theme dropdown (PVE, PBS, and PDM)
- Auto-Patch on Updates - Automatically re-applies themes after product updates
- Hybrid Engine - CSS for styling + JavaScript for dynamic chart patching
- Hardware Sensor Monitoring - Optional CPU/storage temps, fan speeds, and UPS status on node Summary dashboard (PVE)
- Easy Installation - Single command installation for PVE, PBS, and PDM
Comparison between default Proxmox Dark theme and UniFi theme:
23 themes across 9 collections. Featured themes below — View Full Gallery →
Inspired by Ubiquiti UniFi Network Application |
Classic Dracula dark with purple accent |
Darkest Catppuccin flavor — deep warm tones |
Arctic dark palette with polar blue accent |
All Available Collections
| Collection | Themes |
|---|---|
| Catppuccin | Mocha, Mocha Teal, Macchiato, Frappé, Latte |
| Dracula | Classic, Midnight, Pink, Cyan, Green, Orange |
| Nord | Dark, Light |
| Gruvbox | Dark, Light |
| Solarized | Dark, Light |
| Tokyo Night | — |
| UniFi | Dark, Light, OLED |
| GitHub Dark | — |
| Blue Slate | — |
bash <(curl -fsSL https://raw.githubusercontent.com/IT-BAER/proxmorph/main/install.sh) installgit clone https://github.com/IT-BAER/proxmorph.git
cd proxmorph
chmod +x install.sh
./install.sh installEvery release ships a SHA256SUMS manifest and a GitHub build-provenance attestation. The installer verifies the downloaded tarball against SHA256SUMS automatically and refuses to install on a mismatch, or if the manifest is missing (fail closed). That runs on the Proxmox host with tools already present (sha256sum), so normal install and update stay a single command with no extra setup.
For stronger, provenance-level checks, verify a release on your workstation before you roll it out (a stock Proxmox host has no gh CLI, so this step belongs on your machine, not the node):
# integrity: do the bytes match the published manifest?
curl -fsSLO https://github.com/IT-BAER/proxmorph/releases/download/v<ver>/proxmorph-<ver>.tar.gz
curl -fsSLO https://github.com/IT-BAER/proxmorph/releases/download/v<ver>/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
# provenance: was it built by this repo's release workflow?
gh attestation verify proxmorph-<ver>.tar.gz --repo IT-BAER/proxmorphWhat each gives you: SHA256SUMS proves the bytes match what was published with the release (integrity). The attestation gives you a Sigstore/OIDC chain tying the artifact to this repository's Actions build, so you can check origin against something other than the transport. It is a check you opt into, not something the host enforces; neither replaces reading install.sh before running it as root. The What the installer changes section lists exactly what it touches.
git clone https://github.com/IT-BAER/proxmorph.git
cd proxmorph
git checkout v<ver> # pin a release
less install.sh # read it
./install.sh install # installs from the local files, no downloadFor air-gapped or policy-controlled environments, point the installer at your own copy of the release artifacts. PROXMORPH_RELEASE_BASE is the directory that directly contains proxmorph-<ver>.tar.gz and SHA256SUMS:
PROXMORPH_RELEASE_BASE=https://mirror.example.internal/proxmorph \
./install.sh update <ver>Checksum verification still runs, against your mirrored SHA256SUMS.
- Hard refresh browser (Ctrl+Shift+R)
- Click username → Color Theme
- Select a ProxMorph theme
| Command | Description |
|---|---|
./install.sh install |
Install themes |
./install.sh uninstall |
Remove themes |
./install.sh update or bash <(curl -fsSL https://raw.githubusercontent.com/IT-BAER/proxmorph/main/install.sh) update |
Updates (latest from GitHub) and install the latest themes |
./install.sh status |
Show installation status |
./install.sh default-theme <key|none> |
Set a server-side default theme for new browsers (user choice always wins) |
./install.sh |
Shows Menu to manage |
Run as root, install.sh makes only these changes, all reversible with ./install.sh uninstall:
- Themes: copies
theme-*.cssinto the product's widget-toolkit themes directory. - Theme registration:
sed-patches thetheme_mapinproxmoxlib.jsso the themes appear in the native Color Theme selector. - Index template: injects
<script>/<link>tags into the product index template for the JS patches and (PDM) theme links. - Persistence: installs an APT hook at
/etc/apt/apt.conf.d/99proxmorphthat runs/opt/proxmorph/post-update.shto re-apply the patches after a Proxmox update. The hook re-patches from the local/opt/proxmorphcopy only; it downloads nothing. - Sensors (PVE, optional): if you enable sensor display, edits
Nodes.pmto exposelm-sensorsdata.
Originals are backed up to /root/.proxmorph-backup before any file is modified. ./install.sh uninstall restores them and removes the hook.
- Copy an existing theme from
themes/ - Rename to
theme-yourname.css - Edit the first line:
/*!Your Theme Name*/ - Modify CSS styles
- Run
./install.sh install
Theme files must start with /*!Display Name*/ - this sets the name in Proxmox's dropdown.
If themes don't appear after installation:
- Clear browser cache — Press Ctrl+Shift+R (hard refresh)
- Run verify check — Run
./install.shand select option 7 (Verify installation) - Check installation status — Run
./install.sh status - Restart proxy service — Run
systemctl restart pveproxy(PVE),systemctl restart proxmox-backup-proxy(PBS), orsystemctl restart proxmox-datacenter-api(PDM)
If you access Proxmox through a Cloudflare Tunnel, themes may not load due to aggressive caching. To fix:
- Log in to Cloudflare Dashboard and select your domain
- Navigate to Caching → Cache Rules
- Click Create rule
- Set Hostname to your Proxmox subdomain (e.g.,
proxmox.example.com) - Set Cache eligibility to Bypass cache
- Save and deploy the rule
See Issue #13 for more details — thanks to @gioxx for the solution!
PVE / PBS:
- Theme CSS files are copied to
/usr/share/javascript/proxmox-widget-toolkit/themes/ - JavaScript patches (for charts) are installed to product-specific JS directories
proxmoxlib.jsis patched to register themes, and product index templates (.tplor.hbs) are patched to load JS patches- An apt hook automatically re-patches after product updates
- Themes appear in the native Color Theme selector
PDM:
- PDM-specific CSS override themes are installed to
/usr/share/javascript/proxmox-datacenter-manager/proxmorph-themes/ <link>tags are injected intoindex.hbs(disabled by default, activated by JavaScript)- A theme selector JS patch adds ProxMorph themes to PDM's native Theme dialog
- Selected theme is persisted in
localStorageand activated before WASM loads
- Proxmox VE 9.x / 8.x
- Proxmox Backup Server 4.x / 3.x
- Proxmox Datacenter Manager 1.x
MIT License
If you like my themes, consider supporting this and future work, which heavily relies on coffee:





