No prose, just the facts Counted from the source, not the brochure

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.

Built-in widgets
39
5 categories
Property sources
24
all composable
Action types
12
4 groups
MCP tools for AI agents
30+
opt-in per project
Ports to open on the server
1
8000 by default, HTTPS opt-in
Memory per running project
44MB
measured on a reference install
Ways to install
3
zip, Docker or source
Field protocol, shipped
OPC-UA
2 more on the roadmap
01 · At a glance

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
02 · Architecture

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.

Operator screens

Browser runtime

Any device with a browser renders pages and custom widgets — nothing to install on the floor, nothing to re-license per panel.

React
WebSocket
Runtime + editor

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.

FastAPIPython 3.14
OPC-UA
Field devices

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.

asyncuaOPC-UA
03 · Installation

Three ways in, same project folder.

MethodRuns onYou needHot reloadStart with
Portable zipWindows x64 · Apple-silicon macOSNothing — Python is bundled. Unsigned today, so the OS asks once.No./nexthmi.command
Dockerlinux/amd64 · linux/arm64Docker. Mount your project folder.Nodocker compose up
From sourceWindows · Linux · macOSPython 3.14 and Node 22+Yespython start-dev.py

Step by step: installing & running.

04 · System requirements

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.

RoleCPUMinimumPlatformsInstalled on it
Server
runtime, editor, OPC-UA
x86-64 or ARM641 GB RAM · 2 coresWindows x64 · Linux · Apple-silicon macOS · DockerNEXT HMI
Operator screen
panel PC, monitor, tablet, phone
AnyA modern browserAnyNothing
Measured memory on a reference install, against the 1 GB minimum
Manager11 MB
One running project44 MB
Minimum spec1 GB

The rest is headroom for the historian, several projects at once, and the OS underneath.

05 · Protocols & limits

What it talks to, and where it stops.

ConnectionStatusDetail
OPC-UA opc.tcp://ShippedEndpoint discovery; security policy and mode taken from the chosen endpoint; anonymous or username/password; per-project client certificate.
Static datasourceShippedBuild and demo a project with nothing real connected.
HTTP / REST APIsShippedRead into any property with $http.
MQTTRoadmapNext transport. Not shipped.
Beckhoff ADSRoadmapNext transport. Not shipped.
S7 · Modbus · EtherNet/IPNot nativeWorks 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
06 · Built-in widgets

39 widgets, five categories.

CategoryCountWidgets
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
Total39+ your own custom widgets, in their own category

Every widget, every property: widget catalogue in the guide.

07 · Operations

Running it, moving it, checking it.

AreaCapabilityHow
ProjectsSeveral per serverEach starts and stops on its own, from one manager page.
StorageAn ordinary folder anywhere on disk.
Operator accountsPer project, with groups.
AI-agent accessOff or on per project; 30+ MCP tools, destructive ones return a diff before they apply.
MovingZip export / importFor island networks.
LAN transferPair once with the destination's admin password — used to pair, never stored.
DiagnosticsFast subscriptionsLive list per datasource of the tags on the fast window.
Custom-widget buildsCompile status and timestamp per widget, with a Recompile button.
Historian storageDatabase size, sample count, oldest and newest sample, in the Historian area.

Version and security policy: security in the guide.

Verify, don't trust

Every number here, running live.

Try now