// the find
gopcua/opcua
Native Go OPC-UA library
A native Go implementation of the OPC UA binary protocol, targeting industrial automation and SCADA use cases. If you need to talk to Siemens PLCs, Beckhoff controllers, or Kepware from Go, this is the only serious option in the ecosystem. It's been running in production at battery manufacturers and IIoT companies, which for an industrial protocol library is the credibility that matters.
The library has genuine production mileage across a wide range of hardware — Siemens S7-1200/1500, Beckhoff, OMRON, ABB — and the compatibility table is honest about what's tested versus what's assumed. The security layer covers the three encryption policies (Basic128Rsa15, Basic256, Basic256Sha256) and all three auth modes including X.509 certificates, which is the full set you actually encounter in enterprise OT environments. The code generation approach for the OPC UA type system (extobjs_gen.go, enums_gen.go, service_gen.go) is the right call for a spec this large — hand-maintaining 400+ type definitions would be a disaster. Integration with Telegraf means it has real-world stress testing from the InfluxDB ecosystem at scale.
The server side is a second-class citizen: encryption is listed as 'Untested' for all non-None policies, and several critical services like TranslateBrowsePathsToNodeIds and HistoryUpdate are missing entirely. If you need to build an OPC UA server, not just a client, plan for gaps. OPC UA JSON and HTTPS transports are explicitly not planned, which cuts off any modern REST-friendly integration path — the binary-over-TCP constraint is fine for factory floor but awkward for cloud-side aggregators. The API has had breaking changes in nearly every minor version (v0.5 through v0.9 all list breaking changes in the README), and the disclaimer that 'APIs will change' while simultaneously claiming production stability is a tension that will bite you if you're not pinning hard. No mention of connection pooling or reconnection behavior in the docs, which matters a lot when your PLC reboots on a shift change.