Easy to use
Connect, read, done. No protocol details, no transaction IDs, no boilerplate.
Clean async API for simple use, raw streams for reactive pipelines.
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.
| Typical Modbus library | TurboModbus | |
|---|---|---|
| Polling | Manual while loop with Task.Delay | Fluent Poll() builder → Akka.Streams Source |
| Change detection | Roll your own diffing | Built-in ChangeDetectionStage |
| Backpressure | None — slow consumers drop or queue unbounded | End-to-end via Akka.Streams |
| Connection lifecycle | Try/catch around every call | Actor-supervised with Disconnected event |
| Composition | One client, one device, manual orchestration | Compose sources, flows, and stages freely |
| Transaction IDs | Exposed or manual | Handled internally — never in your code |