Your plant deserves better than a panel from 2009.
NEXT HMI replaces proprietary HMI/SCADA panels with one self-hosted server: your PLCs on OPC-UA in, live operator screens in any browser out, and the whole project as plain JSON and CSV your team can diff, review and version.
No seat licences. No tag counts. No feature paywall — historian, alarms with acknowledgement, recipes, users and permissions are all in this build, and there is no licence check in it at all.
Two ways in, same runtime, same project folder — so what you try on your laptop is what runs on the line. Both boot with a seeded example project, so there is something to click before you have a PLC connected.
docker run -d --name nexthmi -p 8000:8000 -p 8443:8443 \
-v nexthmi-data:/data ghcr.io/mpnvdlee/next-hmi:latestOpen http://localhost:8000. The image is multi-arch (linux/amd64 +
linux/arm64); swap :latest for a version tag such as :1.0.0 to pin a
release.
Both ports are published on purpose: turning on HTTPS in Settings moves the app
to 8443 and leaves 8000 redirecting there. Map them one-to-one.
With compose instead — docker-compose.yml at the repo root binds
./project-data to /data:
docker compose up -dDownload nexthmi-windows-x64-<version>.zip or
nexthmi-macos-arm64-<version>.zip from the
Releases page, unzip anywhere
you can write, and double-click nexthmi.exe or nexthmi.command. No
installer, no admin rights, no Python or Node on the host. A terminal opens and
prints the URL to visit.
These builds are unsigned, so the OS asks once — Gatekeeper on macOS,
SmartScreen on Windows. The
one-time steps are two
lines each. The zip also carries the full guide as an offline HTML site in
docs/ beside the executable.
There is no portable Linux build; on Linux, use Docker.
- Set the device-admin password on the manager dashboard. It gates the whole installation — the dashboard, and every project's runtime and editor.
- Start the seeded project, then open its runtime or its editor.
A new project carries no accounts of its own beyond the anonymous guest, and
nothing ships with a default credential. Add real users when you want them,
from the editor's Users area.
Full install reference — runtime home, HTTPS, environment variables, upgrades:
docs/user/install.md.
Want to hear when a new version ships? Subscribe to release announcements — or just watch this repository.
One project — a bottling line — from the screens an operator touches back to the editor that builds them. Click any shot for full size.
The longer walkthrough — the editor, the property panel and its 27 sources, the OPC-UA wizard, recipes, translations and theming — is at next-hmi.com/tour.
- In-browser editor — pages, datasources, alarms, translations and users at
/editor/<project>/, with a live preview. No engineering workstation, no dongle. - OPC-UA out of the box — an
asyncuaclient pool subscribes, writes and browses, viewport-aware so the tags on screen update first. - Git-native projects — every artifact is JSON or CSV on disk, so your change control already works and a project moves as a folder or a zip.
- Property sources — 27 composable sources (
$var,$if,$switch,$loc,$viewport, …) that nest, so no property needs a script. - Custom widgets — drop a
.tsxintocustom-widgets/and it hot-compiles. No Node toolchain, no rebuild of the core. - AI-driven engineering — a built-in MCP server exposing 30+ read/write tools, with dry-run diffs guarding every destructive change.
- Responsive by project — one project branches layout by viewport class, so the maintenance engineer's phone is not a second project to keep in step.
One binding language covers every property on every widget:
Built on FastAPI · React · OPC-UA · asyncua · Python 3.14 · Node 22+.
Requirements: Python 3.14 (>=3.14.2, <3.15) and Node 22+.
git clone https://github.com/mpnvdlee/next-hmi.git
cd next-hmi
python3 -m venv .venv && source .venv/bin/activate
pip install -r backend/requirements.txt
cd frontend && npm install && cd ..
python start-dev.py # app on :8000 (Vite with HMR), API on :8001Stop with Ctrl-C, or python start-dev.py --stop to free :8000/:8001 from
another shell. Tests and linters:
pytest backend/tests, ruff check backend, and npm test / npm run lint /
npm run build from frontend/.
- User guide (
docs/user/) — building dashboards, connecting OPC-UA, alarms, theming. Also shipped behind the editor's Help button. - Contributor reference (
docs/dev/) — architecture, REST and WebSocket protocols, the custom-widget SDK, theming tokens, and the MCP server.
Fork, branch, keep the diff focused and tested, then git commit -s — the
sign-off is how you accept the CLA, and it is the only step. Open a pull request
describing the why. Details in CONTRIBUTING.md;
participation is governed by the
Code of Conduct. Bugs and ideas belong in a
GitHub issue.
NEXT HMI writes to PLCs and is meant to run on a trusted OT network behind a VPN, never exposed to the public Internet — read Network placement and threat model before putting it on any network. Report vulnerabilities privately via SECURITY.md; never open a public issue for one.
AGPL-3.0-or-later across the whole repository — no dual-licensed core, no
per-file carve-outs, no licence check in the build. Run it at any scale,
commercially, for as many operators and tags as the plant has.
The project content you author — pages, themes, translations, datasources, custom widgets — is your own work and is not covered by the copyleft; that is written down in LICENSE-EXCEPTION.md rather than left to interpretation. Hand a build to someone outside your organisation and the AGPL asks you to offer them the corresponding source; a commercial licence is the alternative to doing that. A separate proprietary enterprise build adds an audit trail for regulated plants — see next-hmi.com/licensing.






