Rust
First-class home of ZeroDDS. Async via dcps-async, zero-overhead derive macros, no_std-capable subset for embedded.
cargo add zerodds-dcps
Three paths into the codebase — Foundation, Language bindings, Protocol bridges. Pick where you want to enter, get a quickstart snippet, then dive into architecture or a runnable quickstart repo.
Seven first-class language bindings, all driven from the same IDL. Each card has a one-line install, a link to the architecture and a quickstart repository.
First-class home of ZeroDDS. Async via dcps-async, zero-overhead derive macros, no_std-capable subset for embedded.
cargo add zerodds-dcps
C++17 PSM following the OMG DDS-PSM-Cxx 1.0 spec. Headers emitted by zerodds-idlc generate --lang c++, ABI-stable consumption.
zerodds-idlc generate --lang c++ --out gen/cpp your.idl
Idiomatic C# binding with async/await, generated from IDL into a NuGet-ready package. Targets .NET 8+ and netstandard2.1.
dotnet add package ZeroDDS --prerelease
Pure Java binding — the OMG DDS-Java-PSM, no JNI. Records, sealed types, virtual threads.
<dependency>org.zerodds:omgdds:1.0.0-rc.7</dependency>
Type-checked Python binding with mypy stubs. Wheels for CPython 3.10–3.13, async-friendly.
pip install zerodds
Two variants: Node.js with WebSocket/gRPC bridge plumbing and a browser bundle for WebSocket-only deployments.
npm install @zerodds/node@rc
Stable C ABI for languages we do not ship native bindings for. Pulls everything from libzerodds.so / zerodds.dll.
#include <zerodds.h>
Compare language-binding coverage across all DDS vendors (§4 of the Vendor Matrix) →
Nine protocol bridges plus the full CORBA family. Each card frames the integration from the protocol's side: 'if you are already running X, here is how X reaches DDS topics — and back'.
If your fleet already publishes on an MQTT broker, the mqtt-bridge daemon mirrors MQTT topics to DDS topics one-to-one. Sample loss-aware QoS-mapping (At-most-once / At-least-once / Exactly-once → DDS reliability).
zerodds-mqtt-bridged --broker tcp://broker:1883 --domain 0
RabbitMQ, Solace or any AMQP 1.0 broker — the amqp-bridge maps queues and exchanges to DDS topics, preserves message headers and translates AMQP delivery state to DDS sample state.
zerodds-amqp-bridged --uri amqp://rabbit:5672 --domain 0
Constrained-device endpoints (sensors, actuators) typically speak CoAP. The coap-bridge exposes CoAP resources as DDS topics; observe-mode CoAP requests become DDS subscriptions.
zerodds-coap-bridged --listen coap://0.0.0.0:5683
If your front-end runs in a browser, websocket-bridge gives it DDS access over a WebSocket frame protocol. Pair with the TypeScript browser binding for a typed client API.
zerodds-ws-bridged --listen 0.0.0.0:8765
If your service mesh is gRPC, grpc-bridge wraps DDS topics in gRPC server- and bidi-streaming calls and serves DDS-RPC interfaces over the same channel.
zerodds-grpc-bridged --listen 0.0.0.0:50051
rmw-zerodds-shim plugs ZeroDDS in as the RMW (ROS Middleware) implementation. Drop-in replacement for the default rmw_cyclonedds_cpp — no application changes.
export RMW_IMPLEMENTATION=rmw_zerodds
If your plant floor speaks OPC UA, the opcua-gateway maps the OPC UA AddressSpace and PubSub (UADP) onto DDS topics — industrial telemetry reaches DDS subscribers, and DDS writes drive OPC UA nodes back.
zerodds-opcua-gateway --listen opc.tcp://0.0.0.0:4840
If you integrate through SOAP/WSDL enterprise web services, zerodds-soap exposes DDS topics as SOAP 1.2 services — WSDL generation, MTOM, WS-Addressing and WS-Security included — so existing SOA clients reach DDS without code changes.
zerodds-soap --wsdl service.wsdl --listen 0.0.0.0:8080
If you run an Eclipse Zenoh fabric for edge-to-cloud routing, the zenoh-bridge maps DDS topics to Zenoh key expressions — DDS samples flow across the Zenoh network and back.
zerodds-zenoh-bridge --listen tcp/0.0.0.0:7447
If your endpoints are deeply resource-constrained microcontrollers, the xrce-agent bridges DDS-XRCE clients (serial or UDP) into the DDS data space — the device speaks the tiny XRCE protocol, the agent does the full DDS.
cargo run -p zerodds-xrce-agent
If you run a CORBA-shaped enterprise stack (finance, aerospace, telecom signalling), the full CORBA 3.3 family lets you keep your IDL, swap the ORB for pure-Rust, and migrate IDL by IDL toward DDS over time.
cargo add --build zerodds-idl-parse zerodds-idl-lower zerodds-corba-rust
Compare bridge coverage across all DDS vendors (§5 of the Vendor Matrix) →
The cross-cutting tools that every ZeroDDS deployment uses, regardless of language or bridge. Install once, run anywhere.
Pull the crates from crates.io, the Docker images from ghcr.io, or the deb packages from packages.zerodds.org (repository metadata signed). The rpm packages of 1.0.0-rc.7 cannot be installed; the user guide names the alternatives.
cargo add zerodds-dcps zerodds-rtps zerodds-discovery
zerodds-cli ships participant inspection, topic listing, QoS dump and SPDP probing. Use zerodds-idlc check types.idl for IDL diagnostics and zerodds-idlc lint types.idl for additional model warnings. These checks do not certify runtime interoperability.
zerodds participants list --domain 0
zerodds-inspect-endpoint is a feature-gated tap that opens a side channel into a running participant. Pair with the external PDE Reality Inspector to see samples in flight.
cargo run --features inspect
zerodds-monitor exposes 31 first-class metrics through a Prometheus text endpoint and W3C-Trace-Context headers. zerodds-observability-otlp pushes the same data to any OpenTelemetry collector.
curl http://localhost:9100/metrics
zerodds-recorder writes .zddsrec — a deterministic record-and-replay format with stable indexes. Use it for CI fixtures, regression captures or production post-mortems.
zerodds record --topic Temperature --output run.zddsrec
All language bindings and bridges share the same OMG IDL 4.2 grammar. Write your interfaces once, generate native types for seven languages, keep them wire-compatible across the bus.
Annotations (@mutable, @final, @appendable, @optional) drive type evolution. Old readers stay compatible with new writers if the annotations allow it.
Full IDL 4.2 type system — bitsets for flag arrays, bitmasks for enumerable flag sets, unions for tagged variants. All seven languages render them idiomatically.
Group interfaces in modules, reuse with #include. Generated code mirrors module structure in language-natural namespacing (Rust modules, C++ namespaces, Java packages…).