---
title: OPC UA
slug: api-docs/opc-ua-concepts
description: How Litmus Edge models OPC UA servers, sessions, namespaces, and node browsing. Background reading before using the OPC UA endpoints to connect to PLCs and historians.
docTags: 
createdAt: 2026-05-11T22:03:49.314Z
---

# OPC UA Advanced Driver

OPC UA is the most common protocol customers integrate with. Litmus Edge ships with several OPC UA drivers, but **OPC UA Client Advanced** is the one to use for new integrations.

## Driver IDs

| Driver name            | Driver ID                              | When to use                                                                 |
| ---------------------- | -------------------------------------- | --------------------------------------------------------------------------- |
| OPC UA Client Advanced | `2372E68F-BA1B-46E9-BC07-E92CA006B377` | Default for new integrations. Supports Browse, DynamicBrowse, StreamBrowse. |
| OPCUA client           | (legacy)                               | Older deployments only                                                      |
| OPCUA client Poll      | (legacy)                               | Older deployments only                                                      |

The two legacy drivers exist for backwards compatibility with collections created before Advanced was available. New work should use Advanced.

## What "Advanced" gets you

- **Browse**: discover the full address space of the OPC server and import nodes as tags (no manual NodeId entry).
- **DynamicBrowse**: re-browse on-demand for servers whose address space changes.
- **StreamBrowse**: large-server browsing without loading the whole tree at once.
- **Security policies**: None / Basic128Rsa15 / Basic256 / Basic256Sha256, plus user / certificate auth.
- **Subscription mode** (push from server) and **polling mode** for servers without subscriptions.

## Create a device with the Advanced driver

GraphQL `CreateDevice` mutation against `/devicehub/v2`. Minimum fields:

- `DriverID`: `2372E68F-BA1B-46E9-BC07-E92CA006B377`
- `Name`: human label
- `DeviceProperties`: server URL (`opc.tcp://host:port`), security policy, auth, etc. - exact fields come from `GetDriver` template

Use `GetDriver(ID: "2372E68F-...")` to fetch the full property schema before constructing the mutation.

## Device Discovery Tool

The **Device Discovery Tool** endpoint is **OPC UA Advanced only**. Point it at a server URL and it returns the server's endpoint descriptions, supported security policies, and certificates - useful before creating a device because you know exactly what security parameters the server accepts.

## Browse a device's address space

Once a device exists:

1. `CreateBrowseTask` - configure the browse (root NodeId, depth, etc.)
2. `StartBrowseTasks` - run it
3. `BrowseTask_GetFoldersForTreeView`, `BrowseTask_GetFolderItems` - read results
4. `Cart_AddItems` -> `Cart_CreateAllRegisters` - turn selected nodes into tags

See [Browse - Bulk Tag Discovery workflow](#).

## Embedded OPC UA server (export tags out)

Separate from the OPC UA *client* driver, Litmus Edge has an embedded OPC UA *server* that re-exposes DeviceHub tags to downstream OPC UA clients. APIs at `/opcua/v2`. See [Configure OPC UA Server workflow](#).
