Compatibility
These are the clients and test suites that we run against the gateway, and their results. MQTT support and AMQP support list the features.
Clients
| Client | Protocol | Result |
|---|---|---|
| mqtt.js 5.16.0 | MQTT 3.1.1 and 5.0 | All scenarios pass |
| Node-RED 5.0.7 | MQTT 3.1.1 and 5.0 | All scenarios pass |
| paho-python 2.1.0 | MQTT 3.1.1 and 5.0 | All scenarios pass |
Paho embedded C (commit 6035ea2) | MQTT 3.1.1 | All scenarios that the client can run pass |
| Eclipse Tahu 1.0.21 (Paho Java 1.2.5) | MQTT 3.1.1 | All scenarios pass |
| Telegraf 1.40.1 | MQTT 3.1.1 and 5.0 | All scenarios that the client can run pass |
| Ignition 8.3.10 with Cirrus Link MQTT Transmission and Engine 5.0.5 | Sparkplug B 3.0 on MQTT 3.1.1 | 11 of 11 scenarios pass, with failover between two gateways |
| go-amqp 1.7.0 | AMQP 1.0 | 33 of 33 tests pass |
| Qpid JMS 2.11.0 | AMQP 1.0 | 12 of 25 tests pass. The others need features that the gateway does not have |
The MQTT scenarios cover each QoS, retained messages, wills, persistent
sessions, keep-alive, large payloads, wildcards, $ topics and MQTT v5
properties and topic aliases. Across all MQTT clients, 138 of 158 cells
pass and none fail. In one cell, Telegraf's MQTT 3.1.1 input pings late,
and the gateway allows it. The clients cannot run the other 19. We
measured these on 2026-10-30, and Ignition on 2026-10-22.
Test suites
| Suite | Result | Measured |
|---|---|---|
| Eclipse Paho MQTT interoperability suite | 37 of 37 tests (10 MQTT 3.1.1, 27 MQTT 5), over TCP and WebSocket | 2026-10-30 |
| qpid-interop-test, with six AMQP client libraries | All 1,599 tests that Apache Artemis 2.57 passes | 2026-10-30 |
| AMQP client suite, with go-amqp and Qpid JMS | 45 of 58 tests | 2026-10-30 |
qpid-interop-test runs Qpid Proton Python and C++, Rhea, Qpid Proton .NET, Qpid ProtonJ2 and Qpid JMS.
Known issues
- Qpid JMS. The 13 JMS tests that fail need these features:
- Local transactions
- Durable and shared subscriptions, and
unsubscribe - No-local on a topic
- A dead-letter queue. A message that keeps failing is delivered again with no limit.
- Delivery delay. Qpid JMS refuses the send because the gateway does
not offer
DELAYED_DELIVERY. - One connection per client ID. A second connection can use a client ID that is already in use.
- A selector on a queue that other consumers share. Each selector has its own queue, so other consumers also get what one consumer took.
- A persistent send to a temporary queue or topic. No binding stores its subject, so the gateway refuses the send.
- Topic aliases. The default
mqtt.topic-alias-maxis 0, so a client must not send topic aliases. Set it above 0 to accept them. - Ignition. MQTT Engine blocks writes to edge tags by default. Turn off
blockDeviceCommandsto send DCMD. MQTT Transmission refuses a group ID that contains..