The industrial protocol stack landscape
Who implements Modbus, OPC UA, BACnet, IEC 104, IEC 61850, Siemens S7, OpenADR, OCPP, DNP3 and IEEE 2030.5? 134 open-source and commercial stacks, verified against their own release channels, and an interactive map to explore them.
Nobody connects a plant, a substation or a building with one library. Every integration leans on stacks written by other people: a C library in a gateway, a Python tool on a laptop, a Java server in a SCADA system, a vendor SDK inside a controller. OT Fabric only makes sense as part of that ecosystem, which is why each of our protocols ships with an interop suite that tests against the established implementations.
So we mapped the ecosystem. This post is the research: ten protocol families, 134 implementations, and what we learned checking every one of them against its own release channel. The interactive version lets you pick a protocol, filter by language, licence and activity, and jump straight to the source.
134 implementations · 10 protocolsExplore the interactive ecosystem mapFilter by language, licence and activity, then jump straight to the source.How we counted
We sort every implementation into one of four groups, because a flat list of repositories hides how the ecosystem actually fits together:
- Independent stacks handle the protocol themselves.
- Derived libraries and bindings wrap, port or extend another stack. They link to their upstream instead of counting as a new engine.
- Commercial SDKs are proprietary or dual-licensed developer libraries, including those without public source.
- Legacy and reference code is historically important but superseded or no longer maintained.
Each entry records its language, licence (as an SPDX expression, read from the licence file, or the licence’s own name where it has no SPDX identifier), protocol roles, documented capabilities, latest release, last commit, stars and forks, and the OT Fabric interop suite that exercises it, if any. Every entry also lists its sources and the date we last verified it.
GitHub Releases are the wrong place to look
The first draft of this inventory took versions from GitHub Releases. Checking each project against the channel it actually publishes to changed a third of the version column:
- NModbus has no GitHub Release objects, but publishes 3.0.83 on NuGet (April 2026).
- jsmodbus shows v2.0.1 as its GitHub Release; npm has 5.0.0, published in September 2026.
- Modbus4J is at tag v3.1.0, ahead of its old 2.x GitHub Release.
- BACnet Stack releases on SourceForge (1.6.1, August 2026), not as GitHub Releases. The project dates back to 2004; the GitHub repository only to 2019.
- BACpypes3 is at 0.0.110 on PyPI and System.IO.BACnet at 4.0.0 on NuGet. Its MIT licence, unclear in the first pass, is confirmed.
- tokio-modbus (0.17.0), simonvetter/modbus (v1.6.4) and NModbus tag and publish without creating GitHub Releases.
- The EPRI OpenADR reference code is BSD-3-Clause throughout; two licences had been left open.
The registry now names the source of every version: GitHub, PyPI, npm, crates.io, NuGet, Maven Central, pub.dev, SourceForge, the Go module proxy or a vendor’s release notes.
Modbus
Very mature. The broadest open-source ecosystem in OT, from microcontrollers to cloud services. Modbus TCP versus serial is a capability, not a separate implementation, and so is client-only versus client and server.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| libmodbus | C | LGPL-2.1-or-later | v3.2.0 Jul 2026 | 4.3k | Independent |
| PyModbus | Python | BSD-3-Clause | 3.16.1 Oct 2026 | 2.8k | Independent |
| NModbus | C# | MIT | 3.0.83 Apr 2026 | 1.1k | Independent |
| goburrow/modbus | Go | BSD-3-Clause | v0.1.0 Sept 2018 | 1k | Independent · quiet |
| Modbus4J | Java | GPL-3.0 or commercial | v3.1.0 Jan 2022 | 1k | Independent · slowing |
| modbus-serial | JavaScript | ISC | 8.0.25 Mar 2026 | 731 | Independent |
| ModbusMaster | C++ (Arduino) | Apache-2.0 | v2.0.1 Sept 2016 | 651 | Independent · quiet |
| modbus-esp8266 | C++ (Arduino) | BSD-3-Clause | 4.1.1 Jan 2023 | 628 | Independent · slowing |
| jsmodbus (node-modbus) | JavaScript | MIT | 5.0.0 Sept 2026 | 512 | Independent |
| simonvetter/modbus | Go | MIT | v1.6.4 Nov 2025 | 455 | Independent |
| j2mod | Java | Apache-2.0 | 3.4.0 Sept 2026 | 337 | Independent |
| tokio-modbus | Rust | MIT OR Apache-2.0 | 0.17.0 Oct 2025 | 567 | Independent |
| digitalpetri/modbus | Java | EPL-2.0 | 2.1.6 Aug 2026 | 863 | Independent |
| go-modbus | Go | MIT | v1.7.1 Oct 2026 | 2 | Independent |
libmodbus, PyModbus, NModbus, digitalpetri/modbus and tokio-modbus are the reference implementations in our modbus-interop suite. goburrow/modbus and ModbusMaster are still widely used but have not changed since 2016 to 2018. On the commercial side, Triangle MicroWorks sells Modbus source libraries, and Modbus4J is dual-licensed by Radix IoT.
OPC UA
Very mature, with a strong commercial market. OPC UA lets you compare independent open source, foundation-backed code and proprietary SDKs side by side. Client/server and PubSub are separate capabilities, and no stack covers every security profile, transport and information model.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| open62541 | C | MPL-2.0 | v1.5.9 Oct 2026 | 3.3k | Independent |
| OPC Foundation UA-.NETStandard | C# | OPC Foundation MIT | 2.0.1 Oct 2026 | 2.4k | Independent |
| node-opcua | TypeScript | MIT | 2.187.9 Oct 2026 | 1.7k | Independent |
| opcua-asyncio (asyncua) | Python | LGPL-3.0 | 2.1.0 Oct 2026 | 1.5k | Independent |
| Eclipse Milo | Java | EPL-2.0 | v1.1.8 Oct 2026 | 1.4k | Independent |
| async-opcua | Rust | MPL-2.0 | 0.19.0 Jul 2026 | 163 | Independent |
| gopcua/opcua | Go | MIT | v0.9.1 Aug 2026 | 1.1k | Independent |
| go-opcua | Go | MIT | v1.6.0 Oct 2026 | 0 | Independent |
| python-opcua | Python | LGPL-3.0 | 0.98.13 Mar 2021 | 1.5k | Legacy · deprecated |
| locka99/opcua | Rust | MPL-2.0 | 0.12.0 Jan 2024 | 576 | Legacy · slowing |
open62541, Eclipse Milo, the OPC Foundation .NET stack, node-opcua and the FreeOpcUa family are the essential open-source references. Two lineages are worth knowing: python-opcua is deprecated in favour of opcua-asyncio, and the Rust code base started by locka99/opcua continues as async-opcua. Unified Automation, Prosys and Softing are the established commercial SDK vendors. OpenOpcUa CoreServer, the native C/C++ runtime behind 4CE Industry’s OOUAMiddleware, takes another route: closed source, but free to deploy without licensing fees.
134 implementations · 10 protocolsSee the OPC UA lineages on the mapFilter by language, licence and activity, then jump straight to the source.BACnet
Mature, but fragmented. BACnet/IP, MS/TP, BACnet/SC and the device profiles make very different demands, so “BACnet supported” on its own says very little. The map records which data links each stack documents.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| BACnet Stack | C | GPL-2.0-or-later WITH GCC-exception-2.0 | 1.6.1 Aug 2026 | 602 | Independent |
| BACpypes3 | Python | MIT | 0.0.110 Sept 2026 | 99 | Independent |
| System.IO.BACnet | C# | MIT | 4.0.0 Jul 2026 | 251 | Independent |
| BACnet4J | Java | GPL-3.0 or commercial | v6.1.0 Mar 2026 | 221 | Independent |
| ulbios/bacnet | Go | MIT | untagged | 22 | Independent · quiet |
| @bacnet-js/client | TypeScript | MIT | 3.3.2 May 2026 | 20 | Independent |
| worldiety/bacnet | Go | BSD-2-Clause | untagged | 0 | Independent |
| go-bacnet | Go | MIT | v0.4.0 Oct 2026 | 0 | Independent |
| @bacnet-js/device | TypeScript | MIT | 0.8.0 Jun 2026 | 4 | Derived |
| BACpypes | Python | MIT | 0.19.0 Jan 2025 | 328 | Legacy |
BACnet Stack stands out: extensive service coverage, embedded targets, and a GPL linking exception that lets proprietary products link it. BACpypes3, BACnet4J and System.IO.BACnet (the stack behind YABE) complete the reference set, and all four run in bacnet-interop. BACpypes3 now also ships an MCP server, so AI agents can talk BACnet. Cimetrics, PolarSoft and SoftDEL lead the commercial SDK market.
IEC 60870-5-104
Specialized. A handful of credible engines, with bindings and forks built on top of them, which is exactly where the relationships matter.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| lib60870 | C | GPL-3.0 or commercial | v2.4.1 Jul 2026 | 602 | Independent |
| OpenMUC j60870 | Java | GPL-3.0 or commercial | 1.8.0 Jul 2026 | – | Independent |
| go-iecp5 (thinkgos) | Go | LGPL-3.0 | v1.2.1 May 2022 | 101 | Independent · archived |
| go-iec104 | Go | MIT | v0.0.3 Oct 2026 | 1 | Independent |
| go-iecp5 (riclolsen) | Go | LGPL-3.0 | v0.4.6 Sept 2026 | 3 | Derived |
| go-iecp5 (wendy512) | Go | LGPL-3.0 | v1.2.6 Feb 2026 | 7 | Derived |
| wendy512/iec104 | Go | Apache-2.0 | v1.0.4 Feb 2026 | 110 | Derived |
| iec104-python (c104) | Python / C++ | GPL-3.0 | 2.2.1 Apr 2025 | 103 | Derived |
The independent engines are lib60870, OpenMUC j60870 and go-iecp5. The Python package c104 binds lib60870; wendy512/iec104 builds on a go-iecp5 fork. The original go-iecp5 was archived in March 2023 and lives on in two maintained forks. j60870 is distributed through OpenMUC and Maven Central (1.8.0) rather than a GitHub repository. MZ Automation, OpenMUC and Triangle MicroWorks offer commercial licences.
IEC 61850 and MMS
Specialized, with few comprehensive implementations. IEC 61850 is not just MMS: it adds information models, GOOSE, Sampled Values and SCL. A stack that only speaks MMS is not an IEC 61850 stack.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| libiec61850 | C | GPL-3.0 or commercial | v1.6.2.1 Sept 2026 | 1.2k | Independent |
| IEC61850bean | Java | Apache-2.0 | 1.9.0 Jun 2020 | 186 | Independent · quiet |
| dscsystems/go-iec61850 | Go | GPL-3.0 | v0.6.4 Oct 2026 | 3 | Independent |
| go-iec61850 | Go | MIT | v1.0.8 Jul 2026 | 0 | Independent |
| go-mms | Go | MIT | v1.0.7 Jul 2026 | 0 | Derived |
libiec61850 is the dominant open-source reference: MMS client and server, GOOSE, Sampled Values, reports, datasets, logging, file services and TLS, with commercial licences from MZ Automation. IEC61850bean (formerly OpenIEC61850) is an established Java MMS implementation, quiet since 2023. dscsystems/go-iec61850 is three months old and worth watching.
Siemens S7
Mature for classic S7comm, constrained beyond it. Talking to an S7-300 over ISO-on-TCP is not the same as talking to an S7-1500 with optimized data blocks and access protection. S7comm and S7commPlus are separate branches on the map.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| Apache PLC4X | Java, Go, C | Apache-2.0 | 1.0.0 Sept 2026 | 1.8k | Independent |
| S7NetPlus | C# | MIT | 0.20.0 Aug 2023 | 1.6k | Independent · quiet |
| python-snap7 | Python | MIT | 3.2.1 Oct 2026 | 858 | Independent |
| gos7 | Go | BSD-3-Clause | untagged | 405 | Independent |
| nodeS7 | JavaScript | MIT | 0.3.18 Jul 2022 | 399 | Independent · quiet |
| Snap7 | C++ | LGPL-3.0 | 1.4.3 SourceForge | – | Independent |
| s7commplus | Python | MIT | 0.2.0 Oct 2026 | 10 | Independent |
| go-s7comm | Go | MIT | v0.7.5 Jul 2026 | 0 | Independent |
| Sharp7 | C# | MIT | 1.1.84 May 2023 | 258 | Derived · quiet |
Snap7 is distributed on SourceForge; the popular GitHub repository under SCADACS is a fork with server extensions, not the canonical source. python-snap7 is no longer a wrapper: since 3.0 (March 2026) it implements TPKT, COTP and S7 natively in Python. Apache PLC4X counts stars for its whole multi-protocol framework. The new s7commplus project opens the S7-1200/1500 branch. Softing siAccess, successor to ACCON-AGLink, and PLCcom for S7 are the commercial options.
OpenADR
Smaller and still evolving. OpenADR 2.0b and 3.x are different technologies, and 3.1 is not backward-compatible with 3.0, so the map separates versions and roles: VEN, VTN and business logic.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| OpenLEADR (Python) | Python | Apache-2.0 | 0.5.36 Sept 2026 | 159 | Independent |
| OpenLEADR (Rust) | Rust | MIT OR Apache-2.0 | 0.2.7 Oct 2026 | 104 | Independent |
| ElaadNL openadr3-client | Python | Apache-2.0 | 2.4.0 Aug 2026 | 5 | Independent |
| avob/OpenADR | Java | Apache-2.0 | untagged | 58 | Independent · quiet |
| go-openadr | Go | MIT | v0.4.0 Oct 2026 | 0 | Independent |
| EPRI OpenADR Virtual Top Node | Ruby | BSD-3-Clause | v0.9.7 Jan 2017 | 51 | Legacy · discontinued |
| EPRI OpenADR Virtual End Node | C# | BSD-3-Clause | v0.7 Aug 2016 | 43 | Legacy · quiet |
| EPRI OpenADR VEN Library | C++ | BSD-3-Clause | v0.7.0 Aug 2016 | 21 | Legacy · quiet |
OpenLEADR covers both generations: Python for 2.0b, Rust for 3.1, where its README is upfront that subscriptions (webhooks) are not supported yet. ElaadNL’s openadr3-client comes from an organization that builds EV charging infrastructure. The EPRI projects are legacy references; EPRI has discontinued support. The OpenADR Alliance’s reference implementation is not publicly available, so it is not on the map, and we found no standalone commercial OpenADR SDKs comparable to other protocols. That branch stays open for verified submissions.
OCPP
Mature for 1.6J, maturing for 2.x. OCPP 2.0.1 is not backward-compatible with 1.6, while 2.1 extends 2.0.1, so a claim of “OCPP support” says little without the version. The map lists versions and roles: the charging station and the CSMS.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| ocpp (The Mobility House) | Python | MIT | 2.1.0 Jul 2025 | 1k | Independent |
| Java-OCA-OCPP (ChargeTime) | Java | MIT | 2.0 Dec 2025 | 380 | Independent |
| ocpp-go | Go | MIT | v0.19.0 Feb 2025 | 377 | Independent · slowing |
| libocpp (EVerest) | C++ | Apache-2.0 | v0.31.1 Dec 2025 | 151 | Independent · archived |
| CitrineOS | TypeScript | Apache-2.0 | v2.0.1 Oct 2026 | 299 | Independent |
| EVerest | C++ | Apache-2.0 | 2026.02.1 Jul 2026 | 282 | Independent |
| SteVe | Java | GPL-3.0-or-later | steve-3.14.1 Aug 2026 | 1.1k | Independent |
| MicroOcpp | C++ | MIT | v1.2.0 Nov 2024 | 548 | Independent |
| rust-ocpp | Rust | MIT OR Apache-2.0 | 3.0.4 Nov 2025 | 105 | Independent |
| ocpp-rpc | JavaScript | MIT | 2.2.1 Jul 2025 | 136 | Independent |
| OCPP.Core | C# | GPL-3.0 | V1.8.0 Oct 2026 | 306 | Independent |
| Open OCPP | C++ | LGPL-2.1 | v1.6.0 Jun 2025 | 175 | Independent |
| OpenOCPP (ChargeLab) | C++ | Apache-2.0 | v1.0.0 Jun 2025 | 90 | Independent |
| ocpp-toolkit (IZIVIA) | Kotlin | MIT | 3.0.0 Sept 2026 | 46 | Independent |
| WWCP_OCPP (Open Charging Cloud) | C# | AGPL-3.0 | untagged | 71 | Independent |
| library-ocpp (Monta) | Kotlin | Apache-2.0 | v3.0.2 Sept 2026 | 6 | Independent |
| e-mobility charging stations simulator (SAP) | TypeScript | Apache-2.0 | v4.12.0 Aug 2026 | 229 | Independent |
| go-ocpp | Go | MIT | v0.1.3 Oct 2026 | 0 | Independent |
| Home Assistant OCPP integration | Python | MIT | v0.12.1 Oct 2026 | 407 | Derived |
| Open e-Mobility (ev-server) | TypeScript | Apache-2.0 | V2.7.8 May 2023 | 176 | Legacy · archived |
| NewMotion OCPP (Scala) | Scala | GPL-3.0 | v9.2.3 Jan 2020 | 212 | Legacy · archived |
| Motown | Java | Apache-2.0 | 0.14.0 Feb 2019 | 44 | Legacy · quiet |
The open-source side is broad, with libraries in Python, Java, Go, C++, Rust, JavaScript, C# and Kotlin. Five of them run in ocpp-interop: The Mobility House ocpp, ChargeTimeEU Java-OCA-OCPP, ocpp-go, EVerest libocpp and CitrineOS. libocpp’s own repository is archived; it now lives inside EVerest, the LF Energy charging station stack. SteVe and OCPP.Core are complete CSMS products rather than libraries, and MicroOcpp brings the station side to microcontrollers. Commercial stacks are sold for both sides, though versions and platforms are rarely published.
DNP3
Mature, with few active open stacks. DNP3 (IEEE 1815) has been the SCADA protocol of North American utilities for three decades, and the commercial side is well established: source code libraries from Triangle MicroWorks, FreyrSCADA and others run inside many RTUs and IEDs. The open-source side has thinned out.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| dnp3 (Step Function I/O) | Rust, C, C++, C#, Java | Non-commercial (Step Function I/O) or commercial | 1.7.0 Sept 2026 | 159 | Independent |
| opendnp3 | C++, Java, C# | Apache-2.0 | 3.1.2 Apr 2022 | 336 | Independent · archived |
| go-dnp3 (DSC Systems) | Go | GPL-3.0-or-later | v0.8.1 Oct 2026 | 2 | Independent |
| dnp3py | Python | MIT | 0.6.0 Sept 2026 | 10 | Independent |
| dnp3 (cB-Sigma) | Go | Apache-2.0 | v0.3.0 Oct 2026 | 0 | Independent |
| nfm-dnp3 | Python | MIT | 1.0.1 Feb 2026 | 0 | Independent |
| go-dnp3 | Go | MIT | v1.3.1 Oct 2026 | 0 | Independent |
| yadnp3 | C++, Python | Apache-2.0 | 3.2.1.4 Oct 2026 | 0 | Derived |
| pydnp3 | Python | Apache-2.0 | 0.1.0 Jun 2018 | 37 | Derived · quiet |
| dnp3-python (VOLTTRON) | Python | Apache-2.0 | untagged | 20 | Derived · slowing |
| dnp3 (Dart and Flutter) | Dart | MIT | 0.3.2 Oct 2026 | 0 | Derived |
| dnp3 (Green Energy Corp) | C++ | Apache-2.0 | 1.0.0 Git tag | 108 | Legacy · quiet |
opendnp3, for a decade the default open-source stack, was archived in September 2022 at 3.1.2, and still sits under the Python bindings pydnp3, VOLTTRON’s dnp3-python and the new yadnp3 fork. Step Function I/O’s Rust library, with C, C++, .NET and Java bindings, is actively maintained, but its licence allows non-commercial, non-production use only, with a commercial licence for production: the map files it under its own licence family, source-available. The rest is young: DSC Systems’ go-dnp3 (GPL-3.0) and cB-Sigma’s dnp3 (Apache-2.0) are pure Go stacks from 2026, both with Secure Authentication, and dnp3py brings a pure Python master and outstation with a MESA DER profile. Four of them run in dnp3-interop: Step Function I/O, opendnp3, DSC go-dnp3 and dnp3py. The Triangle MicroWorks adapter is on hold until its licensed source has an agreed way into the builds.
IEEE 2030.5
Young, and shaped by two mandates. IEEE 2030.5 (Smart Energy Profile 2.0) carries export limits, schedules and prices from utilities and aggregators to inverters, batteries and chargers. California’s Rule 21 made it the default for smart inverters through CSIP, and Australian distributors use CSIP-AUS for dynamic operating envelopes, so most of the open field is a research lab’s, a utility programme’s or one developer’s answer to one of those two profiles.
| Implementation | Language | Licence | Latest release | Stars | Type |
|---|---|---|---|---|---|
| Envoy (ANU) | Python | MIT | v2.5.0 Sept 2026 | 27 | Independent |
| GridAPPS-D server | Go | Battelle BSD | v0.18.0 Oct 2026 | 0 | Independent |
| GridAPPS-D client | Go | Battelle BSD | v0.1.0 Oct 2026 | 0 | Independent |
| py20305 (DER Security) | Python | Apache-2.0 | 0.16.0 Oct 2026 | 4 | Independent |
| sep2_client | Rust | MIT OR Apache-2.0 | 0.1.0 Mar 2024 | 23 | Independent |
| open-dynamic-export | TypeScript | MIT | v0.20.0 Jul 2026 | 54 | Independent |
| VOLTTRON 2030.5 agent | Python | Apache-2.0 | 9.2.0 Oct 2026 | 501 | Independent |
| aio2030dot5 | Python | Apache-2.0 | 0.4.0 Oct 2026 | 0 | Independent |
| gridappsd-2030_5 | Python | Apache-2.0 | untagged | 2 | Independent · slowing |
| go-ieee20305 | Go | MIT | v0.5.2 Oct 2026 | 0 | Independent |
| envoy-schema | Python | MIT | 2.7.0 Sept 2026 | 14 | Derived |
| CACTUS client | Python | MIT | 1.3.3 Oct 2026 | 3 | Derived |
| CACTUS runner | Python | MIT | v2.10.0 Sept 2026 | 7 | Derived |
| EPRI IEEE 2030.5 Client | C | BSD-3-Clause | v0.2.11 Jul 2018 | 95 | Legacy · quiet |
The Australian side is the most active: ANU’s Envoy is a complete CSIP-AUS utility server, with its document models and the CACTUS test harnesses built around it, and open-dynamic-export is a CSIP-AUS client that drives home solar and batteries. In the US, PNNL’s GridAPPS-D, whose Python server never got past alpha releases, published a Go server and client in 2026, DER Security’s py20305 is a new client for CSIP and CSIP-AUS, and VOLTTRON has an agent that connects its devices to a server. The EPRI client, written for California’s certified open-source programme, is the oldest open stack and has not changed since 2018. Four of them run in ieee20305-interop: Envoy, GridAPPS-D (server and client), py20305 and the EPRI client. Commercially, embedded clients such as Kitu’s sit next to the test systems that certification runs on, and few vendors publish versions.
The picture across protocols
| Protocol | Open source | Commercial SDKs | Primary references |
|---|---|---|---|
| Modbus | Very mature | Established | libmodbus, PyModbus, NModbus, Modbus4J, tokio-modbus |
| OPC UA | Very mature | Very established | open62541, OPC Foundation .NET, Eclipse Milo, node-opcua, FreeOpcUa |
| BACnet | Mature, fragmented | Very established | BACnet Stack, BACpypes3, BACnet4J, System.IO.BACnet |
| IEC 60870-5-104 | Specialized | Established | lib60870, OpenMUC j60870, go-iecp5 |
| IEC 61850 / MMS | Specialized | Established | libiec61850, IEC61850bean |
| Siemens S7 | Mature for classic S7 | Established | Snap7, S7NetPlus, python-snap7, Apache PLC4X |
| OpenADR | Smaller, evolving | Not transparent | OpenLEADR (Python and Rust), ElaadNL |
| OCPP | Mature for 1.6J, maturing for 2.x | Established | The Mobility House ocpp, Java-OCA-OCPP, ocpp-go, EVerest libocpp, CitrineOS, SteVe |
| DNP3 | Mature, few active open stacks | Very established | opendnp3 (archived), Step Function I/O dnp3 (source-available), DSC go-dnp3, dnp3py |
| IEEE 2030.5 | Young, growing, profile-driven | Certification-driven | Envoy, GridAPPS-D, py20305, EPRI client (unmaintained) |
These are judgements about maturity and visibility, not measured conformance, security or quality. Our interop suites are where we test behaviour; this map is where we record who is out there.
Help us complete it
This is a strong baseline, not an audited directory. We know it misses implementations outside GitHub, commercial SDK details (versions, platforms, evaluation editions) and capability evidence beyond what each README claims.
The whole map is one JSON file, src/data/ecosystem.json, with sources and a verification date on every entry. Open a pull request to add a stack, a commercial SDK, a correction or interop results, and the map updates when it merges. Maintainers are especially welcome to check their own entries.