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

Pick the channel that matches your platform. All Linux binaries are minisign-signed against a public key shipped in the source repository; macOS binaries are Apple-codesigned and notarized.

Linux — Debian / Ubuntu / derivatives

curl -fsSL https://packages.zerodds.org/zerodds.gpg \
  | sudo tee /usr/share/keyrings/zerodds.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/zerodds.gpg] \
  https://packages.zerodds.org/deb bookworm main" \
  | sudo tee /etc/apt/sources.list.d/zerodds.list
sudo apt update && sudo apt install zerodds

Linux — Fedora / RHEL / derivatives

sudo dnf config-manager --add-repo \
  https://packages.zerodds.org/rpm/zerodds.repo
sudo dnf install zerodds

macOS — Homebrew

brew install zero-objects/homebrew-zerodds/zerodds

Linux — Arch / Manjaro (AUR)

yay -S zerodds-bin    # pre-built binary package
# or:
yay -S zerodds        # build from source

Linux — Gentoo

sudo eselect repository add zerodds git \
  https://github.com/zero-objects/gentoo-overlay
sudo emaint sync -r zerodds
sudo emerge net-libs/zerodds

Windows — Scoop

scoop bucket add zerodds https://github.com/zero-objects/scoop-zerodds
scoop install zerodds

Cross-platform — Docker

# GitHub Container Registry (multi-arch: linux/amd64 + linux/arm64)
docker pull ghcr.io/zero-objects/zerodds-ws-bridged:1.0.0-rc.1
docker pull ghcr.io/zero-objects/zerodds-mqtt-bridged:1.0.0-rc.1
# (or fishermen21/zerodds-<daemon> on Docker Hub)

Cross-platform — Cargo (Rust toolchain)

cargo add zerodds-dcps zerodds-rtps zerodds-discovery
# or build from source:
git clone https://github.com/zero-objects/zero-dds
cd zero-dds && cargo build --release

Distro & native installer roadmap

ChannelStageStatus
crates.io (cargo install / cargo add)1✅ publishing with rc.1
GitHub Releases (8 cross-platform binaries + AppImage)1✅ built on tag push, minisign-signed
Docker Hub fishermen21/zerodds-<daemon>1✅ multi-arch linux/amd64 + linux/arm64, 8 daemons
ghcr.io zero-objects/zerodds-<daemon>1✅ via GITHUB_TOKEN, multi-arch
macOS codesign + notarize1✅ Developer ID Application + Installer certs, sign-macos.sh wired in release.yml
Homebrew tap zero-objects/homebrew-zerodds1✅ live, auto-PR on release
Scoop bucket zero-objects/scoop-zerodds1✅ live, auto-PR on release
Self-hosted APT repo (packages.zerodds.org/deb)1✅ TLS, GPG-signed
Self-hosted RPM repo (packages.zerodds.org/rpm)1✅ TLS, GPG-signed
Pull-deploy on packages.zerodds.org1✅ cron */5 sync from GitHub Releases, no inbound access from CI
Arch User Repository (zerodds-bin + zerodds)1✅ initial push done, auto-update job in release.yml
Gentoo overlay (zero-objects/gentoo-overlay)1✅ overlay repo published with ebuild
Ubuntu PPA (Launchpad)2after rc.1 stabilises
Fedora COPR2after rc.1 stabilises
Chocolatey community feed2after rc.1 stabilises
Windows Authenticode signing + MSIX (Microsoft Store)3⏸ skipped for rc.1 (Authenticode certificate cost)
Debian official, Fedora official, Homebrew core, NixOS4long-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

PolicyOne-line
ReliabilityReliable retransmits lost samples; BestEffort drops them.
DurabilityVolatile (no replay); TransientLocal (writer cache replay); Transient; Persistent.
HistoryKeepLast(n) per instance vs. KeepAll.
DeadlineMaximum interval between samples per instance; missed deadlines fire a status.
LifespanHow long a sample remains valid after publication.
LivelinessAutomatic (DCPS-managed) vs. Manual (application asserts).
OwnershipShared (multi-writer) vs. Exclusive (highest-strength wins).
ResourceLimitsMax samples / max instances / max samples per instance caps.
DestinationOrderByReceptionTimestamp vs. BySourceTimestamp.
ContentFilterSQL-like filter on the subscriber side.

Bridges

Pick the bridge for your protocol:

BridgeUse case
zerodds-ws-bridgedWebSocket clients, browser SPAs.
zerodds-mqtt-bridgedIoT MQTT broker integration.
zerodds-coap-bridgedConstrained-device CoAP.
zerodds-amqp-bridgedRabbitMQ / ActiveMQ enterprise queueing.
zerodds-grpc-bridgedgRPC service-mesh integration with auto-generated services per topic.
zerodds-corba-bridgedLegacy CORBA mainframes (financial-industry drop-in).
zerodds-ros2-shimROS-2 RMW plugin (REP-2007 / 2008 / 2009).

Security

Two layers:

Troubleshooting

Spec Mapping

Which OMG spec covers which feature:

Full handbook on GitHub →