#scada #ics #security #scada-ics

dnp3

Rust implementation of DNP3 (IEEE 1815) with idiomatic bindings for C, C++, .NET, and Java

19 releases (8 stable)

1.7.0-RC1 Nov 14, 2025
1.6.0 Jun 24, 2024
1.6.0-M2 Apr 25, 2024
1.5.2 Jan 16, 2024
1.2.0 Nov 11, 2022

#216 in Network programming

Download history 226/week @ 2025-10-20 267/week @ 2025-10-27 300/week @ 2025-11-03 175/week @ 2025-11-10 121/week @ 2025-11-17 214/week @ 2025-11-24 288/week @ 2025-12-01 271/week @ 2025-12-08 543/week @ 2025-12-15 206/week @ 2025-12-22 60/week @ 2025-12-29 286/week @ 2026-01-05 358/week @ 2026-01-12 513/week @ 2026-01-19 217/week @ 2026-01-26 194/week @ 2026-02-02

1,293 downloads per month
Used in dnp3time

Custom license

1.5MB
39K SLoC

Commercial library by Step Function I/O

DNP3

Rust implementation of DNP3 (IEEE 1815) with idiomatic bindings for C, C++, .NET, and Java.

Features

  • Subset Level 3 master and outstation components in a single library
  • Written in safe Rust with idiomatic bindings for C, C++, .NET Core, and Java.
  • Supports TCP, TLS, and serial communication channels
  • TLS is implemented using rustls not OpenSSL.
  • Automatic mapping between DNP3 and higher-level measurement types
  • Built-in logging and protocol decoding
  • Blazing fast (and secure) zero-copy / zero-allocation parsing of application data
  • Fully asynchronous implementation scales to the OS limit
  • Runs on all platforms and operating systems supported by the Tokio runtime:
    • Official support for: Windows x64 and Linux x64, AArch64, ARMv7 and ARMv6
    • Unofficial support: MacOS, PowerPC, MIPS, FreeBSD, and others

Cargo Features

Default features can be disabled at compile time:

  • tls - Build the library with support for mutually authenticated TLS using ring for cryptography.
  • tls-aws-lc - Same as the tls feature but uses aws-lc-rs for cryptography.
  • serial - Build the library with support for serial ports

Optional features that may be enabled at compile time:

  • serialize - Add serde de(serialization) support for public configuration types.

License

This crate is made available under a non-commercial / non-production license. Refer to LICENSE.txt for the terms of this non-commercial license.

This software is publicly available, but is not "open source". You must purchase a commercial license to use this software for profit.

Please inquire about commercial licensing on our website:

https://stepfunc.io/contact/

Bindings

Bindings in C, C++, Java, and .NET Core are available for this library. See the documentation for more details.

Dependencies

~8–33MB
~477K SLoC