OPC UA stack comparison: the 2020 assessment
This is the first comparison we made of the open-source OPC UA stacks, kept and republished as a dated historical record. It was assessed in the first half of 2020 and was never maintained afterwards. It is here because a comparison is more useful when you can see how the field has moved, and for no other reason.
Most of it is now wrong, and that is the point. The columns still name “Free python OPCUA”, which is today's asyncua. There are rows for SOAP-HTTP transports the specification has since retired. There are no ECC security policies because none existed. Read it as a snapshot of 2020, never as guidance about any of these projects today.
For the current answer, see the feature comparison, which is source-verified against pinned releases.
How this differs from how we work now
The 2020 sheet recorded a single yes or no per criterion, drawn from project documentation and hands-on use of the day. It carries none of the file-level source citations that every cell of the current comparison carries, and Parts 7, 8 and 10 were never completed. It is a checked list, not a weighted one: there are no scores in it and it produces no ranking.
Where this sheet and the current comparison disagree, the current comparison is right. Several of those disagreements are not the field moving but the method improving: reading a project's documentation tells you what the project chose to write down, and reading its source tells you what it does.
What has actually changed since
We still keep this comparison because the open-source OPC UA landscape moved substantially in six years, and it did not move uniformly.
- Alarms & Conditions went from essentially one implementation to four, though only three of them complete.
- Historical Access has barely moved on the C side, and is now the sharpest divider between the two C stacks.
- PubSub did not exist in any usable form for the two application-layer stacks in 2020. In 2026 one of them still has none, and the other has a young UDP-only implementation.
The 2020 sheet
Reproduced unchanged. ✅ and ❌ are the sheet's own marks.
| Criterion (as worded in 2020) | S2OPC | open62541 | Free python OPUCA | nodeOPCUA |
|---|---|---|---|---|
| Part 2: Security · Security Profiles · None | ✅ | ✅ | ✅ | ✅ |
| Part 2: Security · Security Profiles · Basic128Rsa15 | ✅ | ✅ | ✅ | ✅ |
| Part 2: Security · Security Profiles · Basic256 | ✅ | ✅ | ✅ | ✅ |
| Part 2: Security · Security Profiles · Basic256Sha256 | ✅ | ✅ | ✅ | ✅ |
| Part 2: Security · User Authentication · Anonymous | ✅ | ✅ | ✅ | ✅ |
| Part 2: Security · User Authentication · User Name Password | ✅ | ✅ | ✅ | ✅ |
| Part 2: Security · User Authentication · X509 Certificate | ✅ | ✅ | ✅ | ✅ |
| Part 2: Security · User Authorization | ❌ | ❌ | ❌ | ❌ |
| Part 2: Security · Security Mode Settings | ❌ | ❌ | ❌ | ❌ |
| Part 2: Security · Application Authentication | ❌ | ❌ | ❌ | ❌ |
| Part 2: Security · Auditing | ❌ | ❌ | ❌ | ❌ |
| Part 2: Security · Roles | ❌ | ❌ | ❌ | ❌ |
| Part 2: Security · Certificate management | ❌ | ❌ | ❌ | ❌ |
| Part 2: Security · Global Discovery Server Security | ❌ | ❌ | ❌ | ❌ |
| Part 3: Address Space Model · Standard datatype | ✅ | ✅ | ✅ | ✅ |
| Part 3: Address Space Model · Standard event types | ❌ | ❌ | ✅ | ❌ |
| Part 3: Address Space Model · Standard reference types | ❌ | ❌ | ✅ | ❌ |
| Part 3: Address Space Model · Basic node class | ✅ | ✅ | ✅ | ✅ |
| Part 3: Address Space Model · Type model for object types and variable types | ✅ | ✅ | ✅ | ✅ |
| Part 4: Services · OPCUA Server Services · Discovery Service Set | ❌ | ✅ | ❌ | ✅ |
| Part 4: Services · OPCUA Server Services · Secure Channel Service Set | ✅ | ✅ | ❌ | ✅ |
| Part 4: Services · OPCUA Server Services · Session Service Set | ✅ | ✅ | ❌ | ✅ |
| Part 4: Services · OPCUA Server Services · Node Management Service Set | ✅ | ✅ | ✅ | ✅ |
| Part 4: Services · OPCUA Server Services · View Service Set | ✅ | ✅ | ❌ | ✅ |
| Part 4: Services · OPCUA Server Services · Query Service Set | ✅ | ✅ | ✅ | ✅ |
| Part 4: Services · OPCUA Server Services · Attribute Service Set | ✅ | ✅ | ❌ | ✅ |
| Part 4: Services · OPCUA Server Services · Method Service Set | ✅ | ✅ | ✅ | ✅ |
| Part 4: Services · OPCUA Server Services · MonitoredItems Service Set | ❌ | ✅ | ❌ | ✅ |
| Part 4: Services · OPCUA Server Services · Subscription Service Set | ❌ | ✅ | ❌ | ✅ |
| Part 4: Services · OPCUA Server Services · DataChange MonitoredItems | ❌ | ❌ | ✅ | ✅ |
| Part 4: Services · OPCUA Server Services · DataChange Filters | ❌ | ❌ | ❌ | ❌ |
| Part 4: Services · OPCUA Server Services · Event MonitoredItems | ❌ | ❌ | ✅ | ❌ |
| Part 4: Services · OPCUA Server Services · Event Filters | ❌ | ❌ | ❌ | ❌ |
| Part 5: Information Model · Standard variable type | ✅ | ❌ | ✅ | ✅ |
| Part 5: Information Model · Standard object type | ✅ | ❌ | ✅ | ✅ |
| Part 5: Information Model · Standard methods | ✅ | ❌ | ✅ | ✅ |
| Part 5: Information Model · Standard datatype | ✅ | ❌ | ✅ | ✅ |
| Part 5: Information Model · Standard objects and variables | ✅ | ❌ | ✅ | ✅ |
| Part 6: Mappings · Data Encoding · OPC UA Binary | ❌ | ✅ | ❌ | ❌ |
| Part 6: Mappings · Data Encoding · OPC UA JSON | ❌ | ❌ | ❌ | ❌ |
| Part 6: Mappings · Data Encoding · OPC UA XML | ❌ | ❌ | ❌ | ❌ |
| Part 6: Mappings · Transport protocols · UA-TCP UA-SC UA Binary | ✅ | ✅ | ❌ | ✅ |
| Part 6: Mappings · Transport protocols · OPC UA HTTPS | ❌ | ❌ | ❌ | ❌ |
| Part 6: Mappings · Transport protocols · SOAP-HTTP WS-SC UA Binary | ❌ | ❌ | ❌ | ❌ |
| Part 6: Mappings · Transport protocols · SOAP-HTTP WS-SC UA XML | ❌ | ❌ | ❌ | ❌ |
| Part 6: Mappings · Transport protocols · SOAP-HTTP WS-SC UA XML-UA Binary | ❌ | ❌ | ❌ | ❌ |
| Part 9: Alarms and Conditions · Condition variable | ❌ | ✅ | ❌ | ✅ |
| Part 9: Alarms and Conditions · Condition model | ❌ | ✅ | ❌ | ✅ |
| Part 9: Alarms and Conditions · Dialog model | ❌ | ❌ | ❌ | ✅ |
| Part 9: Alarms and Conditions · Acknowledgeable Condition Model | ❌ | ❌ | ❌ | ✅ |
| Part 9: Alarms and Conditions · Alarm model | ❌ | ❌ | ❌ | ✅ |
| Part 9: Alarms and Conditions · Audit event | ❌ | ❌ | ❌ | ✅ |
| Part 9: Alarms and Conditions · Condition classes | ❌ | ❌ | ❌ | ✅ |
| Part 9: Alarms and Conditions · System state and alarms | ❌ | ❌ | ❌ | ✅ |
| Part 9: Alarms and Conditions · Alarm metrics | ❌ | ❌ | ❌ | ✅ |
| Part 11: Historical Access · HistoricalNodes | ❌ | ❌ | ✅ | ❌ |
| Part 11: Historical Access · HistoricalDataNodes | ❌ | ❌ | ❌ | ❌ |
| Part 11: Historical Access · HistoricalEventNodes | ❌ | ❌ | ❌ | ❌ |
| Part 11: Historical Access · Historical Audit Events | ❌ | ❌ | ❌ | ❌ |
| Part 11: Historical Access · HistoryReadDetails parameters | ❌ | ❌ | ❌ | ❌ |
| Part 11: Historical Access · HistoryData parameters returned | ❌ | ❌ | ❌ | ❌ |
| Part 11: Historical Access · HistoryUpdateType Enumeration | ❌ | ❌ | ❌ | ❌ |
| Part 11: Historical Access · PerformUpdateType Enumeration . | ❌ | ❌ | ❌ | ❌ |
| Part 11: Historical Access · HistoryUpdateDetails parameter . | ❌ | ❌ | ❌ | ❌ |
| Part 12: Discovery and Global Services · Local discovery | ❌ | ✅ | ✅ | ✅ |
| Part 12: Discovery and Global Services · Multicast subnet discovery’ | ❌ | ✅ | ❌ | ❌ |
| Part 12: Discovery and Global Services · Global Discovery Server | ❌ | ❌ | ❌ | ❌ |
| Part 12: Discovery and Global Services · Information Model for Pull Certificate Management | ❌ | ❌ | ❌ | ❌ |
| Part 12: Discovery and Global Services · Information Model for Push Certificate Management | ❌ | ❌ | ❌ | ❌ |
| Part 12: Discovery and Global Services · KeyCredential Management | ❌ | ❌ | ❌ | ❌ |
| Part 12: Discovery and Global Services · Authorization services | ❌ | ❌ | ❌ | ❌ |
| Part 13: Aggregates · Aggregate Information Model . | ❌ | ❌ | ❌ | ❌ |
| Part 14: PubSub · Transport Protocol Mappings · OPC UA UDP | ✅ | ✅ | ❌ | ❌ |
| Part 14: PubSub · Transport Protocol Mappings · OPCUA Ethernet | ❌ | ✅ | ❌ | ❌ |
| Part 14: PubSub · Transport Protocol Mappings · AMQP | ❌ | ✅ | ❌ | ❌ |
| Part 14: PubSub · Transport Protocol Mappings · MQTT | ✅ | ✅ | ❌ | ❌ |
| Part 14: PubSub · PubSub Security Key Service Model | ✅ | ❌ | ❌ | ❌ |
| Part 14: PubSub · PubSub Configuration Model | ✅ | ✅ | ❌ | ❌ |
| Part 14: PubSub · Message Mapping Configuration Model · UADP Message Mapping | ✅ | ✅ | ❌ | ❌ |
| Part 14: PubSub · JSON Message Mapping . | ❌ | ✅ | ❌ | ❌ |
| Part 14: PubSub · Publisher Configuration · Configure (server-side) Publisher at runtime | ✅ | ❌ | ❌ | ❌ |
| Part 14: PubSub · Publisher Configuration · Configuration representation in information model | ✅ | ❌ | ❌ | ❌ |
| Part 14: PubSub · Subscriber configuration · Configure (server-side) Subscriber at runtime | ✅ | ❌ | ❌ | ❌ |
| Part 14: PubSub · Subscriber configuration · Configuration representation in information model | ✅ | ❌ | ❌ | ❌ |
| Part 8: Data Access | not assessed | not assessed | not assessed | not assessed |
| Part 7: Profiles | not assessed | not assessed | not assessed | not assessed |
| Part 10: Programs | not assessed | not assessed | not assessed | not assessed |
| Criterion (as worded in 2020) | S2OPC | open62541 | Free python OPUCA | nodeOPCUA |
|---|---|---|---|---|
| Core server · x | ❌ | ❌ | ❌ | ✅ |
| Nano Embedded Device Server · ✓ · x | ✅ | ❌ | ❌ | ✅ |
| Micro Embedded Device Server · x · ✓ | ❌ | ✅ | ❌ | ✅ |
| Embedded Server · x | ❌ | ❌ | ❌ | ✅ |
| Standard UA Server · x | ❌ | ❌ | ❌ | ❌ |
| Nano Embedded Device 2017 Server Profile · x | ❌ | ❌ | ❌ | ❌ |
| Micro Embedded Device 2017 Server Profile · x | ❌ | ❌ | ❌ | ❌ |
| Embedded 2017 UA Server Profile · x | ❌ | ❌ | ❌ | ❌ |
| Standard 2017 UA Server Profile · x | ❌ | ❌ | ❌ | ❌ |
| Core 2017 Client Facet · x | ❌ | ❌ | ❌ | ❌ |
| Sessionless Client Facet · x | ❌ | ❌ | ❌ | ❌ |
| Reverse Connect Client Facet · x | ❌ | ❌ | ❌ | ❌ |
| Base Client Behaviour Facet · x | ❌ | ❌ | ❌ | ❌ |
| Discovery Client Facet · x | ❌ | ❌ | ❌ | ❌ |
| Global Discovery Client Facet · x | ❌ | ❌ | ❌ | ❌ |
| Standard DataChange Subscription Server · x | ❌ | ❌ | ❌ | ✅ |
| Standard Event Subscription Server · x | ❌ | ❌ | ❌ | ✅ |
| Password Server Facet · ✓ · x | ✅ | ❌ | ❌ | ❌ |
| Criterion (as worded in 2020) | S2OPC | open62541 | Free python OPUCA | nodeOPCUA |
|---|---|---|---|---|
| Free RTOS · ✓ | ✅ | ✅ | ❌ | ❌ |
| Windows · ✓ | ✅ | ✅ | ❌ | ❌ |
| Linux · ✓ | ✅ | ✅ | ❌ | ❌ |
| Zephyr · ✓ · x | ✅ | ❌ | ❌ | ❌ |
| VxWorks · ✓ | ✅ | ✅ | ❌ | ❌ |
Related
- Current feature comparison — source-verified, four stacks
Historical record, assessed in the first half of 2020 and not maintained since. Superseded in every respect by the current feature comparison. Reproduced for reference only; do not cite any row of it as a statement about a project today. For current data, talk to us.