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. Native RTPS 2.5, wire-interoperable with Cyclone DDS, OpenDDS, Fast DDS and RTI Connext. Comes with bridges to MQTT, AMQP, CoAP, gRPC, CORBA, ROS-2, WebSocket and bindings for nine languages.

Install

This section describes release 1.0.0-rc.7. Its files are on GitHub Releases v1.0.0-rc.7: .deb packages (amd64, arm64), .rpm packages (x86_64), the Windows installer zerodds-1.0.0-rc.7-x64.msi, the macOS installers zerodds-bundle-1.0.0-rc.7-aarch64-apple-darwin.pkg and zerodds-bundle-1.0.0-rc.7-x86_64-apple-darwin.pkg, zip archives for Windows and one .tar.xz archive per program and target. The Rust crates are on crates.io as 1.0.0-rc.7. The install commands per language are on the binding pages; the source-build walkthrough starts from a checkout.

Checksums and signatures

SHA512SUMS lists the SHA-512 checksum of every file of the release; each archive also has its own .sha512 file. Check in the download directory:

# Linux
sha512sum -c --ignore-missing SHA512SUMS
# macOS
shasum -a 512 -c --ignore-missing SHA512SUMS
  • macOS: the .pkg installers are signed with an Apple Developer ID Installer certificate and notarized. The programs in the .tar.xz archives are signed with a Developer ID Application certificate and carry no notarization ticket.
  • APT and RPM repository: the metadata (InRelease, repomd.xml.asc) is signed with the key https://packages.zerodds.org/zerodds.gpg, fingerprint 9F3A EC47 4E83 0EAA 0283 C02C 2AF0 6C86 EF4D 2BCD. The .rpm files in the repository are signed with the same key; the .rpm files attached to the GitHub release are not.
  • Not signed in rc.7: SHA512SUMS and the other release files (no minisign or cosign signature) and the MSI (no Authenticode signature). The container images carry a SLSA provenance attestation and no cosign signature.

Linux — Debian / Ubuntu (APT)

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

Suites bookworm, trixie, jammy and noble, each for amd64 and arm64, with the same 17 packages: zerodds-core (libzerodds), zerodds-dev (headers, static libraries, CMake and pkg-config files), zerodds-cli (command-line programs) and 14 packages for the bridges and services. The key file ends in .asc because the key is ASCII-armored; APT ignores an armored key in a file ending in .gpg.

Linux — Fedora / RHEL / openSUSE (RPM)

The RPM packages of 1.0.0-rc.7 and 1.0.0-rc.1 cannot be installed. zerodds-core requires libzerodds.so()(64bit), which no package provides (zerodds-core itself provides libzerodds.so.1.0.0()(64bit)), and every other package requires zerodds-core. This holds for the packages in the repository and for those attached to the GitHub release. Installable packages come with the next release.

Until then, use on these systems the .tar.xz archive of a program from GitHub Releases v1.0.0-rc.7 or the build from source (below). On Debian and Ubuntu, the APT repository above works.

The repository on packages.zerodds.org has one definition file per distribution: rpm/zerodds-fedora.repo (Fedora 40 and 41), rpm/zerodds-rhel-9.repo and rpm/zerodds-opensuse-leap-15.6.repo, each with repo_gpgcheck=1. All three hold the same Fedora 40 build (.fc40), x86_64 only; there is no aarch64 repository. zerodds-cli of this build needs glibc 2.39; RHEL 9 has glibc 2.34, openSUSE Leap 15.6 glibc 2.38.

Linux — Arch (AUR)

yay -S zerodds-bin    # contents of the release .deb packages, x86_64 and aarch64
# or:
yay -S zerodds        # build from the source archive of the tag

Linux — Gentoo

The overlay zero-objects/gentoo-overlay contains only the ebuild for 1.0.0-rc.1 (net-libs/zerodds-1.0.0_rc1); there is no ebuild for rc.7.

macOS

sudo installer -pkg zerodds-bundle-1.0.0-rc.7-aarch64-apple-darwin.pkg -target /
# Intel: zerodds-bundle-1.0.0-rc.7-x86_64-apple-darwin.pkg

The installer puts the command-line programs and daemons into /usr/local/bin. It contains no libzerodds, no headers and no launchd job; for the C API on macOS, build zerodds-c-api from source. The Homebrew tap zero-objects/homebrew-zerodds still holds the formulae of 1.0.0-rc.1 with placeholder checksums; brew install does not work with it.

Windows

# installer (x64)
msiexec /i zerodds-1.0.0-rc.7-x64.msi
# or Scoop (x64, arm64)
scoop bucket add zerodds https://github.com/zero-objects/scoop-zerodds
scoop install zerodds

