Quickstart — desktop CLI
Five minutes to a generated NodeSet2.xml, running entirely on your machine.
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:
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:
| File | What it is |
|---|---|
*.Nodeset2.xml | The standard nodeset — load it into open62541, the .NET SDK, node-opcua, anything |
*.md | Generated documentation, with class diagrams |
*.symbols.csv | BrowseName → 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.
*.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
- The YAML DSL reference — every key, with examples
- Command reference — every command and flag
- Reverse-engineering — turn an existing NodeSet2.xml back into YAML
- Conformance flags — controlling which diagnostics are errors