What to forward to procurement.
How to install it, what it needs, what it talks to, every widget it ships with, and how it is run. The page that gets pasted into an approval form.
The datasheet.
- Product type
- Self-hosted, browser-based HMI
- Licence
- AGPL-3.0-or-later · commercial licence optional
- Server stack
- Python 3.14 · FastAPI · asyncua
- Client stack
- React 19 · TypeScript · any modern browser
- Field protocol
- OPC-UA over
opc.tcp:// - Live updates
- WebSocket, server push
- Project format
- A plain folder of JSON and CSV files
- Historian
- SQLite, per project, interval and retention per tag
- Default port
8000· HTTPS opt-in- Projects per server
- Several, started and stopped independently
- Editor
- In the browser, same server as the runtime
- Extensibility
- Custom widgets (React SDK) · MCP server
One server between your operators and your machines.
One box to install, one port to open, one thing to explain to the customer's IT department. Browsers connect over a single WebSocket; the FastAPI server holds the OPC-UA client pool and pushes live tag updates to every screen.
Browser runtime
Any device with a browser renders pages and custom widgets — nothing to install on the floor, nothing to re-license per panel.
FastAPI server
Serves pages, hosts the editor, holds the OPC-UA pool and streams tag updates to every screen. Project data is plain JSON/CSV on disk.
PLCs & machines
Subscribe, write and browse over OPC-UA through the asyncua client pool. Any controller that exposes an OPC-UA server, or sits behind a gateway that does.
Three ways in, same project folder.
| Method | Runs on | You need | Hot reload | Start with |
|---|---|---|---|---|
| Portable zip | Windows x64 · Apple-silicon macOS | Nothing — Python is bundled. Unsigned today, so the OS asks once. | No | ./nexthmi.command |
| Docker | linux/amd64 · linux/arm64 | Docker. Mount your project folder. | No | docker compose up |
| From source | Windows · Linux · macOS | Python 3.14 and Node 22+ | Yes | python start-dev.py |
Step by step: installing & running.
What it needs to run.
Nothing on this list is hardware you buy from us. Screens are whatever already has a browser; the server is whatever already runs Docker or Python.
| Role | CPU | Minimum | Platforms | Installed on it |
|---|---|---|---|---|
| Server runtime, editor, OPC-UA | x86-64 or ARM64 | 1 GB RAM · 2 cores | Windows x64 · Linux · Apple-silicon macOS · Docker | NEXT HMI |
| Operator screen panel PC, monitor, tablet, phone | Any | A modern browser | Any | Nothing |
The rest is headroom for the historian, several projects at once, and the OS underneath.
What it talks to, and where it stops.
| Connection | Status | Detail |
|---|---|---|
OPC-UA opc.tcp:// | Shipped | Endpoint discovery; security policy and mode taken from the chosen endpoint; anonymous or username/password; per-project client certificate. |
| Static datasource | Shipped | Build and demo a project with nothing real connected. |
| HTTP / REST APIs | Shipped | Read into any property with $http. |
| MQTT | Roadmap | Next transport. Not shipped. |
| Beckhoff ADS | Roadmap | Next transport. Not shipped. |
| S7 · Modbus · EtherNet/IP | Not native | Works through any gateway that exposes the controller over OPC-UA. |
- Subscriptions
- Viewport-aware: on-screen tags get the fast window, the rest are demoted
- Large projects
- Thousands of nodes without polling all of them at once
39 widgets, five categories.
| Category | Count | Widgets |
|---|---|---|
| Content & controls | 14 | Alarm HistoryAlarm ListButtonClockIconImageLabelLogo TitlePage TitleStatus PillTrend ChartUser BadgeVideoWeb Frame |
| Indicators | 7 | GaugeLED IndicatorProgress BarRing GaugeStat TileTrendValue Display |
| Inputs | 6 | Button RowDropdownNumber InputNumeric StepperString InputSwitch |
| Layout & structure | 6 | Component SlotContainerFixed SpacerImage ContainerSeparatorStretch Spacer |
| Navigation | 6 | BreadcrumbLanguage SwitcherMenu ToggleNavigation MenuPage NavigatorTab Bar |
| Total | 39 | + your own custom widgets, in their own category |
Every widget, every property: widget catalogue in the guide.
Running it, moving it, checking it.
| Area | Capability | How |
|---|---|---|
| Projects | Several per server | Each starts and stops on its own, from one manager page. |
| Storage | An ordinary folder anywhere on disk. | |
| Operator accounts | Per project, with groups. | |
| AI-agent access | Off or on per project; 30+ MCP tools, destructive ones return a diff before they apply. | |
| Moving | Zip export / import | For island networks. |
| LAN transfer | Pair once with the destination's admin password — used to pair, never stored. | |
| Diagnostics | Fast subscriptions | Live list per datasource of the tags on the fast window. |
| Custom-widget builds | Compile status and timestamp per widget, with a Recompile button. | |
| Historian storage | Database size, sample count, oldest and newest sample, in the Historian area. |
Version and security policy: security in the guide.