Tool · Client

opcua-commander

VendorSterfive / node-opcua project
CostOpen source, MIT-licensed project
PlatformsLinux, Windows, macOS (Node.js); also packaged as a Snap
TypeClient

opcua-commander is a terminal OPC UA client built on node-opcua. It gives you an address-space tree, an attribute inspector that can write, a reference explorer, live monitored items and remote method calls inside an SSH session, which makes it the practical way to diagnose a gateway or PLC with no desktop available.

What you actually use it for

  • Diagnosing a server from inside the plant network over SSH, where no GUI client can reach and no Windows machine exists.
  • Resolving a NodeId by namespace URI instead of index: it accepts nsu=http://example.org/UA/MyMachine;s=MyVariable and looks the URI up in the server's NamespaceArray at runtime.
  • Confirming that a write is actually permitted, by reading AccessLevel in the attribute inspector and then writing the value from the same pane.
  • Watching a handful of monitored items live to see whether a value is changing, stuck, or reporting a non-Good StatusCode.
  • Calling a Method on the server to test a machine command without writing client code.
  • Following references in both directions to work out how a vendor has actually wired an object, including HasSubtype chains.

Walkthrough

  1. Install it globally with npmRun npm i -g opcua-commander on a machine with Node.js installed. It is a Node package, so the same command works on the gateway itself, which is the point. A Snap package is also published if you prefer that on Ubuntu.
  2. Connect to an endpointLaunch it with the endpoint URL, for example opc.tcp://opcuademo.sterfive.com:26543 or opc.tcp://milo.digitalpetri.com:62541/milo. Start anonymous with no security to establish reachability, then add security and credentials once the plain connection works.
  3. Read the NamespaceArray before anything elseBrowse to the Server object and read NamespaceArray. Write down the URI-to-index mapping for this session. Every ns= index you see in the tree is only valid for this server as it is currently configured.
  4. Navigate the tree and inspect attributesExpand Objects and move with the arrow keys. The attribute panel shows NodeId, BrowseName, DataType, ValueRank, AccessLevel and the current DataValue with its StatusCode and timestamps. Engineering units and EURange are rendered where the node carries them.
  5. Monitor items liveAdd the selected node to the monitored-item panel and watch it update. This is the fastest way to distinguish a value that is genuinely static from a subscription that is not delivering, because a dead subscription shows no updates at all rather than repeated identical ones.
  6. Address nodes by namespace URI in anything you script afterwardsOnce nsu= addressing works interactively, carry the same pattern into your client code: store the namespace URI plus the identifier in configuration, resolve the index at connect time, and a PLC program download can no longer break your addressing.
  7. Write a value or call a method deliberatelyBoth are available from the terminal, which means both are available by accident. On a production machine, connect with a read-only user identity or an account whose Part 18 role has no write permission before you start exploring.

What it will not do

  • Text UI. It is excellent for a few dozen nodes and unpleasant for browsing a hundred-thousand-node address space; export a nodeset and work offline for that.
  • No historical-access or alarm-view equivalent of UaExpert's plugins, so Part 11 and Part 9 investigation is limited.
  • It inherits node-opcua's behaviour, including its structure decoding. A server that only publishes a legacy binary type dictionary may leave complex values as undecoded ExtensionObjects.
  • Requires a Node.js runtime on the host, which some hardened gateways do not have and some site policies will not permit you to install.
  • No PubSub inspection: it is a client-server tool only.

Alternatives

Instead of thisWhen
uaexpertWhen you have a Windows workstation with a route to the server and want history, alarms and performance plugins in one place.
asyncua-uaserver-populateNot a client, but if you need a target rather than a probe, asyncua's CLI tools (uals, uaread, uasubscribe) cover the same one-shot checks from a shell script.
wireshark-opc-ua-dissectorWhen the client-level view is not enough and you need to see whether the request left the machine at all.
Verify before you rely on this: Feature set and packaging move with the release, and the Snap channel may lag npm. Check the project's own readme for the current version, the exact key bindings and whether the nsu= resolution and method-call features are present in the build you installed, and check your site's policy on installing Node.js on OT hosts before you plan around it.

Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.

Free download
OPC UA Server Acceptance Test Pack
A 40-check acceptance test you run against a vendor's server before commissioning sign-off. Weighted scoring, three hard gates, and a one-page verdict for the supplier meeting.
Get the free test pack →
Free, no course, no login