One gRPC API for
every industrial protocol.
A single Rust binary that speaks Modbus, OPC UA, EtherNet/IP, Siemens S7, DNP3, BACnet/IP, and MQTT, and exposes them all behind one typed gRPC surface. Read, write, and subscribe to tags on any PLC with one client. Self-hosted on Linux or Windows.
Demo video
Watch the demo
A real run of the Voltrus Gateway binary against a simulated Modbus PLC and a simulated OPC UA server: the same client code connects, reads typed values, writes tags and streams live updates.
Chapters
The problem
Stop writing a different client for every PLC.
Every industrial protocol has its own wire format, addressing scheme, and quirks. The gateway absorbs all of that: your application talks one gRPC API and the gateway drives the device.
The same protocol logic gets re-implemented in every SCADA, HMI, and edge collector. Voltrus Gateway uses the mt-* crates, the protocol engines that also power the MacTools apps, as the single implementation. SCADA shrinks to SCADA concerns; protocol bugs get fixed once.
How it works
One client. Any device. Any protocol.
Point the gateway at a device and talk to it over gRPC. Connect, read or write typed tag values, then subscribe for live updates. The same three calls regardless of protocol.
Open a session
Point the gateway at a device: Modbus TCP, OPC UA endpoint, EtherNet/IP PLC, S7 CPU, DNP3 outstation, or BACnet controller. The gateway holds the connection and speaks the native wire protocol.
Typed tag values
Call ReadTags or WriteTag over gRPC. Values carry bool, int, float, double, string, and bytes plus a source type. A CIP DINT or an OPC UA string round-trips intact, never flattened to a number.
Live updates
Subscribe to tags and receive live server-streamed batches. No polling loop to maintain on the client. The gateway pushes deltas as devices change.
Features
A single binary that replaces a stack of clients.
One canonical, cross-platform implementation of every protocol your plant uses, self-hosted, type-preserving, with native streaming subscriptions.
One binary, seven protocols
Modbus TCP, OPC UA, EtherNet/IP (CIP), Siemens S7, DNP3, BACnet/IP, and MQTT, all over the same API.
Self-hosted & cross-platform
A single binary for Linux (x86_64, aarch64) and Windows (x64). Run it at the edge, in a container, or beside your SCADA. No per-tag licensing.
One canonical implementation
The same mt-* engines that power the MacTools apps. Protocol bugs get fixed once, everywhere.
Discover & browse
Browse tags and discover devices over the same gRPC surface. No separate tooling to map out a PLC's tag namespace.
Supported protocols
Read, write, and subscribe on every protocol below.
Full read, write, and subscribe on seven industrial protocols, all over the same gRPC surface.
# one client, any device: the full gRPC surface rpc OpenSession(ConnectRequest) -> ConnectResponse rpc ReadTags(ReadTagsRequest) -> ReadTagsResponse rpc WriteTag(WriteTagRequest) -> WriteResult rpc SubscribeTags(SubscribeRequest) -> stream TagUpdateBatch rpc Discover(DiscoverRequest) -> DiscoverResponse
SDKs
Talk to the gateway from your own code.
Official Python and TypeScript gRPC clients ship to licensed customers on request from [email protected]; they are not on PyPI or npm yet. They wrap the typed API the gateway exposes: server-side sessions, reads and writes of type-preserving tag values, tag browsing, and streaming subscriptions. Where the SCADA SDKs speak REST to the SCADA server, these speak gRPC to the lightweight 24/7 protocol layer.
Subscribe once and the gateway pushes an initial batch, then sends a new one only when a value or its quality changes. Polls that fail while a device is down arrive as per-tag errors and quality stamps instead of killing the stream, and values return when the device recovers. Both SDKs ship a subscribe_24x7 example with reconnect and backoff for unattended use.
Python SDK
A thin wrapper over the generated gRPC stubs, committed so no protoc is needed. Dicts in, proto values out; only grpcio and protobuf as dependencies.
from voltrus_gateway import VoltrusGateway
with VoltrusGateway("http://127.0.0.1:50061") as gw:
session = gw.connect("modbus", ip="192.168.1.10", unit_id=1, endianness="big")
tags = [{"name": "temperature", "address": 0, "reg_type": "float32",
"register_area": "holding"}]
for tv in gw.read_tags(session, tags):
print(tv.tag.modbus.name, tv.value.double_val, tv.quality)
gw.write_tag(session, tags[0], 72.5) # -> WriteResult(success, error, latency_ms)
gw.disconnect(session)
Python 3 · grpcio + protobuf
TypeScript SDK
The same gRPC surface with plain objects in and typed messages out. Only @grpc/grpc-js and @bufbuild/protobuf as runtime dependencies, and connect configs are compile-time checked per protocol.
import { VoltrusGateway, valueOf } from "voltrus-gateway";
const gw = new VoltrusGateway("http://127.0.0.1:50061");
const session = await gw.connect("modbus", { ip: "192.168.1.10", unitId: 1, endianness: "big" });
const tags = [{ name: "temperature", address: 0, regType: "float32", registerArea: "holding" }];
for (const tv of await gw.readTags(session, tags)) {
console.log(tv.tag.modbus?.name, valueOf(tv.value), tv.quality);
}
await gw.writeTag(session, tags[0], 72.5); // -> WriteResult { success, error, latencyMs }
await gw.disconnect(session);
gw.close();
Node.js · @grpc/grpc-js + @bufbuild/protobuf
Driving the SCADA server instead? See its SDKs.
Perpetual license
Stop writing a client
for every protocol.
A commercial product: not open source, not a subscription. Buy it once and keep it. Each license covers a single host: a workstation, a server, an edge box, or a VM.
Part of: Control · Give your own software protocol access to PLCs and field devices.
How Voltrus Gateway differs from…
-
Voltrus Broker
Voltrus Broker is a hosted MQTT broker your devices publish to. Gateway is a self-hosted binary that talks seven protocols to PLCs and serves one typed gRPC API.
-
RustRED
RustRED is a free Node-RED compatible flow runtime: you wire logic as flows. Gateway is a typed API for code, not a flow editor.
-
Voltrus Remote
Voltrus Remote gives engineers network access to a PLC (TIA Portal, GX Works). Gateway gives your software data access.
FAQ
Questions engineers ask.
Stay Updated
Get notified about gateway updates & new protocols
New protocols and API changes as they ship. Product news only.
Could not sign you up right now. Please try again, or email [email protected].
Also from Voltrus