A simple yet powerful real-time dashboard for monitoring print speed and volumetric flow across one or multiple 3D printers running on Klipper firmware.
The app connects to the Moonraker API, collects data, displays it in the browser, and keeps a detailed history of all prints for further analysis.
(Tip: replace placeholder.png with an actual screenshot of your dashboard)

- Multi-printer monitoring: Track all your Klipper printers on a single page.
- Real-time charts: Visualize print speed (mm/s) and volumetric flow (mm³/s).
- Live metrics: Hotend & bed temperatures, print progress, elapsed time, averages.
- Print reports log: Automatic logging of all completed, canceled, or failed prints.
- Snapshots: Generate mid-print reports with one click.
- Detailed logs: Per-second log files for every finished print, available for download.
- Auto-reconnect: Automatically reconnects to printers that were rebooted or powered off.
- File logging: All server actions are logged into
klipper_dashboard.logfor debugging.
- 3D printer with Klipper firmware
- Moonraker API installed and running
- Python 3.9+
/ ├── static/ │ └── index.html ├── main.py ├── requirements.txt ├── config.json.example └── README.md
config.json– your personal configuration file (copy fromconfig.json.example)klipper_dashboard.log– server log fileprint_reports.json– short history of all printsreport_data/– folder with per-second logs for each print.venv/– Python virtual environment (created by you)
mkdir fluxwatch
cd fluxwatch
Step 2: Setup Python environment
It’s strongly recommended to use a virtual environment:
# Create venv
python3 -m venv .venv
# Activate (Linux/macOS)
source .venv/bin/activate
# Activate (Windows)
.venv\Scripts\activate
You should now see (.venv) at the start of your terminal prompt.
Step 3: Install dependencies
pip install -r requirements.txt
Step 4: Configure printers
Copy the example config and edit it:
cp config.json.example config.json
Example config.json:
{
"printers": [
{
"id": "printer1",
"display_name": "DjMini",
"ws_url": "ws://192.168.1.96:7125/websocket"
},
{
"id": "printer2",
"display_name": "TarTar",
"ws_url": "ws://192.168.1.96:7126/websocket"
}
]
}
ws_url: WebSocket address of your Moonraker API.
If the dashboard runs on the same device as Klipper (e.g. Raspberry Pi), use 127.0.0.1 instead of an IP address.
Running the Dashboard
Manual start (for testing)
Activate the virtual environment and run:
python -m uvicorn main:app --host 0.0.0.0 --port 8000
Do not close this terminal.
Open your browser:
http://<YOUR-IP>:8000
Automatic startup (Linux / Raspberry Pi service)
Recommended for permanent use.
Step 1: Create service file
sudo nano /etc/systemd/system/klipper-dashboard.service
Paste:
[Unit]
Description=Klipper Flow & Speed Dashboard
After=network.target moonraker.service
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/klipper-dashboard
ExecStart=/home/pi/klipper-dashboard/.venv/bin/python -m uvicorn main:app --host 0.0.0.0 --port 8000
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Save with Ctrl+X, then Y and Enter.
Step 2: Enable and start service
sudo systemctl daemon-reload
sudo systemctl enable klipper-dashboard.service
sudo systemctl start klipper-dashboard.service
Step 3: Check status & logs
sudo systemctl status klipper-dashboard.service
journalctl -u klipper-dashboard -f
Troubleshooting
Address already in use – port 8000 is busy. Stop previous instance with Ctrl+C.
Printer not showing – check ws_url in config.json, ensure Moonraker is running.
Only history visible – open browser developer console (Ctrl+Shift+J) and check for JavaScript errors.
Logs – see klipper_dashboard.log or run:
journalctl -u klipper-dashboard -f