// the find
locka99/opcua
A client and server implementation of the OPC UA specification written in Rust
A full OPC UA client and server implementation in Rust, targeting the embedded, micro, and nano profiles of the IEC 62541 spec. OPC UA is genuinely complex — binary encoding, security profiles, subscriptions, a typed address space — and this repo takes a serious run at all of it. The target audience is Rust developers building industrial IoT or SCADA-adjacent software who want memory safety without writing a C FFI wrapper around open62541.
Fuzz targets exist for both the comms layer and binary deserialization — exactly where a protocol parser will blow up in production. The generated nodesets (40+ files under address_space/generated/) track the OPC UA information model from the actual spec rather than hand-rolling a subset. The CI runs separate verification jobs for address space, node IDs, status codes, and supported messages, which is a sign someone is actually tracking conformance rather than hoping. Crypto coverage is real: AES, RSA, X.509 certificate store, multiple security policies — not just the None profile.
Docs are self-described as 'work in progress' and the client tutorial is the main guide; anyone doing anything non-trivial will spend a lot of time reading source. Profile support tops out at nano/micro/embedded — Standard profile and higher facets (aggregation, historian) aren't there, which rules it out for most SCADA integrations without significant work. Historical access (lib/src/server/historical/) appears stubbed and not implemented. PubSub (the MQTT/AMQP transport added in OPC UA 1.04) has service type definitions generated but no evidence of a working implementation, so if your environment is moving toward PubSub this won't help you.