The MSI and the Scoop package install the command-line programs and the bridge daemons; neither contains libzerodds (zerodds.dll). The MSI registers six bridge daemons as Windows services.

Containers

# GitHub Container Registry (linux/amd64 + linux/arm64)
docker pull ghcr.io/zero-objects/zerodds-ws-bridged:v1.0.0-rc.7
docker pull ghcr.io/zero-objects/zerodds-mqtt-bridged:v1.0.0-rc.7
# Docker Hub: fishermen21/zerodds-<name>:v1.0.0-rc.7

Images: zerodds-cli, zerodds-ws-bridged, zerodds-mqtt-bridged, zerodds-coap-bridged, zerodds-amqp-bridged, zerodds-grpc-bridged, zerodds-corba-bridged, zerodds-ros2-shim.

Language packages

LanguageRegistry and packageCommand
Rustcrates.io zerodds-dcpscargo add zerodds-dcps
PythonPyPI zeroddspip install zerodds
TypeScript (Node)npm @zerodds/nodenpm install @zerodds/node@rc
C# / .NETNuGet ZeroDDSdotnet add package ZeroDDS --prerelease
JavaMaven Central org.zerodds:omgddsorg.zerodds:omgdds:1.0.0-rc.7

The registries hold only pre-release versions. cargo add and pip install take the newest pre-release when there is no release; dotnet add package needs --prerelease or --version 1.0.0-rc.7, cargo install needs --version 1.0.0-rc.7. On npm, the tag latest still points to 1.0.0-rc.2; @rc selects 1.0.0-rc.7.

From source

git clone https://github.com/zero-objects/zero-dds
cd zero-dds && cargo build --release

First Pub/Sub

Use the maintained live publisher/subscriber walkthrough. It links the executable sources, runs two processes and identifies the payload as RawBytes. Offline participant construction is not a network example.

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:

  • 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 snapshot to capture SPDP/SEDP traffic.
  • Sample lost — verify Reliability=Reliable on both writer and reader. BestEffort drops on congestion.
  • Wire-incompat with another DDS — capture both sides with tcpdump -i any -X port 7400 and diff.
  • Cross-language struct mismatch — regenerate code with idlc from 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.

Full handbook on GitHub →

User Guide

Für Entwickler:innen, die Anwendungen auf ZeroDDS aufbauen. Kompaktes Handbuch in acht Abschnitten.

Was ist ZeroDDS

Pure-Rust-Implementierung des OMG Data Distribution Service. Natives RTPS 2.5, wire-interoperabel mit Cyclone DDS, OpenDDS, Fast DDS und RTI Connext. Mit Bridges zu MQTT, AMQP, CoAP, gRPC, CORBA, ROS-2, WebSocket und Bindings für neun Sprachen.

Installation

Dieser Abschnitt beschreibt das Release 1.0.0-rc.7. Seine Dateien liegen unter GitHub Releases v1.0.0-rc.7: .deb-Pakete (amd64, arm64), .rpm-Pakete (x86_64), der Windows-Installer zerodds-1.0.0-rc.7-x64.msi, die macOS-Installer zerodds-bundle-1.0.0-rc.7-aarch64-apple-darwin.pkg und zerodds-bundle-1.0.0-rc.7-x86_64-apple-darwin.pkg, Zip-Archive für Windows und ein .tar.xz-Archiv je Programm und Ziel. Die Rust-Crates stehen auf crates.io als 1.0.0-rc.7. Die Installationsbefehle je Sprache stehen auf den Binding-Seiten; der Einstieg zum Quellbuild beginnt mit einem Checkout.

Prüfsummen und Signaturen

SHA512SUMS enthält die SHA-512-Prüfsumme jeder Datei des Releases; jedes Archiv hat zusätzlich eine eigene .sha512-Datei. Prüfen im Download-Verzeichnis:

# Linux
sha512sum -c --ignore-missing SHA512SUMS
# macOS
shasum -a 512 -c --ignore-missing SHA512SUMS
  • macOS: Die .pkg-Installer sind mit einem Apple-Zertifikat „Developer ID Installer“ signiert und notarisiert. Die Programme in den .tar.xz-Archiven sind mit einem Zertifikat „Developer ID Application“ signiert und haben kein Notarisierungs-Ticket.
  • APT- und RPM-Repository: Die Metadaten (InRelease, repomd.xml.asc) sind mit dem Schlüssel https://packages.zerodds.org/zerodds.gpg signiert, Fingerabdruck 9F3A EC47 4E83 0EAA 0283 C02C 2AF0 6C86 EF4D 2BCD. Die .rpm-Dateien im Repository sind mit demselben Schlüssel signiert, die .rpm-Dateien am GitHub-Release nicht.
  • In rc.7 nicht signiert: SHA512SUMS und die übrigen Release-Dateien (keine minisign- oder cosign-Signatur) sowie das MSI (keine Authenticode-Signatur). Die Container-Images tragen eine SLSA-Provenance-Attestierung und keine cosign-Signatur.

