In developmentThe SDK is currently being designed. API surface and NuGet package coming in October 2026.
Planned protocols

Modbus RTU

Full Modbus RTU master/slave. FC 1-6, 15-16. Configurable Unit ID, timeouts, CRC validation.

Planned

Modbus TCP

Modbus TCP client/server over a configurable port (502 by default). MBAP header, transaction tracking, multi-master support.

Planned

Serial RS232

Generic RS232 serial port. Full line config: baudrate, parity, data bits, stop bits, handshake.

Planned

TCP/IP Client

TCP client with async receive loop, reconnect policy, and configurable framing.

Planned

TCP/IP Server

TCP server accepting multiple simultaneous clients. Broadcast or targeted send.

Planned

UDP

UDP socket with independent local/remote port binding and async receive.

Planned

Siemens S7

Siemens S7-300/400/1200/1500 via Sharp7. Full DB/M/I/Q read-write with type safety.

Planned

OPC UA

OPC UA client following IEC 62541. Secure channel, session management, subscriptions.

In dev

Omron FINS

Omron FINS client for CS/CJ/NJ series PLCs over UDP/TCP. Read/write CIO, DM, WR and HR memory areas.

In dev
Preview

One interface. Any protocol.

Every protocol will share the same base methods — Connect, Disconnect and the rest of the common interface — plus its own extended methods specific to that protocol. Switch between Modbus, S7, Serial or UDP without relearning the API.

C# — Tyrant SDK (illustrative example)
// Every protocol shares the same base methods (Connect, Disconnect...) // and adds its own extended methods for that specific protocol. using TyrantSDK; using TyrantSDK.Protocols; // Modbus RTU — base + extended methods var rtu = new ModbusRtu("COM3", baudRate: 9600); await rtu.ConnectAsync(); // base var regs = await rtu.ReadHoldingRegistersAsync(unitId: 1, start: 0, count: 10); // extended await rtu.WriteSingleCoilAsync(unitId: 1, address: 0, value: true); // extended await rtu.DisconnectAsync(); // base // Modbus TCP — same base, same extended method names as RTU var tcp = new ModbusTcp("192.168.1.50", port: 502); await tcp.ConnectAsync(); // base var holding = await tcp.ReadHoldingRegistersAsync(unitId: 1, start: 0, count: 10); // extended // Siemens S7 — base + its own extended methods var s7 = new S7Client("192.168.1.50", rack: 0, slot: 1); await s7.ConnectAsync(); // base var val = await s7.ReadAsync<float>("DB1.DBD0"); // extended await s7.WriteAsync("DB1.DBW2", (short)100); // extended // Serial RS232 — base + its own extended methods var serial = new SerialPort("COM4", baudRate: 19200); await serial.ConnectAsync(); // base await serial.SendAsync("AT+STATUS\r\n"); // extended var line = await serial.ReceiveLineAsync(); // extended // UDP — same base as everything else, its own extended send/receive var udp = new UdpClient(localPort: 9000, remoteHost: "192.168.1.20", remotePort: 9001); await udp.ConnectAsync(); // base await udp.SendAsync(new byte[] { 0x01, 0x02, 0x03 }); // extended

This is an illustrative code example — the final API may change before release.

Got thoughts on the API design? Suggest it →

Get notified on release

Leave your email and we'll let you know when the SDK is available.