iOPCPlayer app icon

Version 2.0 · Native · macOS Tahoe · Open source

The OPC UA workbench
that belongs on your Mac.

Browse address spaces, read and write attributes, call methods, subscribe to live data and events, then model your own information and export a runnable open62541 server. Built in Swift 6 and C++, designed around Liquid Glass.

Now available on the Mac App Store, reviewed and signed by Apple, for macOS 26 Tahoe and later. Prefer to build it yourself? It's fully open source.

Not for safety-critical control

iOPCPlayer is a tool for testing OPC UA connections, exploring servers and running benchmarks. It is not certified or approved for industrial use (for example to IEC 61508 or IEC 62443). Do not use it to operate, control or safeguard machines, plants or processes where a failure could harm people, damage equipment or stop production. On live plants, connect with a read-only profile.

New in 2.0

Built for long sessions on real plants.

Version 2.0 arrives as an update through the Mac App Store.

Client capabilities

Everything you reach for during commissioning.

A complete OPC UA client (from discovery to history) that never lies about what the server actually supports.

Discovery & Connect

Endpoint discovery with None / Sign / Sign & Encrypt, anonymous or username/password, X.509 client certificates. Find servers via a discovery server (LDS, LDS-ME) or Bonjour, and keep connection profiles. A keepalive watches the session; after a drop the app resumes it or re-creates every subscription and monitored item on its own, and Retry Now skips the wait.

Several servers at once

Connect to several servers in parallel, each with its own traffic light in the sidebar. Switch with one click; the other connections keep their subscriptions and recordings running in the background.

All Servers Monitor

The monitored items of every connection in one table with a server column, stale markers and a shared trend of up to eight items from different servers. Compare on Other Servers finds the same node on the other connections by its browse path.

Workspaces

Every server remembers its subscriptions, monitored items and event monitor and offers to restore them on the next connect. Save complete multi-server setups as .iopcworkspace files (never with passwords), and import or export item lists as CSV or JSON.

Read-only for live plants

A read-only profile blocks writes, method calls, alarm acknowledgements, node management and history updates for that server, while browsing, reading, subscriptions and history reads keep working.

Reverse connect

When the plant firewall only allows outgoing connections, the server connects to your Mac (port 4844 by default). Only the expected server URI is accepted, and secure channels require a trusted certificate.

Certificate pinning

Trust-on-first-use for server certificates: check subject, validity and SHA-256 fingerprint, then pin it. If the server later presents a different certificate, a warning shows the old and new fingerprints, and replacing it needs a second confirmation. Certificates outside their validity period are never trusted.

Address-space browsing

Hierarchical tree with an address bar for NodeIds, nsu= ids and browse paths such as /Objects/2:Line1, search across the whole server, per-server favourites, a references tab, back/forward navigation and type-hierarchy walks.

Attributes, read & write

All 22 standard attributes with a type-aware editor: Boolean toggles, steppers, date pickers, ByteString, NodeId, GUID, LocalizedText, and arrays for twelve primitive types.

Methods & programs

