Interactive web UI for Monitorix — reads RRD files directly, serves a React + Tailwind dashboard with real interactive charts.
npx monitorix-webuiThat's it. Point it at a host running Monitorix, get a modern dashboard with zoom, pan, time-range filters, summary cards, and live refresh — without touching Monitorix itself.
Monitorix ships static PNG graphs by design. They're great, but you can't zoom, pan, hover, or filter by time. This tool keeps Monitorix's lightweight Perl/RRD backend completely untouched and adds an opt-in interactive UI on top:
- Reads
/etc/monitorix/monitorix.conf(includingconf.d/overrides) - Reads
*.rrdfiles from/var/lib/monitorix/ - Auto-discovers every enabled module — no per-module config required
- Tier 1 (curated):
system,kern,proc,net,fs— polished charts + summary cards - Tier 2 (fallback): every other enabled module — auto-grouped DSes, generic styling
- Node.js 20+
rrdtoolbinary inPATH(already installed if you're running Monitorix)- Read access to the Monitorix data directory (run as the
monitorixuser, or as a member of its group)
Default port is 8088. Port 8080 is intentionally avoided — Monitorix's built-in
httpd_builtindaemon listens on 8080 by default.
# Run without installing
npx monitorix-webui
# Install globally
npm install -g monitorix-webui
monitorix-webui
# With basic auth + custom port
npx monitorix-webui --port 9000 --auth admin:s3cret
# Custom paths
npx monitorix-webui \
--conf /etc/monitorix/monitorix.conf \
--rrd-path /var/lib/monitorix \
--port 8088
# All env vars
MONITORIX_CONF=/etc/monitorix/monitorix.conf \
MONITORIX_RRD_PATH=/var/lib/monitorix \
PORT=8088 BASIC_AUTH=admin:s3cret \
npx monitorix-webui| Flag | Env | Default |
|---|---|---|
--rrd-path <dir> |
MONITORIX_RRD_PATH |
(read from monitorix.conf base_lib) |
--conf <file> |
MONITORIX_CONF |
/etc/monitorix/monitorix.conf |
--port <n> |
PORT |
8088 |
--host <addr> |
HOST |
0.0.0.0 |
--base-path <p> |
BASE_PATH |
/ |
--auth <user:pass> |
BASIC_AUTH |
(none) |
--refresh <sec> |
60 |
|
--rrdtool <bin> |
RRDTOOL_BIN |
rrdtool |
-h, --help |
||
-v, --version |
Mount it under a sub-path behind nginx, Caddy, or anything else:
monitorix-webui --base-path /monitorix-ui --port 8088location /monitorix-ui/ {
proxy_pass http://127.0.0.1:8088;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}# /etc/systemd/system/monitorix-webui.service
[Unit]
Description=Monitorix interactive web UI
After=monitorix.service
Requires=monitorix.service
[Service]
User=monitorix
Group=monitorix
ExecStart=/usr/bin/npx -y monitorix-webui --port 8088 --auth admin:CHANGEME
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now monitorix-webuiThe web UI is just a client over a tiny JSON API. Use it directly if you want to wire metrics into other dashboards.
| Endpoint | Description |
|---|---|
GET /api/system |
Hostname, rrdtool version, baseLib |
GET /api/catalog |
Discovered modules + chart specs (cached 60s) |
GET /api/series/:module/:chartId |
Time-series JSON for one curated chart |
GET /api/latest/:module?ds=a,b,c |
Most-recent value per DS |
GET /api/raw/:module |
Flat dump of every DS in a module's RRD |
GET /healthz |
Liveness |
from and to query params accept anything rrdtool xport accepts: now, now-6h, now-1d, now-7d, ISO-8601, or unix epoch.
┌──────────────────────────────────────┐
│ monitorix-webui (Node 20+, Hono) │
│ ├─ Apache-style monitorix.conf parser
│ ├─ rrdtool xport / info bridge │
│ ├─ 60s catalog cache │
│ └─ static SPA (React + Tailwind v4) │
└──────────────────────────────────────┘
▲ reads
│
┌───────────────┴────────────────┐
│ /etc/monitorix/monitorix.conf │
│ /var/lib/monitorix/*.rrd │
└────────────────────────────────┘
▲ spawns
│
rrdtool (existing system binary)
Zero native dependencies. Single Node process. Designed to live alongside Monitorix on the same host.
git clone https://github.com/mrbeandev/monitorix-webui
cd monitorix-webui
npm install
# Backend on :8088
npm run dev:server -- --conf /etc/monitorix/monitorix.conf
# Frontend with HMR on :5173 (proxies /api to :8088)
npm run dev:webui
# Production build (webui → packages/server/static, server → dist/)
npm run build
node packages/server/dist/cli.js- More Tier-1 curated metadata (
netstat,disk,process,mail, common services) - URL-state for time-range + selected module (shareable links)
- CSV export per chart
- Multi-host dashboard
- Dark/light theme toggle (currently dark-only)
- Per-DS color overrides via config
Issues and pull requests welcome. For larger changes, please open an issue first to discuss what you'd like to change.