Linux — Debian / Ubuntu (APT)

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

Suites bookworm, trixie, jammy und noble, jeweils für amd64 und arm64, mit denselben 17 Paketen: zerodds-core (libzerodds), zerodds-dev (Header, statische Bibliotheken, CMake- und pkg-config-Dateien), zerodds-cli (Kommandozeilenprogramme) und 14 Pakete für die Bridges und Dienste. Die Schlüsseldatei endet auf .asc, weil der Schlüssel im ASCII-Format („armored“) vorliegt; APT ignoriert einen solchen Schlüssel in einer Datei mit der Endung .gpg.

Linux — Fedora / RHEL / openSUSE (RPM)

Die RPM-Pakete von 1.0.0-rc.7 und 1.0.0-rc.1 lassen sich nicht installieren. zerodds-core verlangt libzerodds.so()(64bit), das kein Paket bereitstellt (zerodds-core selbst stellt libzerodds.so.1.0.0()(64bit) bereit), und jedes andere Paket verlangt zerodds-core. Das gilt für die Pakete im Repository und für die am GitHub-Release. Installierbare Pakete kommen mit dem nächsten Release.

Bis dahin auf diesen Systemen: das .tar.xz-Archiv eines Programms aus GitHub Releases v1.0.0-rc.7 oder der Bau aus der Quelle (unten). Unter Debian und Ubuntu funktioniert das APT-Repository oben.

Das Repository auf packages.zerodds.org hat je Distribution eine Definitionsdatei: rpm/zerodds-fedora.repo (Fedora 40 und 41), rpm/zerodds-rhel-9.repo und rpm/zerodds-opensuse-leap-15.6.repo, jeweils mit repo_gpgcheck=1. Alle drei enthalten denselben Fedora-40-Bau (.fc40), nur x86_64; ein aarch64-Repository gibt es nicht. zerodds-cli aus diesem Bau braucht glibc 2.39; RHEL 9 hat glibc 2.34, openSUSE Leap 15.6 glibc 2.38.

Linux — Arch (AUR)

yay -S zerodds-bin    # Inhalt der .deb-Pakete des Releases, x86_64 und aarch64
# oder:
yay -S zerodds        # Build aus dem Quellarchiv des Tags

Linux — Gentoo

Das Overlay zero-objects/gentoo-overlay enthält nur das Ebuild für 1.0.0-rc.1 (net-libs/zerodds-1.0.0_rc1); für rc.7 gibt es kein Ebuild.

macOS

sudo installer -pkg zerodds-bundle-1.0.0-rc.7-aarch64-apple-darwin.pkg -target /
# Intel: zerodds-bundle-1.0.0-rc.7-x86_64-apple-darwin.pkg

Der Installer legt die Kommandozeilenprogramme und Daemons nach /usr/local/bin. Er enthält kein libzerodds, keine Header und keinen launchd-Job; für die C-API auf macOS zerodds-c-api aus dem Quellcode bauen. Der Homebrew-Tap zero-objects/homebrew-zerodds enthält noch die Formeln von 1.0.0-rc.1 mit Platzhalter-Prüfsummen; brew install funktioniert damit nicht.

Windows

# Installer (x64)
msiexec /i zerodds-1.0.0-rc.7-x64.msi
# oder Scoop (x64, arm64)
scoop bucket add zerodds https://github.com/zero-objects/scoop-zerodds
scoop install zerodds

Das MSI und das Scoop-Paket installieren die Kommandozeilenprogramme und die Bridge-Daemons; keines von beiden enthält libzerodds (zerodds.dll). Das MSI registriert sechs Bridge-Daemons als Windows-Dienste.

Container

# GitHub Container Registry (linux/amd64 + linux/arm64)
docker pull ghcr.io/zero-objects/zerodds-ws-bridged:v1.0.0-rc.7
docker pull ghcr.io/zero-objects/zerodds-mqtt-bridged:v1.0.0-rc.7
# Docker Hub: fishermen21/zerodds-<name>:v1.0.0-rc.7

Images: zerodds-cli, zerodds-ws-bridged, zerodds-mqtt-bridged, zerodds-coap-bridged, zerodds-amqp-bridged, zerodds-grpc-bridged, zerodds-corba-bridged, zerodds-ros2-shim.

Sprachpakete

