Skip to content

TurboModbusModbus TCP on Akka.Streams

Clean async API for simple use, raw streams for reactive pipelines.

TurboModbusTurboModbus

Why TurboModbus?

Most .NET Modbus libraries give you a socket wrapper with synchronous reads. That works — until you need to poll dozens of registers, react to changes, compose multiple devices, or handle backpressure in a real production system.

TurboModbus takes a different approach. It's built from the ground up on Akka.Streams, so every read, write, and poll flows through a composable, backpressure-aware pipeline. You get a simple ReadAsync / WriteAsync API for straightforward use cases — and full access to raw Akka.Streams flows when you need more control.

What sets it apart

Typical Modbus libraryTurboModbus
PollingManual while loop with Task.DelayFluent Poll() builder → Akka.Streams Source
Change detectionRoll your own diffingBuilt-in ChangeDetectionStage
BackpressureNone — slow consumers drop or queue unboundedEnd-to-end via Akka.Streams
Connection lifecycleTry/catch around every callActor-supervised with Disconnected event
CompositionOne client, one device, manual orchestrationCompose sources, flows, and stages freely
Transaction IDsExposed or manualHandled internally — never in your code

Who is it for?

  • IoT / SCADA applications that poll many registers across devices and need to react to changes efficiently.
  • Akka.NET users who want Modbus to fit naturally into an existing actor system or stream topology.
  • Anyone tired of writing polling loops — define what to poll, get a reactive stream back, compose from there.

Released under the Apache 2.0 License.