The OPC UA client that shows what the session negotiated.

Browse, read, write, subscribe and call methods on any OPC UA server. See what was requested and what the server revised, review every certificate before you trust it, and read each service call as decoded UA Binary. Native Rust, with no browser engine inside.

  • Version 0.1.0
  • macOS, Windows, Linux
  • Free and open source (MIT)
OPC Studio connected to the built-in Bench simulator, with the Intake overview subscription: the servers explorer on the left; a grid of 12 monitored items with value, unit, StatusCode and source time, where Turbidity of filter F-202 is struck through in red as Bad_SensorFailure and OutletFlow of remote unit RTU-7 is in italics as Uncertain_LastUsableValue; and the inspector showing the Speed node in three notations (ns=, nsu= and browse path), its DataValue with the Variant bytes, and a note that the device clock is 74 seconds behind the server.

From the value that looks wrong to the call that explains it.

A dense, keyboard-first workspace where values, negotiated parameters and service calls get the room and the chrome steps back. Every screen here is the real app, shown on its built-in simulator's fictional water-treatment plant.

A grid of monitored items with value, unit, StatusCode and timestamps. A Bad value is struck through, an Uncertain one is in italics and a stale one shows its age, so none of them passes for a plain number. When the device's clock runs behind the server, the inspector says so.

OPC Studio connected to the built-in Bench simulator, with the Intake overview subscription: the servers explorer on the left; a grid of 12 monitored items with value, unit, StatusCode and source time, where Turbidity of filter F-202 is struck through in red as Bad_SensorFailure and OutletFlow of remote unit RTU-7 is in italics as Uncertain_LastUsableValue; and the inspector showing the Speed node in three notations (ns=, nsu= and browse path), its DataValue with the Variant bytes, and a note that the device clock is 74 seconds behind the server.

Every server, by site.

A SCADA server in the plant, a historian, a PLC on the bench and the built-in simulator sit in one explorer, grouped by site, each with its own color and with what you are allowed to do to it.

opc.tcp, with the security you choose
Security policies None, Basic256Sha256, Aes128_Sha256_RsaOaep and Aes256_Sha256_RsaPss, in the modes None, Sign and SignAndEncrypt. Basic128Rsa15 and Basic256 are tagged deprecated, and neither they nor None are ever preselected: the app ranks the endpoints itself instead of trusting the server's securityLevel.
Anonymous, user name or user certificate
Each is offered only if the endpoint you picked offers it. The password goes to your system's credential store when you save (an encrypted file where there is none), never into the server list, and the app refuses to send one that would travel in clear. A user certificate's private key can have a passphrase (RSA, AES-encrypted), kept the same way.
Grouped by site, colored by server
Mark a server as a live plant and its color tints the toolbar, the tab and the status bar, so it never looks like the bench, and writes, calls and acknowledgements ask first. A read-only server hides them entirely.
The address you typed
Some servers announce a host name that does not resolve from your network. OPC Studio warns, and by default keeps the host you typed, with the port and path the endpoint announces.
Test it before it is saved
Test connection runs the whole connect without saving anything and says in plain words why it failed. Servers move between machines as one JSON file, without passwords; an imported server with a user name asks for its password the first time.
Sample servers, drawn the way the explorer lists them. Every name and address is fictional.

Certificates without fear.

Clients that accept everything teach you to ignore certificates, and clients that just fail leave you lost. OPC Studio stops before the secure channel opens, shows you the server's certificate with real checks, and answers plainly when a server turns you down.

First contact

An unknown certificate opens a review with its thumbprint in large type, to compare with the one the device shows itself. Nothing more is sent to the server until you decide.

  • Valid nowWithin its validity, with five minutes of clock difference tolerated; a warning 30 days before it expires.Warn
  • Host matchesThe host name or address you connect to is in the certificate's alternative names.Warn
  • ApplicationUri matchesThe server's ApplicationUri is one of the certificate's URI names.Warn
  • UsageKeyUsage and ExtendedKeyUsage fit an OPC UA application.Warn
  • Key fits the policyA key of 2048 to 4096 bits, and a signature the policy allows: SHA-1 fails the Sha256 policies.Fail
  • IssuerSelf-signed with a signature that verifies, or issued by a CA in your issuers folder. Anything else says the trust applies to this certificate only; a broken signature fails.Pass, Warn or Fail

Each check ends as Pass, Warn or Fail. While one fails, both trust buttons are disabled and the dialog says why. Otherwise you can reject the certificate, trust it for this session, or trust it permanently.