SpracheRegistry und PaketBefehl
Rustcrates.io zerodds-dcpscargo add zerodds-dcps
PythonPyPI zeroddspip install zerodds
TypeScript (Node)npm @zerodds/nodenpm install @zerodds/node@rc
C# / .NETNuGet ZeroDDSdotnet add package ZeroDDS --prerelease
JavaMaven Central org.zerodds:omgddsorg.zerodds:omgdds:1.0.0-rc.7

Die Registries enthalten nur Vorabversionen. cargo add und pip install nehmen die neueste Vorabversion, wenn es keine reguläre Version gibt; dotnet add package braucht --prerelease oder --version 1.0.0-rc.7, cargo install braucht --version 1.0.0-rc.7. Auf npm zeigt das Tag latest noch auf 1.0.0-rc.2; @rc wählt 1.0.0-rc.7.

Aus dem Quellcode

git clone https://github.com/zero-objects/zero-dds
cd zero-dds && cargo build --release

Erstes Pub/Sub

Nutze den gepflegten Live-Publisher-/Subscriber-Einstieg. Er verlinkt die ausführbaren Quellen, startet zwei Prozesse und kennzeichnet die Nutzdaten als RawBytes. Offline-Participants sind kein Netzwerkbeispiel.

QoS-Spickzettel

PolicyEinzeiler
ReliabilityReliable sendet verlorene Samples erneut; BestEffort verwirft sie.
DurabilityVolatile (kein Replay); TransientLocal (Writer-Cache-Replay); Transient; Persistent.
HistoryKeepLast(n) pro Instanz vs. KeepAll.
DeadlineMaximaler Abstand zwischen Samples pro Instanz; verpasste Deadlines lösen einen Status aus.
LifespanWie lange ein Sample nach der Veröffentlichung gültig bleibt.
LivelinessAutomatic (DCPS-verwaltet) vs. Manual (Anwendung bestätigt).
OwnershipShared (Multi-Writer) vs. Exclusive (höchste Strength gewinnt).
ResourceLimitsCaps für max. Samples / max. Instanzen / max. Samples pro Instanz.
DestinationOrderByReceptionTimestamp vs. BySourceTimestamp.
ContentFilterSQL-ähnlicher Filter auf der Subscriber-Seite.

Bridges

Wähle die Bridge für dein Protokoll:

BridgeAnwendungsfall
zerodds-ws-bridgedWebSocket-Clients, Browser-SPAs.
zerodds-mqtt-bridgedIoT-MQTT-Broker-Integration.
zerodds-coap-bridgedCoAP für ressourcenbeschränkte Geräte.
zerodds-amqp-bridgedRabbitMQ / ActiveMQ Enterprise-Queueing.
zerodds-grpc-bridgedgRPC-Service-Mesh-Integration mit auto-generierten Services pro Topic.
zerodds-corba-bridgedLegacy-CORBA-Mainframes (Finanzindustrie-Drop-in).
zerodds-ros2-shimROS-2-RMW-Plugin (REP-2007 / 2008 / 2009).

Security

Zwei Schichten:

  • DDS-Security 1.2 — OMG-Plugins, aktiviert über Participant-QoS. Auth + AccessControl + Crypto + Logging + DataTagging.
  • bridge-security — TLS 1.3 (rustls), Bearer / JWT-RS256 / mTLS / SASL-PLAIN, ACL mit Wildcard- + Gruppen-Matching, SIGHUP-Cert-Rotation.

Fehlersuche

  • Discovery still — prüfe, ob Multicast in deinem Netz aktiviert ist. Mit zerodds-admin discovery snapshot SPDP/SEDP-Verkehr aufzeichnen.
  • Sample verloren — Reliability=Reliable auf Writer und Reader prüfen. BestEffort verwirft bei Überlast.
  • Wire-Inkompatibilität mit anderem DDS — beide Seiten mit tcpdump -i any -X port 7400 aufzeichnen und vergleichen.
  • Cross-Language-Struct-Mismatch — Code mit idlc aus einer einzigen kanonischen IDL neu generieren.
  • TLS-Handshake schlägt fehl — prüfen, ob das ALPN-Protokoll passt; mTLS erfordert eine Client-Cert-Kette, die in der CA des Servers wurzelt.

Spec-Mapping

Welche OMG-Spec welches Feature abdeckt:

  • Pub/Sub-API — DDS-DCPS 1.4 §2.2.
  • Wire-Format — DDSI-RTPS 2.5 + DDS-XTypes 1.3 (XCDR1/XCDR2).
  • Typsystem — DDS-XTypes 1.3 + IDL 4.2.
  • Security — DDS-Security 1.2.
  • QoS-XML — DDS-XML 1.0.
  • Ressourcenbeschränkte Geräte — DDS-XRCE 1.0.
  • RPC — DDS-RPC 1.0.

Vollständiges Handbuch auf GitHub →