Self-hosted IPMI dashboard: monitor sensors, control fan curves and power across all your servers.
3.3K
Web-based IPMI management platform โ monitor sensors, control fans, manage power, all from your browser.
Documentation: docs.ipmideck.comโ
Featuresโ โข Quick Startโ โข Documentationโ โข Configurationโ โข Supported Hardwareโ
IPMIDeck is a self-hosted dashboard that connects to your servers' BMC (Baseboard Management Controller) via IPMI. It provides real-time sensor monitoring, intelligent fan curve control (FanPilot), remote power management, and hardware event logs โ no CLI required.



Pull from Docker Hub (primary registry):
docker pull devluigi06/ipmideck:latest
# Linux (reaches BMCs on your LAN via UDP 623):
docker run -d --name ipmideck --network host \
-v ipmideck-data:/data \
devluigi06/ipmideck:latest
# Windows / macOS (Docker Desktop has no host networking โ map the port instead):
docker run -d --name ipmideck -p 3000:3000 \
-v ipmideck-data:/data \
devluigi06/ipmideck:latest
Or with Docker Compose:
docker compose up -d # pull&go (docker-compose.yml)
docker compose -f docker-compose.dev.yml up --build # build from source
Open http://<your-ip>:3000 and follow the setup wizard.
--network host(Linux) lets the container reach BMCs on your local network via UDP 623. On Windows/macOS use-p 3000:3000.
pip install ipmideck
ipmideck start
Requires ipmitool installed on the system.
Full documentation lives at docs.ipmideck.comโ โ start with the Getting Started guideโ . The docs cover installation, first-run setup, per-vendor Enable IPMI guides (Dell iDRAC, HPE iLO, Supermicro, Lenovo XCC, IBM IMM), configuration, the CLI and interactive console, the FAQ, and troubleshooting.
| Component | Technology |
|---|---|
| Backend | Python / FastAPI / Uvicorn |
| Frontend | React / Vite / TypeScript / Recharts |
| Styling | Tailwind CSS |
| Database | SQLite (aiosqlite) |
| IPMI | ipmitool (subprocess) |
| Packaging | Docker / pip |
Configuration is auto-generated at first run at /data/config.yaml (Docker / Linux) or ./data/config.yaml (Windows). Override the data directory with IPMIDECK_DATA_DIR.
A documented subset of settings can be overridden with IPMIDECK_-prefixed environment variables:
IPMIDECK_SERVER_PORT=8080
IPMIDECK_IPMI_POLL_INTERVAL=30
IPMIDECK_LOGGING_LEVEL=info
IPMIDECK_DATA_RETENTION_DAYS=180
Every key is written to that config.yaml on first run โ read it for the full list. The same
settings are also editable at runtime from the in-app Settings page.
Launched on a host with an attached terminal (a TTY โ e.g. ipmideck start run directly, not under Docker, systemd, or a pipe), IPMIDeck opens an interactive operator console: a pinned header with keybindings above a live, streaming log. From it you can cycle log verbosity, inspect active sessions and configured servers, print the access URL, change the bind address, and restart or quit โ without leaving the terminal.

Keys: [v] verbosity ยท [c] sessions ยท [s] servers ยท [u] url ยท [g] update ยท [b] change bind ยท [r] restart ยท [q] quit ยท [ESC] back. The console is not shown when IPMIDeck runs under Docker, systemd, or with piped output โ there it logs plainly to stdout.
The hosts shown are RFC5737 documentation addresses, not real servers.
See the Interactive Console docsโ for full details.



