11 KiB
ProxMenux — Roadmap
Last update: 2026-05-20 · Current version: 1.2.1.2-beta 🇪🇸 Versión en español: ROADMAP.es.md
This document is our roadmap to bring ProxMenux and ProxMenux Monitor to a production-ready state. It is based on the two infographics a community member prepared, enriched with a real audit of the current codebase.
🖼️ Source infographics
The two infographics that seeded this roadmap are the work of @pitiriguisvi and summarise the two main areas of work visually — thank you for the time and for giving us such a clear starting point:
How we use this document:
- The Current state table reflects what we already have today.
- The Plan by version marks what goes into each release.
- The Shipped changes section gets filled in as we close items, with the version they shipped in.
Symbols:
- 🟢 — Done and in production
- 🟡 — Partial (foundation exists, UI or full feature missing)
- 🔴 — Pending
🎯 Vision
"The priority is not to add more metrics or more scripts, but to improve security, alerting, permissions, auditability and real integration with Proxmox."
ProxMenux is already a powerful tool for sysadmins running their own node. The next leap is making it a tool fit for production environments and customers:
- The operator must be able to give read-only access to third parties without worrying that they will touch anything.
- There must be an auditable history of what happened and who did it.
- Destructive changes must be previewable and revertible.
- The install must be operable in conservative mode when the node is not a lab.
📊 Current state
ProxMenux Monitor (Dashboard)
1️⃣ Read-only mode
| Item | Status | Notes |
|---|---|---|
| Separate monitoring from control | 🔴 | The dashboard mixes both today |
| 100 % read-only dashboard | 🟡 | The read_only scope exists for API tokens, but isn't exposed to the web user |
| No start/stop actions by default | 🔴 | Depends on the above |
| Ideal for clients and production | 🔴 | Lands when read-only mode is complete |
2️⃣ Permissions and tokens
| Item | Status | Notes |
|---|---|---|
| viewer / operator / admin roles | 🔴 | Single-user today |
| Tokens with scopes | 🟡 | 2 scopes (read_only, full_admin), not granular |
| Configurable expiry | 🟡 | Currently fixed at 365 days |
| Read-only tokens for NA / homepage | 🟢 | Covered by scope=read_only |
3️⃣ Web security
| Item | Status | Notes |
|---|---|---|
| Bind to localhost or LAN | 🔴 | Backend listens on 0.0.0.0:8008 |
| HTTPS and guided reverse proxy | 🟢 | Documented, ACME + self-signed CA trust |
| Optional IP allowlist | 🔴 | Does not exist |
| Rate limits and brute-force blocking | 🟡 | Login cooldown exists; not a configurable panel. Fail2Ban is optional |
4️⃣ Logs and auditing
| Item | Status | Notes |
|---|---|---|
| Log login, logout and failed attempts | 🟡 | auth_fail is notified; no historical panel |
| Save IP, user and token used | 🟡 | Reaches the notification, not persisted for audit |
| Audit access to VM/LXC | 🔴 | Control actions are not recorded |
| Clear history with result and error | 🔴 | No "Audit" tab |
5️⃣ Useful alerts
| Item | Status | Notes |
|---|---|---|
| High CPU, RAM, disk and temperature | 🟢 | Health Monitor + configurable thresholds |
| Snapshot / backup confirmed | 🟢 | vzdump_complete events |
| SMART warnings and prediction | 🟢 | disk_failure_predicted + disk_io_error tiers (1.2.1.2) |
| Telegram, Gotify, ntfy, email, webhook | 🟢 | 7 active channels |
6️⃣ PBS and cluster
| Item | Status | Notes |
|---|---|---|
| Last backup per VM/LXC | 🟢 | Visible in the VM/CT modal |
| VMs with no backup and failed jobs | 🟡 | vzdump_failed is notified; aggregated view missing |
| Quorum, nodes, global state | 🟢 | Health tab + cluster events |
| Environment health dashboard | 🟢 | Health tab |
ProxMenux (Scripts and post-install)
1️⃣ Operational safety
| Item | Status | Notes |
|---|---|---|
| Dry-run / preview before applying | 🔴 | No general flag |
| Warnings before critical changes | 🟡 | Some dialogs, not uniform |
| Post-action verification | 🟡 | update_component_status records the result |
| Reinforced confirmation on sensitive tasks | 🟡 | whiptail --yesno in some scripts; not a rule |
2️⃣ Rollback and recovery
| Item | Status | Notes |
|---|---|---|
| Restore last valid configuration | 🟢 | Full backup_restore/ system (host backup + apply_pending_restore) |
| Recovery menu before failures | 🟡 | Manual restore exists, no preventive wizard |
| Revert network / post-install / groups | 🟡 | Backup snapshots, no granular per-subsystem rollback |
Diagnostic bundle (bug-report) |
🔴 | No bundle |
3️⃣ External scripts
| Item | Status | Notes |
|---|---|---|
| Lists, hashes and signature | 🔴 | Run without verification |
| Pin version / commit / hash | 🔴 | Helper-scripts pulled live from upstream |
| Risk-level label | 🟡 | New menu added "richer context"; no formal label |
| Show script before running it | 🔴 | No preview step |
4️⃣ Logs and traceability
| Item | Status | Notes |
|---|---|---|
| Log action, user and date | 🟡 | Logs in /var/log/proxmenux/, not structured |
| Save commands and modified files | 🔴 | No tracking of what each script touched |
| Clear errors with exit code | 🟡 | Some scripts do; not a rule |
| Recent-changes history | 🔴 | No "what ProxMenux did on this host" UI |
5️⃣ Production mode
| Item | Status | Notes |
|---|---|---|
| Conservative profile for the whole node | 🔴 | Concept does not exist |
| Block destructive actions by default | 🔴 | Same |
| Limit network changes without confirmation | 🟡 | Some scripts ask for confirmation |
| More validations and warnings | 🟡 | Incremental improvements, not as a mode |
6️⃣ Real environments
| Item | Status | Notes |
|---|---|---|
| Clear, multilingual "this happened" output | 🟡 | translate() + msg_* work; final summary missing |
| Quorum / storage visibility | 🔴 | The Monitor shows it, but the scripts don't inspect or report quorum/storage state before acting |
| Proxmox Backup Server post-install | 🔴 | No PBS install/configuration script (the Proxmox_Backup_Client.AppImage is the client, not the server) |
| Fast failure detector for scenarios | 🟡 | Health Monitor; no "preflight" before each change |
🗺️ Plan by version
Items are grouped by value / effort ratio, not strict order. The plan can be reordered based on feedback from the group's testers.
v1.2.2-beta — Cheap and high-impact
Goal: close the gaps that already have a foundation in code and deliver visible security gains without touching architecture.
- Read-only mode for the web user. Bind the existing JWT
read_onlyscope to the interactive session. The UI hides action buttons (start/stop, run scripts, terminal) when the scope is notfull_admin. - Audit log table + dashboard tab. New SQLite table
audit_log(ts, user, ip, action, target, result, error). Hook intoflask_security_routesandflask_script_runner. Render as a simple "Audit" tab. - IP allowlist. New field in
Settings → Security → "Limit access to these IPs".@require_allowed_ipdecorator applied to all blueprints. - Configurable API-token expiry.
expires_atfield on the token metadata; honour it inverify_token.
v1.2.3-beta — Medium effort
Goal: provide serious operational tools before applying changes.
- Granular token scopes. Minimum four:
read_only,vm_control,script_runner,full_admin. The frontend shows which scopes the current token has. - Dry-run for post-install scripts.
--dry-runflag supported across allscripts/post_install/scripts. Output shows exactly what would change without touching the host. - Diagnostic bundle (
proxmenux bug-report). Tar.gz of/var/log/proxmenux/,journalctl -u proxmenux-monitor,dmesg --since=24h,dpkg -l | grep -i proxmenux,managed_installs.jsonand theerrors/disk_observationstables. Tokens and secrets obfuscated in the output. - Aggregated "VMs with no backup" view. New card in the Backups tab listing every VM/CT without a recent backup job, with direct shortcuts to PBS.
v1.3.0 — Major scope
Goal: the leap to production. Requires a major release due to data model and UX changes.
- RBAC with viewer / operator / admin roles. Multi-user,
per-user password, per-session role. Migration from
auth.jsonto ausers(id, username, password_hash, role, created_at, last_login)table. Review every blueprint to map endpoints → minimum role. - Production mode. Global flag in
/etc/proxmenux/profilethat toggles:- Reinforced confirmations
- More aggressive anti-cascade
- Destructive actions hidden or disabled
- IP allowlist forced non-empty
full_admintokens disabled in favour ofvm_control+ ack
- Granular rollback per subsystem. Building on the existing
backup_restoreinfra, allow reverting only "Network", only "Post-install", only "Groups and permissions", etc. - Change history visible in the Monitor. "Changes" tab listing every modification ProxMenux made on the host (file, before / after, responsible script).
Probably out of scope
- Cryptographic signing of upstream scripts. Depends on the community-scripts pipeline (we don't control it). Maintaining our own signed mirror would be high effort for limited benefit. Closed unless an external decision changes it.
📦 Shipped changes
This section is updated with every release. Without touching the plan above: here we note which items moved from pending (🔴 / 🟡) to done (🟢) and in which version.
| Date | Version | Item | Notes |
|---|---|---|---|
| — | — | — | No items closed yet from this roadmap |
🙏 Acknowledgements
- @pitiriguisvi — author of the two original infographics this roadmap is built on.
💬 How to contribute
Anyone in the group can:
- Comment on the item they consider a priority or notice missing.
- Propose a new item using the table format (category + description + why it matters).
- Suggest moving items between versions if the ordering doesn't match their real use.
The roadmap is alive and gets reordered. The only rule is: items only change state 🔴/🟡 → 🟢 when there is code backing them in a published release.

