Skip to main content

Quickstart — online

Five minutes, nothing to install, and no account needed to start.

1. Open the editor

opcua-modeler.sterfive.io/editor ↗

The editor opens straight away. Signing in is only needed for the three things listed at the end of this page.

2. Write a model

Replace the contents with this:

A temperature sensor
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"

You need a header above it — the namespace this model defines, and its version:

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

namespaces:
- di

That is a complete model. TemperatureSensorType is a device component from the DI companion specification with one measured value, and Sensor1 is an instance of it hanging off the standard Objects folder.

The temperature sits inside di:ParameterSet rather than directly on the type: DI keeps process values there, and the modeller will warn you if you put them elsewhere. Following the companion spec from the start costs nothing here and saves rework later.

3. Watch it validate as you type

Two things happen without you asking:

  • Diagnostics appear under anything wrong — a misspelled key, a type that does not exist, a missing required field — with the line and a code.
  • Completions offer real values. Put the cursor after subtypeOf: and you are offered types that actually exist, not a guess.

Try breaking it deliberately: change ua:Double to ua:Doubl and watch the error appear, then fix it.

4. Look at what you built

The right-hand panel switches between four views:

ViewShows
DiagramYour types drawn as an OPC UA class diagram
DocumentationThe generated Markdown spec for the model
ProblemsEvery diagnostic in one list
DependenciesThe companion specs and vendor nodesets in play

The diagram and documentation update as you type. Nothing is generated on a button press — they are the model.

5. What needs an account

Signing in (Google, GitHub, or email) adds three things:

  • Save to the cloud — models persist to your account, with autosave.
  • Run it in a real OPC UA server — one click starts an actual server exposing your model, so you can point a client such as UaExpert at it.
  • Generate from a description — write what you want in plain language and have a validated model produced for you.

Access is currently Early Bird, for adopters working with us directly — talk to us.

Getting the NodeSet2.xml out

The browser is where you author. To turn a model into NodeSet2.xml, Symbols.CSV and documentation, use the REST API with an API key, or the desktop CLI, which does it offline.

Next