MQTT versions
xcon-mq accepts MQTT 3.1 (MQIsdp), 3.1.1 and 5.0 on the same listeners; a
5.0 client negotiates the richer feature set at CONNECT.
MQTT 5 support
| Feature | Status |
|---|---|
| No Local | Implemented (a client isn't sent its own publishes) |
| Retain As Published | Live delivery only; not preserved through WAL recovery |
| Retain Handling (0/1/2) | Implemented |
| Message expiry | Retained-store + reconnect replay; not on live delivery; wills drop it |
| Session expiry | Implemented, including persisted offline deadlines |
| Topic alias | Inbound, up to 100 per connection |
| Shared subscriptions | Implemented (round-robin, connected members preferred) |
| Receive Maximum | Parsed but not enforced |
| User Properties | Forwarded on live delivery; not persisted through the WAL |
| Reason codes | Partial (see below) |
Reason codes
The broker emits reason codes on selected failures — an ACL-denied QoS 1/2
publish returns 0x87, a denied subscription returns 0x80, and some semantic
errors (bad topic alias, invalid subscription options) close with 0x82. But
QoS 0 denials get no reason-bearing response, and many malformed or unexpected
packets simply close the connection without a DISCONNECT packet.
Cross-version delivery works: a message from a 3.1.1 client reaches 5.0 subscribers and vice versa.