Developer Guide

For contributors working on the ZeroDDS codebase. Eight-section condensed handbook.

Codebase Tour

Single Cargo workspace, ~95 crates organised in nine layers:

LayerTopicCrate count
0Foundation (errors, time, monitor, observability, flatdata)8
1Transport (UDP, TCP, SHM, TSN)5
2Wire Protocol (RTPS, discovery, builtin-topics)6
3Core Services (DCPS, QoS, security, types, sql-filter)12
4Schema (CDR, IDL, per-language code generators)8
5Protocol Bridges (WS / MQTT / CoAP / AMQP / gRPC / CORBA + bridge-security)10
6Language Bindings (C / C++ / C# / Java / Python / TS / Flutter)11
7Bridging Services (ROS-2 RMW, DLRL, OPC-UA, XRCE, web, soap)11
8CORBA + CCM (full OMG CORBA 3.3 + DDS4CCM 1.1 stack)17

Cargo + MSRV

Workspace pins to Rust 1.88.0, Edition 2024 via rust-toolchain.toml. Layer-N crates may depend only on layers 0 .. N-1; cycles are detected by cargo run -p dds-lint -- check. No [workspace.dependencies] table — each crate manages its own dependency versions.

RC1 Definition-of-Done

Every crate must satisfy 13 checks before its tracker entry flips to ✅ rc1-ready. See RC1_GUARDRAILS.md:

  1. Cargo.toml metadata complete
  2. lib.rs / main.rs header with safety class + spec ref
  3. README.md
  4. CHANGELOG.md
  5. Public-API audit
  6. Coherence audit (CONNECTED / TEST-ONLY / DEAD)
  7. Spec-coverage doc updated
  8. Forbidden-token sweep
  9. SPDX license headers per file
  10. Tests + lints + doc build green
  11. Review doc under docs/release/rc1-reviews/
  12. Tracker entry ✅ rc1-ready
  13. Public mirror under github/ + website/

Wire-Format Conventions

Two contracts:

Test Categories

Spec-Coverage Workflow

Each OMG spec has a coverage doc under docs/spec-coverage/<spec>.md. Per section: Status ∈ {done, partial, open, n/a (informative), n/a (rejected)}, Repo link to source, Tests link to test functions. partial + open are RC1 blockers; n/a (rejected) needs an ADR under docs/adr/.

Public-Mirror Sync

Three trees in one repository:

The forbidden-token sweep runs in CI. Anything in github/ or website/ matching the forbidden list (internal hostnames, WP X.Y.Z sprint markers, etc.) blocks the merge.

Release Process

  1. Audit all 90+ crates via cargo run -p tools/cargo-dag for publish-order.
  2. Green CI on main: clippy, fmt, test, dds-lint, cargo-deny.
  3. Tag 1.0.0-rc.1 on the workspace + per-crate tags.
  4. Push github/ tree to github.com/zero-objects/zero-dds.
  5. Publish to crates.io in DAG order.
  6. Build packaging artifacts (.deb, .rpm, AppImage, Homebrew, MSI, Docker).
  7. Deploy website/ to zerodds.org.

Full handbook on GitHub →