A typed form for every argument (including the server's own structures, enumerations and arrays) and a Methods & Programs window with live program state, every action and a call history.

Custom data types

Structures, unions and enumerations defined by the server are identified automatically (DataTypeDefinition, or the type dictionary on older servers) and shown, written and passed to methods with all their fields.

Subscriptions & MonitoredItems

Full professional parameter sheet: publishing interval, lifetime & keep-alive counts, priority, per-item monitoring mode and DataChangeFilter deadbands.

Data Monitor

Cards, table and dashboard with sparklines and statistics. Drag nodes in (a whole object adds all of its data points) and keep it next to your work as a side or top panel, or in its own window.

Data points

Every variable of the server in one window with live values, filters, writing and change logging, plus the list of data types the server defines.

Events

Server-side OfType and severity filters, the server's own event types and fields, and an inspector that shows every field of an event, with active/inactive, acknowledged and confirmed states.

Alarms & Conditions

An Alarms view with the current state of each condition and ConditionRefresh. Acknowledge (also several at once) and confirm with a comment, enable or disable conditions, and shelve them once or for 15 min, 1 h or 8 h.

HistoryRead

Raw values, historical events and server-computed aggregates (average, minimum, maximum and more per interval) via HistoryRead, with chart, Load More and CSV/JSON export, plus a server-vs-local toggle.

HistoryUpdate

Insert or replace values and delete raw time ranges on the server, straight from the History view, with a confirmation before anything is overwritten or deleted.

Session recording

Each connection can be recorded as a session in a local database (data changes, events, writes and method calls) with a timeline, notes and CSV/JSON export. Nothing leaves your Mac.

Query

Find every instance of a type with the OPC UA Query service. Experimental: servers without Query answer BadServiceUnsupported, and the app shows exactly that.

Performance test & long-run monitor

Benchmark reads 10 to 5000 times in a row, or watch a connection for hours: latency per interval, errors, notifications, drops and availability, with chart, event list and JSON/CSV export.

Multi-server stress test

Load several servers at the same time (3 minutes by default) with reads, browses and subscriptions in extra sessions. Per server: requests/s, p50/p95/p99 latency, errors, drops and a verdict, exported as JSON or CSV.

Server NodeManagement

Add objects and variables or delete nodes on the connected server via AddNodes / DeleteNodes, right from the browser's context menu, with a confirmation before deleting.

Simulation server & PubSub

Host your model or the built-in demo in an embedded open62541 server with animated values, events, alarms and history, optional encryption and user login, and publish or subscribe via PubSub (UADP over UDP multicast). No external server required.

English & German

The complete interface and the built-in help are available in English and German and follow your Mac's language settings.

Stub honesty

Anything not fully wired returns the spec-correct BadServiceUnsupported instead of a fake Good, so the UI never misleads you.

A look inside

Native to the bone.

Real screenshots of iOPCPlayer 2.0 with the built-in demo plant. Every view is a native Mac interface in Liquid Glass.

Main window connected to the demo server: node tree with Fill Level selected, its attributes and the docked Data Monitor with eight live cards and sparklines.
OPC UA, native on your Mac. Browse the address space and watch live values side by side.
Data Monitor in Dashboard view with eight live items, four of them compared in a normalized trend over the last minute.
Every signal. One live view. Tune sampling and deadband, then follow every trend live.
Two server connections in the sidebar and the All Servers Monitor listing the items of both servers, three of them compared in a shared trend.
All your servers at a glance. Connect to several servers and compare their values in one table.
Alarms view of the Events tab with four active, unacknowledged alarms and the selected Overfill Alarm with its fields and the Acknowledge and Confirm buttons.
Alarms you can act on. See active alarms with all their fields, then acknowledge or confirm.
History tab with three minutes of raw server history of the motor temperature as a chart with minimum, maximum and average.
Server history, charted. Read raw values or aggregates from the server and chart them.
Simulation Server tab of the running server with its Security & Network settings and the Simulation card: animated values, events and alarms, PubSub publishing.
A test server built right in. Your model as a local server: animated values, alarms, PubSub.
Professional NodeSet Editor with the demo project open: modeling categories, the object types and the inspector of FillerType with its components.
Model your own NodeSets. Design types and instances, validate them and save as NodeSet2.xml.
Methods & Programs window with the Start Batch method selected, its typed input arguments, the result of the last call and the call history.
Call methods with typed forms. Every method in one window, with typed inputs and a call history.

NodeSet editor · UA Part 6 §F

Model it here. Run it anywhere.

Design an information model in a Mac-native editor and export a spec-conformant NodeSet2.xml, then let iOPCPlayer generate a complete, runnable open62541 server around it.

  • Method InputArguments / OutputArguments as proper Property nodes with correct back-references and modelling rules.
  • StructuredDataTypes with a full <Definition> block, union/optional fields and a sibling Default Binary encoding object.
  • Enumerations with both legacy EnumStrings and modern EnumValues.
  • Generates main.cpp boilerplate, namespaces, structure & enum definitions and method-callback stubs, ready to compile.
  • Real documents: undo, save prompts, a recovery copy after a crash and a lossless NodeSet2.xml round trip with namespace and reference checks.

Built for the platform

A real Mac app, not a port.

Modern toolchain, native materials, and credentials handled the way macOS expects.

Swift 6 · C++

Strict-concurrency Swift over a C++ / Objective-C++ bridge to open62541, statically linked with mbedTLS.

Liquid Glass

macOS Tahoe deployment target using Liquid Glass materials semantically throughout the interface.

Keychain & Sandbox

App Sandbox + Hardened Runtime. Server passwords and client-certificate paths live in the Keychain; trusted server certificates are pinned as files inside the app's sandbox container. Plaintext credentials never touch the database.

Open source

Everyone's welcome to make it better.

iOPCPlayer is MIT-licensed. Found a bug or missing a service? Fork it, fix it, open a merge request. I review and merge.

  1. 1

    Fork & branch

    Fork the repository on GitLab and create a topic branch for your change.

  2. 2

    Build & verify

    Run ./setup_open62541.sh, build for arm64, and keep the test suite green.

  3. 3

    Open a merge request

    Push your branch and open an MR. The template walks you through what to include.

  4. 4

    Review & merge

    I review every contribution personally and merge what fits. Credit stays with you.

Support

Help, FAQ and direct contact.

Email the developer directly, browse the FAQ and getting-started guide, or open a public ticket on the issue tracker. Whatever works for you.