Skip to main content

Quickstart — desktop CLI

Five minutes to a generated NodeSet2.xml, running entirely on your machine.

You need a licence

The CLI is a commercial product on Sterfive's own registry, not public npm. A 30-day trial is available — sterfive.com/product/opcua-modeler ↗.

1. Install

Node.js 22 or later. Point npm at the Sterfive registry, log in, and install:

npm config set @sterfive:registry=https://npm-registry.sterfive.fr
npm login --registry=https://npm-registry.sterfive.fr
npm install -g @sterfive/opcua-modeler

Check it:

opcua-modeler version

Full detail, including the Snap package, is in Installation.

2. Write a model

Save this as sensor.model.yaml:

sensor.model.yaml
namespaceUri: http://example.com/UA/Quickstart/
version: 1.0.0
publicationDate: "2026-01-01T00:00:00Z"

namespaces:
- di

followed by:

objectTypes:
- browseName: TemperatureSensorType
subtypeOf: di:ComponentType
description: A temperature sensor, modelled as a DI component.
components:
# DI puts process values in the ParameterSet, which the base type declares
# as optional — redeclaring it here makes it mandatory on every instance.
- browseName: di:ParameterSet
components:
- browseName: Temperature
typeDefinition: ua:AnalogUnitType
dataType: ua:Double
engineeringUnits: "°C"
description: The measured temperature.

instances:
- browseName: Sensor1
typeDefinition: TemperatureSensorType
organizedBy: /ua:Objects
initializers:
# di:ComponentType inherits these as mandatory from the DI nameplate
# interface, so every instance carries them — give them real values.
- variable: di:Manufacturer
value: "Acme Instruments"
- variable: di:Model
value: "TS-100"

3. Generate

opcua-modeler generate -i sensor.model.yaml --strict

Three files come out:

FileWhat it is
*.Nodeset2.xmlThe standard nodeset — load it into open62541, the .NET SDK, node-opcua, anything
*.mdGenerated documentation, with class diagrams
*.symbols.csvBrowseName → NodeId, fed back in on the next run to keep NodeIds stable

--strict promotes warnings to errors. Use it in CI so a sloppy model fails the build rather than shipping.

Keep the symbols file

*.symbols.csv is an input as well as an output. Commit it. Without it the generator is free to renumber NodeIds, and clients that cached them break.

4. See it run

opcua-modeler generate -i sensor.model.yaml --server

starts a real OPC UA server exposing the model, so you can browse it with a client such as UaExpert before writing any server code.

Add --watch and it regenerates on every save.

5. Get it in your editor

opcua-modeler install-extension

installs the VS Code extension (Cursor and VSCodium too), pulls in the RedHat YAML extension, and points both at the CLI you just installed. You get the same live diagnostics and completions as the browser editor, against the same engine.

See Editor and LSP.

Next