OPC UA Client C++ SDK
Developing an OPC UA Client Application from scratch can be a tedious process. Just like a Carpenter needs sharp tools to do his job quickly and with quality, you need a handy software library that implements all heavy-lift OPC UA staff. With such tools, you can focus on your application logic without stressing about coding.
Our Software Development Kit (SDK) Implements an OPC UA communication stack and provides high-level classes to connect to OPC UA Servers and send OPC UA requests. Then, responses can be received either synchronously, or asynchronously from callbacks.
What is it For?
The perfect targets are high-performance OPC UA applications that run in PC or cloud environments. At the same time it is resource unpretentious and can run on lower end hardware such as Raspberry PI.
Who is it For?
For Software Developers who like to work smarter, not harder 🤓

Here’s What Makes Our OPC UA Client C++ SDK stand out:
- Other SDKs available in the market do not utilize the power of standard C++ capabilities introduced in its modern versions (C++ 17). They might have their own custom type definition even for basic data types that exist in any C++ implementation such as bool or float, not speaking about std::string or std::vector.
Whenever possible, our SDK uses standard C++ data types. Moreover, it is designed following the “Low Code” philosophy. That is, Developers using it would need to write minimal code lines. Which translates to faster development duration (read “lower product costs”) and faster time to market.
- Easily integrates with your application: stores any type of C++ variable in the request context. This might be the IDs of the GUI widgets where data values read from the server should be written to. Or this might be a smart pointer to the object that must be available when the response is received. This variable is available when you receive a callback, together with the original request and the response objects.
- Eliminates memory leaks by using smart pointers for object lifetime management.
- Automatically re-connects to servers. Moreover, after reconnecting, subscriptions and monitored items are created automatically.
- Supports complex data types. Note that while many SDKs require complex data types to be known before compile time to generate corresponding classes for each type, in our SDK complex data types are discovered at runtime and represented with a single class that allows accessing members as key-value pairs by iterating over them in your application.
- More advantages of using modern C++: when a request is sent, the result is returned using C++ “future”. You can block there and wait synchronously until the response is returned. Or / and get the response by handling callbacks. Speaking of callbacks, there’s no need to implement interfaces or functions because you can just use lambda functions.
For more technical details please refer online User Manual: https://onewayautomation.com/opcua-sdk-docs/html/features.html#features
Or see it on action: clone the sample application using it from Git repository https://github.com/onewayautomation/ogamma-sdk-sample-app
If you would like to get your OPC UA application running smoothly without the hassle, speak to us about quotes by emailing sales@onewayautomation.com
FAQ:
- Why should I use One-Way Automation’s commercial SDK when there are open-source projects for C or C++ are available?
From one side, an open-source library seems financially more feasible. But if you compare that financial advantage with the number of hours your developers would spend using those SDKs without support, it might very soon become not-significant.
Also, keep in mind that the open-source libraries are free, but you would not have control on it, it doesn’t become yours. Perhaps you can make changes on your copy as you desire, but it might be problematic to merge that code to the main code branch. It is owned by library maintainers, and they are often hard to reach. So eventually often you might end up maintaining your own fork of the library.
- Can I use it to write applications for Windows using Visual Studio? Or for Linux, or for Raspberry PI?
Yes! The SDK is cross-platform.
- How about licensing and pricing?
There are 2 types of licenses:
-
- Binary License. Rights to use header files and pre-built binary libraries for one of the supported target platforms are granted for one Developer. Binaries can be included into commercial end product distribution packages.
The price tag is $2900 USD per Developer.
- Binary License. Rights to use header files and pre-built binary libraries for one of the supported target platforms are granted for one Developer. Binaries can be included into commercial end product distribution packages.
-
- Source Code License. Rights to use full source code to build binary libraries for any target platform are granted for one Developer. Those binary libraries then can be included into commercial end product distribution packages.
Note that the source code cannot be re-distributed.
The price tag is $5800 USD per Developer.
- Source Code License. Rights to use full source code to build binary libraries for any target platform are granted for one Developer. Those binary libraries then can be included into commercial end product distribution packages.
- What development tools do I need to use the SDK?
In Windows, CMake and Visual Studio Community Edition (2022 or 2019).
In Linux and Raspberry PI – GCC and CMake.
- Do you offer an evaluation version?
Yes, Binary Edition is available to download via our online store. It has a limitation: the process exits after running for one hour.
Please select desired platform version to download it:
- Can I write a multi-threaded application with it?
Yes. Moreover, no support for single-thread mode.
- Does it have some helpers like convert any data type value to string or JSON?
Yes. The Variant class (that encapsulates variable values) as well as some other classes such as DateTime has a toString() method to serialize the value as string.
- Do I need to compile dependencies?
The SDK uses some open-source dependencies, but you don’t need to include their header files or build them when you build your application code.
Binary Edition includes pre-built binaries of dependency libraries.