AstuteDDS Documentation
Welcome to the AstuteDDS documentation. AstuteDDS is a comprehensive C++20 implementation of the Data Distribution Service (DDS) DCPS API with full DDSI-RTPS 2.5 and X-Types 1.3 support, designed for military and embedded applications.
Astute Inspect: See Your DDS System Live
Astute Inspect is AstuteDDS's visual diagnostics and topology workspace for DDS domains. It helps teams detect QoS mismatches, validate endpoint connectivity, and monitor live traffic quickly during integration and interoperability testing.

Learn more in the Astute Inspect documentation.
What is AstuteDDS?
AstuteDDS provides a static library (libastutedds.a) implementing:
- DDSI-RTPS 2.5: Wire protocol interoperability with OpenDDS, Fast DDS, and Cyclone DDS
- DDS-XTypes 1.3: Complete type system with TypeObject/TypeIdentifier, assignability, and dynamic types
- XCDR1/XCDR2: Full serialization support with delimited headers and mutable types
- IDL 4.2 Compiler: Code generation from IDL to C++ with type support
- GVA Profile: Support for UK Def Stan 23-009 (Generic Vehicle Architecture)
- Persistence Service: TRANSIENT and PERSISTENT durability for late-joining readers
- Recording & Replay: Capture DDS payload streams to disk and replay with original timing
- DDS Security: Authentication, access control, and encryption (optional)
Key Features
- ✅ Compliance Against OMG Standards: Implements DDS 1.4, DDSI-RTPS 2.5, DDS-XTypes 1.3, and DDS Security 1.1/1.2
- ✅ Interoperable: Works with other DDS implementations (OpenDDS, Fast DDS, Cyclone DDS)
- ✅ Modern C++: Uses C++20 features for type safety and performance
- ✅ Static Library: Single library for easy deployment
- ✅ IDL Code Generation: Generate C++ headers and sources from OMG IDL 4.2
- ✅ Domain Routing: Bridge topics and traffic between DDS domains
- ✅ Security Built-in: Optional DDS Security plugin support
- ✅ XML QoS Profiles: Load and apply QoS from OMG DDS XML files at runtime
- ✅ Persistence Service: TRANSIENT and PERSISTENT durability for late-joining readers
- ✅ Recording & Replay: Capture DDS payload streams to disk and replay with original timing
Supported Operating Systems
- Windows
- RHEL Family: RHEL, Rocky Linux, AlmaLinux
- Debian Family: Debian, Ubuntu, and compatible clones
Quick Links
- Getting Started - Learn the basics
- Shapes Demo - Run the interactive shapes demo
- QoS Guide - Configure Quality of Service
- DDS Security - Authentication, encryption, and access control
- Domain Router - Bridge DDS domains
- AstuteDDS Inspector - Visual topology and monitoring
- XML QoS Profiles - Load QoS from XML files
- Persistence Service - Durable data for late joiners
- Recording and Replay - Capture and replay DDS streams
- IDL Compiler - Generate C++ from IDL
- API Reference - Detailed API documentation
Project Status
| Category | Feature | Status |
|---|---|---|
| Wire Protocol | DDSI-RTPS 2.5 · SPDP · SEDP | ✅ Complete |
| UDP unicast & multicast / TCP / Shared memory | ✅ Complete | |
| DATA_FRAG / NACK_FRAG fragmentation | ✅ Complete | |
| Reliability | HEARTBEAT / ACKNACK · History cache · Resource limits | ✅ Complete |
| QoS | All 22 OMG DDS QoS policies | ✅ Complete |
| DDS-XML QoS profile loader | ✅ Complete | |
| Serialisation | XCDR1 · XCDR2 (DHEADER, EMHEADER) | ✅ Complete |
| IDL Compiler | IDL 4.2 → C++ · @key · @optional · @data_representation | ✅ Complete |
| X-Types | TypeObject · TypeIdentifier · Assignability · DynamicData · TypeLookup | ✅ Complete |
| DCPS API | All core entities · Content-Filtered Topics · Writer-side filtering | ✅ Complete |
| Persistence Service (TRANSIENT / PERSISTENT) | ✅ Complete | |
| Recording & Replay (DataLogTool) | ✅ Complete | |
| ROS 2 bridge helpers | ✅ Complete | |
| Security | Authentication · Access Control · AES-GCM Crypto SPIs | ✅ Complete |
| Tools | IDL compiler · DDS Inspector GUI · Qt6 Shapes Demo | ✅ Complete |
Example: Hello World
#include "HelloWorld.hpp"
#include <astutedds/dcps/CorePolicy.hpp>
#include <astutedds/dcps/dcps.hpp>
#include <astutedds/dcps/qos.hpp>
int main()
{
dds::domain::DomainParticipant participant(0, 0);
dds::topic::Topic<Demo::HelloWorld> topic(participant, "HelloWorldTopic");
dds::pub::Publisher publisher(participant);
astutedds::dcps::DataWriterQos wqos{};
wqos.reliability.kind = astutedds::dcps::ReliabilityQosPolicyKind::RELIABLE_RELIABILITY_QOS;
dds::pub::DataWriter<Demo::HelloWorld> writer(publisher, topic, wqos);
Demo::HelloWorld msg;
msg.id(1);
msg.message("Hello, DDS World!");
writer.write(msg);
return 0;
}
Documentation Structure
This documentation is organized into several sections:
- Getting Started: Installation, building, and basic concepts
- DDS Concepts: Core DDS principles and terminology
- Guides: Step-by-step tutorials for common tasks
- API Reference: Detailed API documentation
- Examples: Code examples and use cases
- About: Architecture, specifications, and project information
Need Help?
- Browse the Examples
- Read the Getting Started Guide
- Open an issue on GitHub
License
AstuteDDS is open source software. See the License page for details.