User Guide
For developers building applications on top of ZeroDDS. Eight-section condensed handbook.
What is ZeroDDS
Pure-Rust implementation of the OMG Data Distribution Service. Wire-byte-identical to Cyclone DDS, OpenDDS, Fast DDS, RTI Connext on RTPS 2.5. Comes with bridges to MQTT, AMQP, CoAP, gRPC, CORBA, ROS-2, WebSocket and bindings for nine languages.
Install
For the 1.0.0-rc.1 release-candidate phase the supported install paths are:
# 1. Cargo (any platform with rustc 1.88+)
cargo add zerodds-dcps zerodds-rtps zerodds-discovery
# 2. Build from source
git clone https://github.com/zero-objects/zero-dds
cd zero-dds && cargo build --release
# 3. Pre-built CLI binaries — coming with the rc.1 binary release
# (Homebrew tap, APT/DNF repos, MSI, Scoop, AppImage, Docker
# multi-arch). See "Distro & native installer roadmap" below.
Distro & native installer roadmap
Native installers and distro repos roll out in stages. Track progress on the project's GitHub releases page.
| Channel | Stage | Status |
|---|---|---|
crates.io (cargo install / cargo add) | 1 | publishing in progress with the rc.1 tag |
| GitHub Releases (static binaries, AppImage) | 1 | built by the rc.1 release pipeline |
| ghcr.io multi-arch Docker | 1 | built by the rc.1 release pipeline |
Homebrew tap (zero-objects/homebrew-tap) | 2 | tap repo published with rc.1; brew tap zero-objects/tap && brew install zerodds |
Scoop bucket (zero-objects/scoop-bucket) | 2 | bucket repo published with rc.1 |
| Arch User Repository (AUR) | 2 | PKGBUILD submission targeted for rc.1 |
Self-hosted APT repo (packages.zerodds.org) | 2 | signed .deb packages, GPG key on the website |
| Self-hosted RPM repo | 2 | signed .rpm packages on the same domain |
| Ubuntu PPA (Launchpad) | 3 | after rc.1 stabilises |
| Fedora COPR | 3 | after rc.1 stabilises |
| Chocolatey community feed | 3 | after rc.1 stabilises |
| Debian official, Fedora official, Homebrew core | 4 | long-lead; targeted post 1.0 stable |
First Pub/Sub
Publisher:
use dds_dcps::{Factory, QosProfileBuilder};
let factory = Factory::default();
let participant = factory.create_participant(0)?;
let topic = participant.create_topic::<String>("Greetings")?;
let publisher = participant.create_publisher()?;
let writer = publisher.create_writer(&topic, &QosProfileBuilder::reliable())?;
writer.write(&"Hello, DDS!".to_string())?;
Subscriber pattern is symmetric. Full 15-chapter walk-through with cross-language ports lives in examples/tutorials/dds-chat.
QoS Cheatsheet
| Policy | One-line |
|---|---|
Reliability | Reliable retransmits lost samples; BestEffort drops them. |
Durability | Volatile (no replay); TransientLocal (writer cache replay); Transient; Persistent. |
History | KeepLast(n) per instance vs. KeepAll. |
Deadline | Maximum interval between samples per instance; missed deadlines fire a status. |
Lifespan | How long a sample remains valid after publication. |
Liveliness | Automatic (DCPS-managed) vs. Manual (application asserts). |
Ownership | Shared (multi-writer) vs. Exclusive (highest-strength wins). |
ResourceLimits | Max samples / max instances / max samples per instance caps. |
DestinationOrder | ByReceptionTimestamp vs. BySourceTimestamp. |
ContentFilter | SQL-like filter on the subscriber side. |
Bridges
Pick the bridge for your protocol:
| Bridge | Use case |
|---|---|
zerodds-ws-bridged | WebSocket clients, browser SPAs. |
zerodds-mqtt-bridged | IoT MQTT broker integration. |
zerodds-coap-bridged | Constrained-device CoAP. |
zerodds-amqp-bridged | RabbitMQ / ActiveMQ enterprise queueing. |
zerodds-grpc-bridged | gRPC service-mesh integration with auto-generated services per topic. |
zerodds-corba-bridged | Legacy CORBA mainframes (financial-industry drop-in). |
zerodds-ros2-shim | ROS-2 RMW plugin (REP-2007 / 2008 / 2009). |
Security
Two layers:
- DDS-Security 1.2 — OMG plugins enabled via Participant QoS. Auth + AccessControl + Crypto + Logging + DataTagging.
- bridge-security — TLS 1.3 (rustls), bearer / JWT-RS256 / mTLS / SASL-PLAIN, ACL with wildcard + group matching, SIGHUP cert rotation.
Troubleshooting
- Discovery silent — check that multicast is enabled on your network. Use
zerodds-admin discovery snapshotto capture SPDP/SEDP traffic. - Sample lost — verify
Reliability=Reliableon both writer and reader.BestEffortdrops on congestion. - Wire-incompat with another DDS — capture both sides with
tcpdump -i any -X port 7400and diff. - Cross-language struct mismatch — regenerate code with
idlcfrom a single canonical IDL. - TLS handshake fails — check ALPN protocol matches; mTLS requires the client cert chain rooted in the server's CA.
Spec Mapping
Which OMG spec covers which feature:
- Pub/Sub API — DDS-DCPS 1.4 §2.2.
- Wire format — DDSI-RTPS 2.5 + DDS-XTypes 1.3 (XCDR1/XCDR2).
- Type system — DDS-XTypes 1.3 + IDL 4.2.
- Security — DDS-Security 1.2.
- QoS XML — DDS-XML 1.0.
- Constrained devices — DDS-XRCE 1.0.
- RPC — DDS-RPC 1.0.