Tools & tooling
Code generation, linting, observability, recording, conformance harness, build-time helpers — all in the same workspace as the core. Same versioning, same release cycle, no tool-vs-runtime drift.
Learn — what counts as tooling?
Two kinds of tools sit around a middleware codebase. Build-time tools turn source artefacts (IDL files, configs) into compiled outputs — that is idlc and the codegen back-ends. Runtime tools observe, debug or extend a running deployment — that is monitor, observability-otlp, recorder, inspect-endpoint.
A third category — conformance harnesses, fuzzers, lint passes — sits in CI: they protect the core against regressions and check that every change still implements the spec. dds-lint and the conformance crate live there.
ZeroDDS keeps all three in one Cargo workspace. The build pipeline, the runtime daemons and the CI harnesses share the same Rust edition, the same MSRV, the same dependency graph. When the core moves to a new XTypes annotation, every tool sees it immediately.
Why — one workspace, one release cycle
Separating tools from the runtime is the default pattern in middleware. RTI's tools ship from a different team, Cyclone's debugger lives in a separate repo, Fast DDS' Discovery Server is its own release. The result is well-known: the tools always lag behind the runtime, version compatibility becomes a matrix, and bug fixes take three releases to propagate.
ZeroDDS treats every tool as a workspace crate. cargo test runs the full suite — runtime + tools + CI harnesses — in one go. A breaking change in the core is caught in the tool tests of the same PR. You never deploy a runtime that the lint or the monitor does not understand.
The trade-off: a single repo with 100+ crates is larger than a focused one. We accept that cost. Cargo's workspace model handles it without ceremony, and the win in correctness pays back every release.
What we built
Nine workspace crates plus the idlc CLI (delivered with the idl crate). Each has a README, examples, and where applicable a spec-coverage report.
| Crate | Role | Spec / scope |
|---|---|---|
idlc (via idl) | Code generation | Part of the idl crate. zerodds-idlc --<lang> emits Rust, C, C++, C#, Java, Python or TypeScript from a .idl file. Add --corba for Annex-A.1 stubs (C++/C#/Java only). |
lint | IDL lint | dds-lint — static analysis for .idl files. Catches missing @key, accidental @mutable on hot-path topics, breaking type evolution. CI-ready. |
monitor | Monitoring | 31 first-class Prometheus metrics + W3C-Trace-Context spans. Vendor spec: zerodds-monitor-1.1. |
observability-otlp | OTLP exporter | OpenTelemetry exporter. Pushes the same metrics + spans to any OTLP collector. |
recorder | Record / replay | .zddsrec format — deterministic record-and-replay with stable indexes. CI fixtures, regression captures, production post-mortems. |
inspect-endpoint | Inspect endpoint | Feature-gated tap into a running participant. Pair with PDE Reality Inspector to see samples and discovery in flight. |
flatdata · flatdata-derive | Build helpers | flatdata + flatdata-derive — zero-copy data layouts used by the recorder and the shared-memory transport. |
foundation | Core utilities | Shared crate for low-level utilities used across the workspace. Not consumed directly by user code. |
conformance | Conformance harness | Test harness that exercises every OMG-spec requirement end-to-end. Drives the spec-coverage reports. |
chaos-clock-skew | Chaos testing | chaos-clock-skew — injects clock-skew faults into participants for resilience testing in CI. |
Spec coverage — per tool
Tools with a published spec sheet list their vendor spec and conformance report.
| Tool | Vendor spec | Coverage report | Implementation | Status |
|---|---|---|---|---|
| monitor | zerodds-monitor-1.1 → | spec pending | monitor | ✓ RC3 |
| observability-otlp | zerodds-observability-otlp-1.0 → | spec pending | observability-otlp | ✓ RC3 |
| recorder | zddsrec-1.0 → | spec pending | recorder | ✓ RC3 |
| inspect-endpoint | part of dcps crate |
zerodds-listener-callbacks-1.1 → | inspect-endpoint | ✓ RC3 |
| flatdata | zerodds-flatdata-1.0 → | zerodds-flatdata-1.0 → | flatdata | ✓ RC3 |
| conformance | n/a — exercises core OMG specs | see /spec-coverage/* (10 reports) | conformance | ✓ RC3 |
| deployment | zerodds-deployment-1.0 → | zerodds-deployment-1.0 → | see packaging | ✓ RC3 |
| ffi-loader | zerodds-ffi-loader-1.0 → | zerodds-ffi-loader-1.0 → | part of zerodds-c-api |
✓ RC3 |
How — installing and running the tools
Most tools are single binaries delivered as part of the ZeroDDS install. CI helpers integrate via cargo features and standard Rust build hooks.
Per-tool pointers
- idlc
-
Code generator CLI. Reads an OMG IDL 4.2 file, emits native types for the chosen target language.
cargo install zerodds-idlc zerodds-idlc --rust -o gen/rust types.idl - dds-lint
-
IDL static analyser. Flags missing @key, breaking type evolution, accidental @mutable on hot-path topics.
cargo install dds-lint dds-lint check types.idl - monitor
-
Prometheus + W3C-Trace-Context metrics. 31 first-class counters / gauges / histograms covering discovery, reliability, sample state and QoS.
curl http://localhost:9100/metrics - observability-otlp
-
OpenTelemetry OTLP exporter. Pushes the same metrics and spans to any OTLP-compatible collector (Tempo, Jaeger, Honeycomb, …).
ZERODDS_OTLP_ENDPOINT=https://otlp.example.org - recorder
-
Deterministic record and replay for DDS traffic. .zddsrec format with stable indexes. CI fixtures, regression captures, post-mortems.
zerodds record --topic Temperature --output run.zddsrec zerodds replay run.zddsrec - inspect-endpoint
-
Feature-gated side channel into a running participant. Pair with the external PDE Reality Inspector for live sample visualisation.
cargo run --features inspect - flatdata
-
Zero-copy data layout library plus derive macros. Used by the recorder and the shared-memory transport.
cargo add flatdata flatdata-derive - conformance
-
Test harness that exercises every OMG-spec requirement end-to-end. Drives the per-spec coverage reports.
cargo test -p conformance - chaos-clock-skew
-
Chaos-engineering helper for clock-skew injection. Used in CI to verify reliable-protocol behaviour under skewed clocks.
cargo test --features chaos-clock-skew