Hardware identifiers are synthetic and the hosts shown are RFC5737 documentation addresses.
git clone https://github.com/ipmideck/IPMIDeck.git
cd IPMIDeck
# Backend โ run from the repo root (pyproject.toml lives here)
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# .venv\Scripts\activate # Windows
pip install -e ".[dev]"
# Frontend
cd frontend
npm install
npm run dev
# Backend โ from the repo root (serves API + static frontend build)
uvicorn backend.main:app --reload --port 3000
# or: python -m backend.main --reload
# or: ipmideck start --reload (after `pip install -e ".[dev]"`)
# Frontend dev server (with HMR, proxies API to backend)
cd frontend
npm run dev
ipmideck/
โโโ backend/
โ โโโ main.py # FastAPI app + lifespan + CLI entry point
โ โโโ console.py # interactive TTY operator console
โ โโโ core/ # database, auth, crypto, config, branding, events,
โ โ # websocket, modules (loader), ipmi_service, ipmi_demo
โ โโโ api/ # auth / server / dashboard / system / module routes
โ โโโ models/ # Pydantic schemas
โ โโโ modules/ # self-contained feature modules
โ โ โ # (manifest + routes + tasks + migrations each)
โ โ โโโ sensors/
โ โ โโโ fanpilot/ # + engine.py (curve / hysteresis / safety override)
โ โ โโโ power/
โ โ โโโ sel/
โ โ โโโ fru/
โ โโโ static/ # compiled React SPA (build artifact โ do not hand-edit)
โโโ frontend/
โ โโโ src/
โ โ โโโ pages/ # Dashboard, FanPilot, SEL, FRU, Settings, Login, Setup
โ โ โโโ components/ # common/, dashboard/, layout/
โ โ โโโ modules/ # per-module widgets (sensors, fanpilot, power)
โ โ โโโ stores/ # Zustand stores
โ โ โโโ hooks/ # useWebSocket, useKeyboardShortcuts, โฆ
โ โ โโโ i18n/locales/ # 12 language catalogs
โ โ โโโ api/ # HTTP client
โ โ โโโ lib/
โ โ โโโ styles/
โ โโโ vite.config.ts
โโโ scripts/ # rebuild-spa, check-spa-built, check-i18n-parity,
โ # check-wheel, lint-workflows, smoke-docker
โโโ tests/ # unit/, integration/, fixtures/ipmi/
โโโ Dockerfile
โโโ docker-compose.yml
โโโ docker-compose.dev.yml
โโโ .dockerignore
โโโ pyproject.toml
IPMIDECK_AUTH_SESSION_EXPIRY / the auth.session_expiry config key โ e.g. 24h,
90m, 1h; default 24h)<data_dir>/encryption.key โ deliberately outside the database, so a stolen DB
alone decrypts nothing (back the key file up separately)ipmitool reads them from the environment
(-E / IPMITOOL_PASSWORD), so they never appear in ps

Sensor monitoring, power control, SEL and FRU work on any server with an IPMI 2.0 BMC.
Fan control (FanPilot) is vendor-specific. The table below is the honest support matrix โ it mirrors the vendor profiles the app actually ships, and the same tier badges appear in the vendor picker when you add a server:
| Vendor | Fan control | Tier | Notes |
|---|---|---|---|
| Dell PowerEdge (iDRAC) | Yes | Tested | Raw iDRAC fan commands, validated on real hardware (PowerEdge R720) |
| Supermicro (X10+) | Yes | Experimental | Both fan zones |
| IBM System x (IMM) | Yes | Experimental | Dual fan bank |
| HPE ProLiant (iLO) | No | Monitoring-only | iLO exposes no IPMI fan-control interface |
| Lenovo ThinkSystem (XCC) | No | Monitoring-only | No reliable in-band restore path |
| Generic / unknown BMC | No | Monitoring-only | Never issues raw vendor writes it cannot verify |
Monitoring-only vendors still get full sensor, power, SEL and FRU support โ FanPilot simply leaves their fans under BMC control rather than sending raw commands it cannot confirm.
Luigi Tanzillo โ github.com/dev-luigiโ
This tool is provided as-is for managing IPMI-enabled servers. Use at your own risk. Improper fan control can damage hardware. Always test in a non-production environment first. The author is not responsible for any damage caused by misuse of this application.
Content type
Image
Digest
sha256:4377dfeeaโฆ
Size
76.9 MB
Last updated
2 months ago
docker pull devluigi06/ipmideck