Sparkplug B profile
Recognize the selected Sparkplug B 3.0 topic and lifecycle envelope on the native MQTT path.
Selected MQTT application profileSparkplug B is not a second transport module. nginx still owns MQTT framing, authentication, ACL, limits, and ring publication. nginz-iotd owns the application-profile state machine before broker mutation.
Topic grammar
The daemon recognizes the exact spBv1.0 grammar for node and device birth, death, data, and command messages, plus retained host STATE. It performs bounded Protobuf wire parsing, extracts sequence, bdSeq, and Node Control/Rebirth, and preserves the original payload for MQTT delivery, rules, storage, and bridges.
A transition is prepared without mutation. State commits only after the broker accepts the publish. A rejected device or sequence message cannot consume the next sequence number.
Selected limits
| Bound | Value |
|---|---|
| Nodes | 128 |
| Devices per node | 64 |
| Metrics per payload | 128 |
| Topic segment | 64 bytes |
| Sequenced data | advances modulo 256 |
NBIRTH requires sequence zero and bdSeq. Device data and commands require an active device birth. NDEATH requires the live node’s bdSeq. Host state accepts only retained ONLINE or OFFLINE.
Restart behavior
Lifecycle state survives MQTT reconnect while the same nginz-iotd authority remains live. It does not claim a durable Sparkplug checkpoint. After daemon restart, data is rejected until a fresh NBIRTH reconstructs state.
This profile does not enable a general Protobuf schema registry and does not materialize every Sparkplug metric value type. The original protobuf payload stays intact for consumers.
Sparkplug is a Max and Enterprise capability on top of the Pro MQTT path.
This page is a customer-oriented guide. The source contract remains authoritative for exact behavior and release evidence.
docs/phase21-sparkplug-b-mqtt-profile.md