zerodds (Python)
Python bindings for ZeroDDS, the native Rust DDS implementation.
Installation (Dev-Setup)
# Maturin in a virtualenv
# Build + install in develop mode (rebuild on code change)
Schnellstart
=
=
=
=
=
=
=
Tests
Scope (current version)
DomainParticipantFactory,DomainParticipantwithassert_liveliness,ignore_*,contains_entity,get_discovered_*BytesTopic/BytesWriter/BytesReaderfor opaque payloadShapeTopic/ShapeWriter/ShapeReader+Shapedataclass for cross-vendor interop against Cyclone/Fast-DDS ShapesDemo- Status getters:
publication_matched_status,liveliness_lost_status,subscription_matched_status,sample_lost_status, … GuardCondition+WaitSet- Sync primitives:
wait_for_matched_*,wait_for_data - GIL release during all blocking calls
Roadmap
- IDL→Python dataclass generator (
@dataclassfrom IDL); then arbitraryDdsTypes work natively from Python. - ROS2 pytest integration + multi-process live tests + sphinx docs.
- Load QoS profiles from XML/YAML (analogous to the Fast-DDS QoS Profiles Manager).
Architecture
The Rust crate zerodds-py builds as a cdylib (zerodds._core). The
Python wrapper python/zerodds/__init__.py re-exports and adds
pythonic sugar where needed.
The Rust core is identical to the Rust API — no Python- specific business logic, only type conversions + GIL release. This keeps the binding thin and keeps the DDS semantics in one place.