Skip to content
Open-source edge gateway

Registers in.
One envelope out.

Conflux speaks Modbus, BACnet, OPC UA, SNMP and MQTT, normalizes every reading into one canonical JSON envelope, and forwards it northbound — so your apps never deal with registers, object models or byte orders again.

MIT licensed · single binary · runs offline on the plant network

7protocols in1envelope shape3sinks out0cloud dependencies

Five ways to say “6.9 °C”. One way to read it.

A Modbus holding register, a BACnet object instance, an OPC UA NodeId, an SNMP OID and an MQTT payload all address the same thing differently. Conflux resolves the address, applies the scale, and publishes the same envelope every time.

Southbound · as the device addresses it

Modbus TCP10.4.1.22:502unit 1 · holding 40001int16, scale ÷10

Northbound · one envelope, every time

conflux/plant-a/meter-3/sst
{
  "src": {
    "proto": "modbus-tcp",
    "conn":  "plant-a",
    "dev":   "meter-3",
    "addr":  "holding:40001"
  },
  "v":   6.9,
  "raw": 69,
  "u":   "°C",
  "ts":  1789345000,
  "q":   0
}

Live points · normalized every tile below is the same envelope

CH-1 supplymodbus · plant-a/meter-3
6.9°Cq:0 good
Drive-7 speedopc ua · line-4
1478.6rpmq:0 good
AHU-2 CO₂mqtt · plant-a/ahu-2
780ppmq:1 stale

One node between the plant and everything else

Southbound polling and subscriptions in; a single normalized stream out to whatever consumes it.

Modbus TCP/RTUBACnet/IPOPC UASNMP v1/v2c/v3MQTTMQTT brokerWebhookKafkaConfluxnormalizeconflux/+/+/+

Built for the edge, not the datacenter

Everything a gateway on a flaky plant uplink actually needs — and nothing it doesn't.

One Go binary

Pure-Go, no cgo. Cross-compile for arm64 and drop it on the gateway — no runtime, no libc.

Plugin drivers

Every protocol is one small Go interface. Adding one changes nothing else in the system.

Auto-discovery onboarding

It finds devices and asks each what it exposes — no transcribing 200 registers from a PDF.

No-code rules

Thresholds, schedules, alerts, notify and write-back — composed from dropdowns, evaluated on every reading.

Encrypted & audited

Credentials encrypted at rest, never returned by the API. Every change lands in an append-only audit log.

Store-and-forward

A dead broker never loses data. Readings buffer to disk, bounded, and replay in order when the path heals.

Speaks the protocols your plant already runs

Southbound in, canonical envelope out. Write and device-discovery where the protocol allows.

Protocol support: read, write and device discovery per protocol.
ProtocolAddress looks likeReadWriteDiscover
Modbus TCPholding:40001yesyesyes
Modbus RTUinput:30012yesyesyes
BACnet/IPanalog-input:12yesyesyes
OPC UAns=2;s=Motor.Speedyesyesyes
SNMP v1/v2c/v31.3.6.1.2.1.2.2.1.10yesyes—
MQTT (subscribe)plant/a/ahu2/co2yesyes—
SIA DC-09 (alarms)event streamyes——
M-Busroadmap————
KNXroadmap————

Three stages, no middleware

01

Connect

Point Conflux at a device. It scans, asks what values exist, and lists them with live readings to tick.

02

Normalize

Every reading becomes one self-describing envelope: source, value, unit, timestamp and a quality code.

03

Forward

Publish northbound over MQTT, webhook or Kafka. Downstream owns the meaning — Conflux owns clean data.

Stop writing protocol glue.

Onboard your first device in a minute. It finds them, asks what they expose, and creates everything.