When it goes wrong

The server does not trust you yet
When a server drops the connection or answers Bad_SecurityChecksFailed, OPC Studio says the server most likely does not trust this client, and gives you its own thumbprint to find in the server's trust list.
Login refused
A rejected user name, password or signature says so, and offers Fix credentials, instead of a bare status code.
Our own certificate
An invalid URI, an invalid time or a refused use of the client certificate is reported as being about your side of the handshake.
A changed certificate
If the certificate you reviewed changes during the connect, or differs from the one you trusted on a given date, the connection stops and says so in red.
A clear password
A password that would travel unencrypted is refused before it is sent, with the reason.

A trust list you can read

Certificates live in your data folder in the usual pki/ layout, named after their common name and SHA-1 thumbprint, so you can manage them by hand. A rejected certificate wins over a trusted one. Your own certificate is created on first start, and you can export its public half from the Certificates panel. Revocation lists are not read yet.

pki/
├─ own/
│  ├─ cert.der
│  └─ private/key.pem
├─ trusted/
│  ├─ certs/
│  └─ crl/
├─ rejected/
│  └─ certs/
└─ issuers/
   ├─ certs/
   └─ crl/
The first-contact trust dialog for Line 2 edge gateway, a sample certificate: its SHA-1 thumbprint in large grouped hex, subject, issuer, ApplicationUri, addresses, validity, key and both fingerprints, five checks (self-signed, valid now, host matches, ApplicationUri matches, key fits the policy), with Reject, Trust for this session and Trust permanently.

Light or dark, it is the same tool.

Twin dark and light themes, dark by default, built to sit next to your IDE. Drag to compare.

OPC Studio connected to the built-in Bench simulator, with the Intake overview subscription: the servers explorer on the left; a grid of 12 monitored items with value, unit, StatusCode and source time, where Turbidity of filter F-202 is struck through in red as Bad_SensorFailure and OutletFlow of remote unit RTU-7 is in italics as Uncertain_LastUsableValue; and the inspector showing the Speed node in three notations (ns=, nsu= and browse path), its DataValue with the Variant bytes, and a note that the device clock is 74 seconds behind the server.

And the rest of the toolbox

Problems first
Untrusted certificates, refused sessions, Bad or stale items and clock differences are listed most severe first and counted in the status bar, and each opens the tab that shows it. Unacknowledged alarms have their own count on the bell.
Live chart
Plot up to four numeric items of a subscription as they are published, with now, min, average and max for each, and a notice when the series mix units.
Server page
State, uptime, ServiceLevel, the server's clock against this computer's, round trip, the session and the secure channel, BuildInfo, OperationLimits and the NamespaceArray.
Recording
Record a session's values to CSV and its traced messages to a trace file, then reopen the recording read-only in the Trace and Chart views.
NodeId notations
ns= index, nsu= URI or browse path, for every grid and inspector at once. Files store only the URI form, because an index belongs to one server session.
Command palette
Ctrl K (Cmd K on macOS) reaches every server, subscription, node, method and action without hunting through the tree.
Import and export
Move servers between machines as one JSON file with their sites, never with passwords. Importing never overwrites a server silently: it asks whether to rename or replace.
Event log
The last 2,000 events the server sent, with the EventFilter that selected them in plain view and the start and end of each refresh marked.
Fonts and icons inside
Inter, JetBrains Mono and the Lucide icons are embedded in the app, so it looks the same on every system with nothing else to install.

Nothing leaves your machine.

Read the privacy policy
No account
Install it and connect. There is nothing to sign into.
No telemetry
No analytics and no update checks. The app talks only to the OPC UA servers you set up and to its own simulator.
Your files
Servers, certificates and the trust list stay on your computer; recordings go to a folder in your data folder, and watch lists, CSV exports and exported server lists are saved where you choose.
Native and MIT licensed
Rust with egui, from one codebase for macOS, Windows and Linux, with no runtime to install, under the MIT license.

Download OPC Studio

Version 0.1.0, free and open source.

Windows

x64 installer

Your system
Coming soon

The Windows installer is on its way.

macOS

Apple silicon

Your system
Download .dmg

A disk image for Macs with Apple silicon.

Linux

x86_64

Your system
Coming soon

The .deb package and the AppImage are on their way.

Builds are not code-signed yet: a downloaded copy on a Mac may be reported as damaged until you clear its quarantine flag (xattr -dr com.apple.quarantine "/Applications/OPC Studio.app" in Terminal), and Windows shows a SmartScreen warning.