MarcandCopilot 24b8ffec76 Stop counting credit stalls where the transport owns flow control
The CreditStalls diagnostic reported 560,000 stalls on opc.quic runs that
simultaneously produced the highest throughput measured anywhere in the
benchmark - roughly double the inline figure. Nothing had stalled.

DataChannelCredit.TryConsume counts a stall whenever the send window is
smaller than the payload, and the window was still consulted over QUIC,
where the transport provides its own per-stream and per-connection flow
control and CREDIT frames are neither sent nor expected. Both the Part 6
errata and this repository's own documentation state the counter should
stay at zero there.

The window is now simply not consulted where HasTransportFlowControl is
true, rather than being consulted and its answer discarded - the latter
is how the defect arose, and it had already been half-applied by seeding
the window with uint.MaxValue, which hid the intent without removing the
counting. The inline path is untouched: over opc.tcp and opc.wss the
credit window is the flow control and its stall counter is a real signal.

The defect was diagnostic only. The QUIC send path already bypassed
credit blocking, so the ignored result never gated a send and no
throughput figure was affected.

Validated: the new regression test fails against the previous code and
passes now; data channel tests 206 on net472, net48 and net8.0 and 276 on
net9.0 and net10.0; Opc.Ua.Core.Tests 4134; and the QUIC benchmark now
reports zero stalls in every case.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e1a54492-72a7-420f-bbda-38ae8c07cb92
2026-07-30 16:22:39 +02:00
2020-05-15 19:41:55 +02:00
2021-07-26 10:06:51 +03:00

OPC UA .NET Standard Stack

Release NuGet Downloads Build Tests Coverage

🆕 This is version 2.0 of the OPC UA .NET Standard Stack (current master).

Looking for the supported 1.x release? It lives on the master378 branch (last release: 1.5.378). All new feature work happens here on master; master378 continues to receive security and critical-bug fixes for the 1.x line.

The official OPC Foundation reference implementation of OPC UA for .NET — a certified, cross-platform stack with client, server, PubSub, GDS, complex types, and source-generated tooling. Used in production across industrial control, manufacturing, energy, and IoT systems.

📦 What it is

  • A full-stack OPC UA implementation — Core / Client / Server / PubSub / GDS / LDS / Complex Types / Device Integration libraries built on .NET, with UA-TCP and HTTPS transports.
  • Cross-platform — runs on .NET 10, .NET 9, .NET 8 (LTS), .NET Framework 4.8, and .NET Standard 2.1; ships Native-AOT-friendly assemblies.
  • Certified for compliance — the reference server has been certified through an OPC Foundation Certification Test Lab and is continuously verified against the latest Compliance Test Tool (CTT).
  • Companion-spec coverage — Part 9 (Alarms & Conditions), Part 11 (Historical Access), Part 13 (Aggregates), Part 16 (State Machines), Part 17 (Alias Names), Part 18 (Role Management), Part 20 (File Transfer), Part 100 (Device Integration), OPC 10100-1 (WoT Connectivity).
  • Modern developer surface — first-class Microsoft.Extensions.DependencyInjection hosting (services.AddOpcUa()), fluent server + client builders, source-generated NodeManagers and DataTypes, and an MCP server so LLMs / Copilot can drive an OPC UA client.

For the full feature breakdown see OPC UA Profiles and Facets and the What's New in 2.0 tour.

🚀 Getting started

You need the .NET 10 SDK to build the repo. From the repository root:

dotnet restore UA.slnx
dotnet build UA.slnx

For the supported target frameworks and platform notes see the Developer Guide. The official NuGet packages are published to nuget.org under the OPCFoundation.NetStandard prefix — the meta package OPCFoundation.NetStandard.Opc.Ua pulls in everything, or pick the split OPCFoundation.NetStandard.Opc.Ua.Core / .Client / .Server / .Bindings.Https packages directly. Preview builds for every successful master build are available in the Azure DevOps opcua-preview feed.

Sample applications

Each sample has its own README.md with build and run instructions.

Reference applications

PubSub samples

  • Console Reference PubSub Client — one executable with publisher, subscriber, and external (external-server adapter) modes across the supported transport profiles.

Minimal / Device-Integration samples

More sample projects are maintained in the companion OPC UA .NET Samples repository.

Developer tools

  • OPC UA MCP Server — installable .NET tool and container that exposes OPC UA client operations as MCP tools for LLMs and Copilot.

🔧 Migrating from 1.5.378 to 2.0

The 2.0 release introduces breaking API changes, and comes with a full prescriptive migration guide that links to per-area documentation covering telemetry, packages, source generation, types, encoders, node states, identity, certificates, configuration, sessions / subscriptions, alarms / model change, and TimeProvider.

Most of the mechanical migration work is automated:

  • OPCFoundation.NetStandard.Opc.Ua.MigrationAnalyzer NuGet — install it in your project to get analyzer warnings (UA0001–UA0022)
    • one-click code fixes for the patterns in the guide. Setup steps are in the package's NugetREADME.md.
  • Migration agent skill — the opcua-v20-migration skill walks Copilot / Claude / any coding agent through installing the NuGet, running dotnet format analyzers to apply auto-fixes, and handling the small residual manual patterns. The skill knows which sub-doc to load for each symptom so it stays context-efficient.

If you are still on 1.x and not ready to upgrade, stay on the master378 branch — it continues to receive security and critical-bug fixes.

🤝 Contributing and license

Community contributions are welcome. Fork the repository, make your changes on a branch, and open a pull request; see CONTRIBUTING.md for the contribution workflow.

Contributors must sign the OPC Foundation Contributor License Agreement (CLA). The CLA "I AGREE" gate is presented automatically on your first PR.

The project is licensed under the OPC Foundation MIT License. Report security vulnerabilities via the process documented in SECURITY.md.

📚 Further reading

S
Description
OPC Unified Architecture .NET Standard
Readme
296 MiB
Languages
C# 99.4%
PowerShell 0.2%