Repository navigation
Releases
sparkplugb-interop v0.4.0
Date: 2026-11-06
Previous release: v0.3.1
Added
own/go-sparkplugb/and the manual workflow Own stack (go-sparkplugb): go-sparkplugb, OT Fabric's own stack, behind the container contract as an edge node (edge.Node) and as the primary host application (host.App), published asghcr.io/otfabric/sparkplugb-interop-otfabric:<go-sparkplugb version>and:latestfor others to test against. It is not an independent implementation (upstream.independentEngine: false) and not part of this or any release:manifest.jsondoes not list it.ADAPTER_IMAGE_<adapter>:scripts/smoke.shandscripts/interop.shtake an image from outside the release set (a-in the adapter name is a_in the variable).compose.yaml: a broker, a reference host and a reference edge node for local work, as in the other harnesses.
Changed
results.jsontakesindependent, and for an image outsideversions.yamlits licence and upstream name, from what the image says of itself.scripts/interop.shruns only the pairings with an adapter whoseupstream.independentEngineisfalse, when there is one among its adapters: the references were checked against each other already.- The R1 check of CI also covers
compose.yaml. - Contract 0.3: the DBIRTHs of a rebirth, on an NCMD or on
call rebirth, may come in any order, each device once, withseq1, 2, ...; fixture order is required of the first births only. Sparkplug 3.0.0 asks a rebirth for "a complete BIRTH sequence" and fixes no order among the DBIRTHs.scripts/interop.shchecks that. Every reference adapter already meets 0.2, which is stricter, so none changes; a consumer that checks the order of a rebirth's DBIRTHs should stop. tests/known-bugs.tsv: the entries for the pysparkplug host on the scalars fixture and the Tahu host on the baseline fixture also apply with theotfabricedge, which shows the same behaviour as the edges already listed.
The reference adapters and the fixtures do not change.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/sparkplugb-interop-tahu:v0.4.0 |
sha256:540056d47e9e7e257fbb14a48d7eb80dce5e79a4752acf1a59b4d74a6c40ddfa |
ghcr.io/otfabric/sparkplugb-interop-pysparkplug:v0.4.0 |
sha256:593281b65453b2eb4dacb57f014f6ab1789a8009927c18bfb207576e7c150993 |
ghcr.io/otfabric/sparkplugb-interop-sparkplugnet:v0.4.0 |
sha256:c7b4bc620cb84ee276e93a43b60bb365c71144adfd78775b6454e219071f7dc9 |
ghcr.io/otfabric/sparkplugb-interop-srad:v0.4.0 |
sha256:6617fe6493af987de17d603daf7b10bc406c53e90302b5a2f32774d446c516b0 |
ghcr.io/otfabric/sparkplugb-interop-tahu-js:v0.4.0 |
sha256:c4a5a0c73f84e7c12433335ff8cab4656293f2e87b12866b8736a93dcd850152 |
ghcr.io/otfabric/sparkplugb-interop-sparkplughost:v0.4.0 |
sha256:87a6d4834c3dc64ddc1e019491d7d798e514890d802220838c0c39a4dc788676 |
Brokers
docker.io/library/eclipse-mosquitto:2.1.2-alpine@sha256:860aeb5d63ce509508f6dcfb2bc8a1c1dd2bc60555b562b45ce90e52d8dabb0fdocker.io/hivemq/hivemq-ce:2026.5@sha256:bac6d4d1d815bffe4bc9a7fca8d06ea12b32d34f84ef2f1851ff4548560ee67bdocker.io/emqx/emqx:6.3.2@sha256:135116400e11b25224350b2e55c874f4e224d357b593fb554ca1b1f398c631acdocker.io/emqx/nanomq:0.25.7@sha256:ed5a9bb892f58e59aa4e47a9932fb7e056f5ae57ba201414c793b8c961587784
Pinning in a consumer
SPARKPLUGB_INTEROP_TAHU_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu@sha256:540056d47e9e7e257fbb14a48d7eb80dce5e79a4752acf1a59b4d74a6c40ddfa
SPARKPLUGB_INTEROP_PYSPARKPLUG_IMAGE=ghcr.io/otfabric/sparkplugb-interop-pysparkplug@sha256:593281b65453b2eb4dacb57f014f6ab1789a8009927c18bfb207576e7c150993
SPARKPLUGB_INTEROP_SPARKPLUGNET_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplugnet@sha256:c7b4bc620cb84ee276e93a43b60bb365c71144adfd78775b6454e219071f7dc9
SPARKPLUGB_INTEROP_SRAD_IMAGE=ghcr.io/otfabric/sparkplugb-interop-srad@sha256:6617fe6493af987de17d603daf7b10bc406c53e90302b5a2f32774d446c516b0
SPARKPLUGB_INTEROP_TAHU_JS_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu-js@sha256:c4a5a0c73f84e7c12433335ff8cab4656293f2e87b12866b8736a93dcd850152
SPARKPLUGB_INTEROP_SPARKPLUGHOST_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplughost@sha256:87a6d4834c3dc64ddc1e019491d7d798e514890d802220838c0c39a4dc788676manifest.json records the upstream versions these images were built from and the brokers they were tested on. The images contain EPL-2.0, Apache-2.0, MIT and BSD software; see THIRD_PARTY_NOTICES.md and /licenses in each image.
sparkplugb-interop v0.3.1
Date: 2026-11-01
Previous release: v0.3.0
Changed
- Upstream issues and proposed fixes are linked:
UPSTREAM.mdin the SparkplugNet, Tahu, pysparkplug and srad adapters,docs/COMPATIBILITY.md, and the evidence column oftests/known-bugs.tsv, whichresults.jsoncarries. The adapters, the container contract and the fixtures do not change.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/sparkplugb-interop-tahu:v0.3.1 |
sha256:ad829ae6b419add3753efdfa6eba55e819914076a5faf251105da5287f136550 |
ghcr.io/otfabric/sparkplugb-interop-pysparkplug:v0.3.1 |
sha256:28cab886428834a8a76f9a29ff69a6f295d03422c522a72ad8c5764ed1d27cca |
ghcr.io/otfabric/sparkplugb-interop-sparkplugnet:v0.3.1 |
sha256:626f0c2988814b3c800cb9f007893c334e504e94c67c03932c0046049835ef87 |
ghcr.io/otfabric/sparkplugb-interop-srad:v0.3.1 |
sha256:2a32b081db9e209b67ff90b1604b80e623eeb5dd783a71151e45864bed493ae0 |
ghcr.io/otfabric/sparkplugb-interop-tahu-js:v0.3.1 |
sha256:384cc3afcf61d9232648f0208525be44fa11794f77388058cc26570523f7739c |
ghcr.io/otfabric/sparkplugb-interop-sparkplughost:v0.3.1 |
sha256:db31b9f5ab2310a7bf12b298d52e00502abb7a6165b08f94663e186c700828da |
Brokers
docker.io/library/eclipse-mosquitto:2.1.2-alpine@sha256:860aeb5d63ce509508f6dcfb2bc8a1c1dd2bc60555b562b45ce90e52d8dabb0fdocker.io/hivemq/hivemq-ce:2026.5@sha256:bac6d4d1d815bffe4bc9a7fca8d06ea12b32d34f84ef2f1851ff4548560ee67bdocker.io/emqx/emqx:6.3.2@sha256:135116400e11b25224350b2e55c874f4e224d357b593fb554ca1b1f398c631acdocker.io/emqx/nanomq:0.25.7@sha256:ed5a9bb892f58e59aa4e47a9932fb7e056f5ae57ba201414c793b8c961587784
Pinning in a consumer
SPARKPLUGB_INTEROP_TAHU_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu@sha256:ad829ae6b419add3753efdfa6eba55e819914076a5faf251105da5287f136550
SPARKPLUGB_INTEROP_PYSPARKPLUG_IMAGE=ghcr.io/otfabric/sparkplugb-interop-pysparkplug@sha256:28cab886428834a8a76f9a29ff69a6f295d03422c522a72ad8c5764ed1d27cca
SPARKPLUGB_INTEROP_SPARKPLUGNET_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplugnet@sha256:626f0c2988814b3c800cb9f007893c334e504e94c67c03932c0046049835ef87
SPARKPLUGB_INTEROP_SRAD_IMAGE=ghcr.io/otfabric/sparkplugb-interop-srad@sha256:2a32b081db9e209b67ff90b1604b80e623eeb5dd783a71151e45864bed493ae0
SPARKPLUGB_INTEROP_TAHU_JS_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu-js@sha256:384cc3afcf61d9232648f0208525be44fa11794f77388058cc26570523f7739c
SPARKPLUGB_INTEROP_SPARKPLUGHOST_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplughost@sha256:db31b9f5ab2310a7bf12b298d52e00502abb7a6165b08f94663e186c700828damanifest.json records the upstream versions these images were built from and the brokers they were tested on. The images contain EPL-2.0, Apache-2.0, MIT and BSD software; see THIRD_PARTY_NOTICES.md and /licenses in each image.
sparkplugb-interop v0.3.0
Date: 2026-11-01
Previous release: v0.2.2
Added
- Fixture
composite: integers inside the composite values of Sparkplug, DataSet cells, template parameters and members, and metric properties, at the limits of each type. Tahu, tahu-js and SparkplugNet run it as edges, Tahu, SparkplugNet and sparkplughost as hosts. pysparkplug has none of these values, and srad no DataSet: neither declares the fixture. - Contract 0.2:
DataSetandTemplateas datatypes, with object values, andpropertieson metrics, in fixtures and inmessageevents (docs/FIXTURES.md,docs/CONTAINER_CONTRACT.md). Consumers that run every fixture of an edge meet one more, and must read object values. make int-vectorsandtests/int-vectors.tsv: what each host makes of Int8 and Int16 wire values in both forms and in neither.- Known bugs: the SparkplugNet host drops metric properties, the Tahu host leaves out an alias-addressed Template whose members carry no datatype.
Changed
- The self-test compares documents with sorted keys.
Documentation
docs/COMPATIBILITY.md: the per-broker counts are from a run with the third update ofscalarsand withcomposite.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/sparkplugb-interop-tahu:v0.3.0 |
sha256:322127f8be82eb046abd28869eb47de6924b55288ab71fa6b011245d01ae5741 |
ghcr.io/otfabric/sparkplugb-interop-pysparkplug:v0.3.0 |
sha256:1405e89f83df743b9054cccff289d7c65a873626b104b45341caad3fa98c5855 |
ghcr.io/otfabric/sparkplugb-interop-sparkplugnet:v0.3.0 |
sha256:1a0aee704cf01a5b3d39d86201bba40b93e5df12cc5bca94a8bf340dca20a8ee |
ghcr.io/otfabric/sparkplugb-interop-srad:v0.3.0 |
sha256:e56a9188e33845fb634bd5804ff129641b619a353c2d79c2548635d6c532df65 |
ghcr.io/otfabric/sparkplugb-interop-tahu-js:v0.3.0 |
sha256:802bc5a2d574c981abf05bf58e077d261b18cf3237b8cfa0c2344441880dc2fb |
ghcr.io/otfabric/sparkplugb-interop-sparkplughost:v0.3.0 |
sha256:5ca0a074f7f8ef7b2480fb53f86151b673991415c10e804ba53168da5c82d807 |
Brokers
docker.io/library/eclipse-mosquitto:2.1.2-alpine@sha256:860aeb5d63ce509508f6dcfb2bc8a1c1dd2bc60555b562b45ce90e52d8dabb0fdocker.io/hivemq/hivemq-ce:2026.5@sha256:bac6d4d1d815bffe4bc9a7fca8d06ea12b32d34f84ef2f1851ff4548560ee67bdocker.io/emqx/emqx:6.3.2@sha256:135116400e11b25224350b2e55c874f4e224d357b593fb554ca1b1f398c631acdocker.io/emqx/nanomq:0.25.7@sha256:ed5a9bb892f58e59aa4e47a9932fb7e056f5ae57ba201414c793b8c961587784
Pinning in a consumer
SPARKPLUGB_INTEROP_TAHU_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu@sha256:322127f8be82eb046abd28869eb47de6924b55288ab71fa6b011245d01ae5741
SPARKPLUGB_INTEROP_PYSPARKPLUG_IMAGE=ghcr.io/otfabric/sparkplugb-interop-pysparkplug@sha256:1405e89f83df743b9054cccff289d7c65a873626b104b45341caad3fa98c5855
SPARKPLUGB_INTEROP_SPARKPLUGNET_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplugnet@sha256:1a0aee704cf01a5b3d39d86201bba40b93e5df12cc5bca94a8bf340dca20a8ee
SPARKPLUGB_INTEROP_SRAD_IMAGE=ghcr.io/otfabric/sparkplugb-interop-srad@sha256:e56a9188e33845fb634bd5804ff129641b619a353c2d79c2548635d6c532df65
SPARKPLUGB_INTEROP_TAHU_JS_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu-js@sha256:802bc5a2d574c981abf05bf58e077d261b18cf3237b8cfa0c2344441880dc2fb
SPARKPLUGB_INTEROP_SPARKPLUGHOST_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplughost@sha256:5ca0a074f7f8ef7b2480fb53f86151b673991415c10e804ba53168da5c82d807manifest.json records the upstream versions these images were built from and the brokers they were tested on. The images contain EPL-2.0, Apache-2.0, MIT and BSD software; see THIRD_PARTY_NOTICES.md and /licenses in each image.
sparkplugb-interop v0.2.2
Date: 2026-10-31
Previous release: v0.2.1
Changed
- The Int8 and Int16 entries of
tests/known-bugs.tsvare reclassified as specification ambiguity. Sparkplug B 3.0.0 does not say how a negative value goes inint_value. The pairings that cannot work (the pysparkplug host with sign-extended edges, the SparkplugNet host with width-sized edges) stay recorded as known differences. No stack is labelled non-compliant for its form. - The
scalarsfixture has a third update that takes Int8 and Int16 to -128 and -32768. Consumers that run every update of a fixture run one step more.
Fixed
docs/COMPATIBILITY.md: tahu-js does not read both forms, only the harness adapter does; sparkplughost does not decode these values, its adapter does. The table of what each stack encodes and decodes is new.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/sparkplugb-interop-tahu:v0.2.2 |
sha256:4b53fdd7818b93b2a73eda639e9c58eb4b0185a78213aa3688eff480684dc989 |
ghcr.io/otfabric/sparkplugb-interop-pysparkplug:v0.2.2 |
sha256:00f99f3b2aa47fad950326f76cb8d6af62b462e60fc301d8f221ab45f11cbbb9 |
ghcr.io/otfabric/sparkplugb-interop-sparkplugnet:v0.2.2 |
sha256:3b3680df9fd4e0696e3d7621336133dd9b5fea53860791b5e40605d48e6d2b92 |
ghcr.io/otfabric/sparkplugb-interop-srad:v0.2.2 |
sha256:d75dc8b8aa1e512295ffc8623db6a723e513e5ac2e5a3d343e2db721f99627bd |
ghcr.io/otfabric/sparkplugb-interop-tahu-js:v0.2.2 |
sha256:e0005570a7621f07efef1ae7f21274a01a2b641abe28bb5fcd86d719d184e14b |
ghcr.io/otfabric/sparkplugb-interop-sparkplughost:v0.2.2 |
sha256:335b7cace69cc51e88530791310e6c22d9378e4d8bc38e39e486392857c1a895 |
Brokers
docker.io/library/eclipse-mosquitto:2.1.2-alpine@sha256:860aeb5d63ce509508f6dcfb2bc8a1c1dd2bc60555b562b45ce90e52d8dabb0fdocker.io/hivemq/hivemq-ce:2026.5@sha256:bac6d4d1d815bffe4bc9a7fca8d06ea12b32d34f84ef2f1851ff4548560ee67bdocker.io/emqx/emqx:6.3.2@sha256:135116400e11b25224350b2e55c874f4e224d357b593fb554ca1b1f398c631acdocker.io/emqx/nanomq:0.25.7@sha256:ed5a9bb892f58e59aa4e47a9932fb7e056f5ae57ba201414c793b8c961587784
Pinning in a consumer
SPARKPLUGB_INTEROP_TAHU_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu@sha256:4b53fdd7818b93b2a73eda639e9c58eb4b0185a78213aa3688eff480684dc989
SPARKPLUGB_INTEROP_PYSPARKPLUG_IMAGE=ghcr.io/otfabric/sparkplugb-interop-pysparkplug@sha256:00f99f3b2aa47fad950326f76cb8d6af62b462e60fc301d8f221ab45f11cbbb9
SPARKPLUGB_INTEROP_SPARKPLUGNET_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplugnet@sha256:3b3680df9fd4e0696e3d7621336133dd9b5fea53860791b5e40605d48e6d2b92
SPARKPLUGB_INTEROP_SRAD_IMAGE=ghcr.io/otfabric/sparkplugb-interop-srad@sha256:d75dc8b8aa1e512295ffc8623db6a723e513e5ac2e5a3d343e2db721f99627bd
SPARKPLUGB_INTEROP_TAHU_JS_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu-js@sha256:e0005570a7621f07efef1ae7f21274a01a2b641abe28bb5fcd86d719d184e14b
SPARKPLUGB_INTEROP_SPARKPLUGHOST_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplughost@sha256:335b7cace69cc51e88530791310e6c22d9378e4d8bc38e39e486392857c1a895manifest.json records the upstream versions these images were built from and the brokers they were tested on. The images contain EPL-2.0, Apache-2.0, MIT and BSD software; see THIRD_PARTY_NOTICES.md and /licenses in each image.
sparkplugb-interop v0.2.1
Date: 2026-10-31
Previous release: v0.2.0
Changed
- Policy 1.2: build output in
bin/andrelease/, and shared CI at v3.3.0.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/sparkplugb-interop-tahu:v0.2.1 |
sha256:76709a3908f9218cee2b972af18df94b0a80a8dac955654749c140c0c07e3fca |
ghcr.io/otfabric/sparkplugb-interop-pysparkplug:v0.2.1 |
sha256:07dec1d88e939de979ae7e42f7e8b3b447cd0eb5653f0b63750c259bd73d6e3c |
ghcr.io/otfabric/sparkplugb-interop-sparkplugnet:v0.2.1 |
sha256:1932b26f54ff0800bfc0e75230d35e87a22bcbc8bf91c9b2dea5ebc296ddac7d |
ghcr.io/otfabric/sparkplugb-interop-srad:v0.2.1 |
sha256:0e57b095aa7709a10634867b439bc3709dc731c232288217a09aa40e35e52960 |
ghcr.io/otfabric/sparkplugb-interop-tahu-js:v0.2.1 |
sha256:8ac9eaaef017ee7072df872335e6e592cee592de8f836b578dbcc015f06eb837 |
ghcr.io/otfabric/sparkplugb-interop-sparkplughost:v0.2.1 |
sha256:c428169f8cd00eefa93fbd45170c55ec1fae3ba91f1649f0ed8d62f4048f5d8d |
Brokers
docker.io/library/eclipse-mosquitto:2.1.2-alpine@sha256:860aeb5d63ce509508f6dcfb2bc8a1c1dd2bc60555b562b45ce90e52d8dabb0fdocker.io/hivemq/hivemq-ce:2026.5@sha256:bac6d4d1d815bffe4bc9a7fca8d06ea12b32d34f84ef2f1851ff4548560ee67bdocker.io/emqx/emqx:6.3.2@sha256:135116400e11b25224350b2e55c874f4e224d357b593fb554ca1b1f398c631acdocker.io/emqx/nanomq:0.25.7@sha256:ed5a9bb892f58e59aa4e47a9932fb7e056f5ae57ba201414c793b8c961587784
Pinning in a consumer
SPARKPLUGB_INTEROP_TAHU_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu@sha256:76709a3908f9218cee2b972af18df94b0a80a8dac955654749c140c0c07e3fca
SPARKPLUGB_INTEROP_PYSPARKPLUG_IMAGE=ghcr.io/otfabric/sparkplugb-interop-pysparkplug@sha256:07dec1d88e939de979ae7e42f7e8b3b447cd0eb5653f0b63750c259bd73d6e3c
SPARKPLUGB_INTEROP_SPARKPLUGNET_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplugnet@sha256:1932b26f54ff0800bfc0e75230d35e87a22bcbc8bf91c9b2dea5ebc296ddac7d
SPARKPLUGB_INTEROP_SRAD_IMAGE=ghcr.io/otfabric/sparkplugb-interop-srad@sha256:0e57b095aa7709a10634867b439bc3709dc731c232288217a09aa40e35e52960
SPARKPLUGB_INTEROP_TAHU_JS_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu-js@sha256:8ac9eaaef017ee7072df872335e6e592cee592de8f836b578dbcc015f06eb837
SPARKPLUGB_INTEROP_SPARKPLUGHOST_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplughost@sha256:c428169f8cd00eefa93fbd45170c55ec1fae3ba91f1649f0ed8d62f4048f5d8dmanifest.json records the upstream versions these images were built from and the brokers they were tested on. The images contain EPL-2.0, Apache-2.0, MIT and BSD software; see THIRD_PARTY_NOTICES.md and /licenses in each image.
sparkplugb-interop v0.2.0
Date: 2026-10-30
Previous release: v0.1.0
Summary
Self-test results as the organisation's interop-result-v1.
Changes
Added
reports/results.json(interop-result-v1):scripts/interop.shwrites it whenREPORT_DIRis set, with stable IDs<fixture>.<step>, the broker and the digests.make interop-brokerswrites one per broker, under$REPORT_DIR/<broker>/. Onlypasscounts as passing; a run with no pass, or with a waiver that no longer reproduces, fails. Existing reports keep their shape. An intermittent entry that did not show is not listed as a waiver.tests/known-bugs.tsvhas a ninth column, the evidence URL pinned to the upstream version.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/sparkplugb-interop-tahu:v0.2.0 |
sha256:1a2196b0a3374760058d91ccc16a147ec38c4400635ae35c13b1afb42f0028dd |
ghcr.io/otfabric/sparkplugb-interop-pysparkplug:v0.2.0 |
sha256:b2ed07a1f9f9759ad2ce6583fdd63a21a6549aa6a716a58f13208a8386330312 |
ghcr.io/otfabric/sparkplugb-interop-sparkplugnet:v0.2.0 |
sha256:6f92c802c8da692d0b3fe1e2ba165756a52834732dd9a8235f3b053181108de7 |
ghcr.io/otfabric/sparkplugb-interop-srad:v0.2.0 |
sha256:dd7571c3358f45558fd4f4e0113d748708e2e63670a416545f0a925035cee7d1 |
ghcr.io/otfabric/sparkplugb-interop-tahu-js:v0.2.0 |
sha256:451709fec1c514a56abe1535ea9cc732c46ac77a86199a37fb5251c14834010c |
ghcr.io/otfabric/sparkplugb-interop-sparkplughost:v0.2.0 |
sha256:4ca48e9a86ef5c291496f521320d2235a62cf9ab22c9ea6f087012775a3660a5 |
Brokers
docker.io/library/eclipse-mosquitto:2.1.2-alpine@sha256:860aeb5d63ce509508f6dcfb2bc8a1c1dd2bc60555b562b45ce90e52d8dabb0fdocker.io/hivemq/hivemq-ce:2026.5@sha256:bac6d4d1d815bffe4bc9a7fca8d06ea12b32d34f84ef2f1851ff4548560ee67bdocker.io/emqx/emqx:6.3.2@sha256:135116400e11b25224350b2e55c874f4e224d357b593fb554ca1b1f398c631acdocker.io/emqx/nanomq:0.25.7@sha256:ed5a9bb892f58e59aa4e47a9932fb7e056f5ae57ba201414c793b8c961587784
Pinning in a consumer
SPARKPLUGB_INTEROP_TAHU_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu@sha256:1a2196b0a3374760058d91ccc16a147ec38c4400635ae35c13b1afb42f0028dd
SPARKPLUGB_INTEROP_PYSPARKPLUG_IMAGE=ghcr.io/otfabric/sparkplugb-interop-pysparkplug@sha256:b2ed07a1f9f9759ad2ce6583fdd63a21a6549aa6a716a58f13208a8386330312
SPARKPLUGB_INTEROP_SPARKPLUGNET_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplugnet@sha256:6f92c802c8da692d0b3fe1e2ba165756a52834732dd9a8235f3b053181108de7
SPARKPLUGB_INTEROP_SRAD_IMAGE=ghcr.io/otfabric/sparkplugb-interop-srad@sha256:dd7571c3358f45558fd4f4e0113d748708e2e63670a416545f0a925035cee7d1
SPARKPLUGB_INTEROP_TAHU_JS_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu-js@sha256:451709fec1c514a56abe1535ea9cc732c46ac77a86199a37fb5251c14834010c
SPARKPLUGB_INTEROP_SPARKPLUGHOST_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplughost@sha256:4ca48e9a86ef5c291496f521320d2235a62cf9ab22c9ea6f087012775a3660a5manifest.json records the upstream versions these images were built from and the brokers they were tested on. The images contain EPL-2.0, Apache-2.0, MIT and BSD software; see THIRD_PARTY_NOTICES.md and /licenses in each image.
sparkplugb-interop v0.1.0
Date: 2026-10-27
Summary
First release: Sparkplug B 3.0.0 edge nodes and host applications of
independent implementations as multi-arch images with one container
contract, two fixtures, and pinned MQTT brokers to run them on.
Changes
Added
- Container contract 0.1 (docs/CONTAINER_CONTRACT.md):
edge,host,callover a control socket,print-capabilities,print-fixture,version; JSON Lines events, call result documents, fixed exit codes. - Fixtures
baseline(node with two devices, writable metrics, two updates) andscalars(all 14 scalar datatypes at their limits), with a JSON Schema and a validator for the cross-field rules. - Adapter images: Eclipse Tahu 1.0.21 (Java, edge and host), pysparkplug 0.6.1 (Python, edge and host), SparkplugNet 1.4.1 (C#, edge and host), srad 0.5.0 (Rust, edge and host), Eclipse Tahu sparkplug-client 3.2.4 (JavaScript, edge) and sparkplughost v0.4.0 (Go, host). See README.md.
- Broker pins: Eclipse Mosquitto, HiveMQ CE, EMQX and NanoMQ, by multi-arch digest in
versions.yamlandmanifest.json. - Self-tests:
scripts/smoke.sh(contract of one image) andscripts/interop.sh(every host against every edge, every fixture, any broker), with expectations computed from the fixture, andtests/known-bugs.tsvfor verified upstream defects. - Schemas for capability documents, call results and events;
make documentsvalidates every document the self-tests produce. - CI natively on amd64 and arm64, the cross-stack self-test on every broker, and a tag-driven release to GHCR.
- Upstream candidates workflow, weekly and on demand: the latest release of every adapter library and broker against its pin, with a self-test of each newer one and a decision table (
make upstream,make candidate-<name>).
Upstream notes
The self-test passes on all four brokers with 0 failures. Verified upstream defects are listed in tests/known-bugs.tsv and described in docs/COMPATIBILITY.md.
Not in this release
- Templates, DataSets, arrays and properties in fixtures.
- A choice of MQTT version (every adapter speaks MQTT 3.1.1 except srad, which speaks MQTT 5 only), TLS and broker authentication.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/sparkplugb-interop-tahu:v0.1.0 |
sha256:913e97106f4ea9388b7688aca748bf96a6ae344fe5308207ebbbe200d8eaebcb |
ghcr.io/otfabric/sparkplugb-interop-pysparkplug:v0.1.0 |
sha256:7473b1ceb06e26a6a8541546fada998eb222ea9464d031ad56ab7a5badb36e44 |
ghcr.io/otfabric/sparkplugb-interop-sparkplugnet:v0.1.0 |
sha256:919fce5b243a370656ddcb082ef95d0a4f001b991c7521ba3a06e64aa8a74a39 |
ghcr.io/otfabric/sparkplugb-interop-srad:v0.1.0 |
sha256:dddf909f714c0b7d606871e7adb9bd4034d4cad6b0fbd3133dd00daf12662633 |
ghcr.io/otfabric/sparkplugb-interop-tahu-js:v0.1.0 |
sha256:d278a2eebb12c34a05a29a126fc17908e9b9058666ea9f26d1f475edd0401b3e |
ghcr.io/otfabric/sparkplugb-interop-sparkplughost:v0.1.0 |
sha256:69265cbb76a542248b265db2c34ad3b5fc5add5d68a4adc85d91bdabd8a8cd60 |
Brokers
docker.io/library/eclipse-mosquitto:2.1.2-alpine@sha256:860aeb5d63ce509508f6dcfb2bc8a1c1dd2bc60555b562b45ce90e52d8dabb0fdocker.io/hivemq/hivemq-ce:2026.5@sha256:bac6d4d1d815bffe4bc9a7fca8d06ea12b32d34f84ef2f1851ff4548560ee67bdocker.io/emqx/emqx:6.3.2@sha256:135116400e11b25224350b2e55c874f4e224d357b593fb554ca1b1f398c631acdocker.io/emqx/nanomq:0.25.7@sha256:ed5a9bb892f58e59aa4e47a9932fb7e056f5ae57ba201414c793b8c961587784
Pinning in a consumer
SPARKPLUGB_INTEROP_TAHU_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu@sha256:913e97106f4ea9388b7688aca748bf96a6ae344fe5308207ebbbe200d8eaebcb
SPARKPLUGB_INTEROP_PYSPARKPLUG_IMAGE=ghcr.io/otfabric/sparkplugb-interop-pysparkplug@sha256:7473b1ceb06e26a6a8541546fada998eb222ea9464d031ad56ab7a5badb36e44
SPARKPLUGB_INTEROP_SPARKPLUGNET_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplugnet@sha256:919fce5b243a370656ddcb082ef95d0a4f001b991c7521ba3a06e64aa8a74a39
SPARKPLUGB_INTEROP_SRAD_IMAGE=ghcr.io/otfabric/sparkplugb-interop-srad@sha256:dddf909f714c0b7d606871e7adb9bd4034d4cad6b0fbd3133dd00daf12662633
SPARKPLUGB_INTEROP_TAHU_JS_IMAGE=ghcr.io/otfabric/sparkplugb-interop-tahu-js@sha256:d278a2eebb12c34a05a29a126fc17908e9b9058666ea9f26d1f475edd0401b3e
SPARKPLUGB_INTEROP_SPARKPLUGHOST_IMAGE=ghcr.io/otfabric/sparkplugb-interop-sparkplughost@sha256:69265cbb76a542248b265db2c34ad3b5fc5add5d68a4adc85d91bdabd8a8cd60manifest.json records the upstream versions these images were built from and the brokers they were tested on. The images contain EPL-2.0, Apache-2.0, MIT and BSD software; see THIRD_PARTY_NOTICES.md and /licenses in each image.