Changelog
All notable changes to HDDS are documented here.
[Unreleased]
Added
- hdds_gen TypeScript backend - Generate TypeScript interfaces with CDR2 encode/decode
- @default annotation - Support for
@default(value)in IDL parser - Builders for IDL structs - Type-safe builder pattern generation
- Topic wildcards - MQTT-style matching (
+single-level,#multi-level) - LowBw RX pipeline - Complete
process_frame()with CRC, delta decoding, compression - Cdr2Encode/Cdr2Decode for String - CDR2 traits for String type
- hdds-ws documentation - Complete README with JavaScript/TypeScript examples
- Shared memory transport (experimental)
- Content-filtered topics
Changed
- Improved discovery performance by 40%
Quality
- Full sanitizer validation - All 4 sanitizers pass clean:
- Valgrind: 0 bytes definitely lost
- ASan: 2171/2173 tests (2 timing-sensitive excluded)
- TSan: 0 data races (std lib false positives only)
- MSan: 0 uninitialized reads (std lib false positive only)
- Continuous fuzzing - 6 fuzz targets, 0 crashes:
- fuzz_rtps_spdp, fuzz_rtps_sedp, fuzz_rtps_control, fuzz_xml_permissions
- fuzz_idl_parser (added V7), fuzz_cdr2 (added V7)
- Extreme audit - 0 CRITICAL, 0 HIGH, 193 MEDIUM, 29 LOW
Fixed
- sequence<string> codegen - Fixed generation for bounded strings
- Float array encoding - Use
to_le_bytes()loop instead ofcopy_from_slice - Memory leak in long-running subscribers (99.1% reduction)
- Multicast route detection on macOS
V6 - SDK Consolidation (2026-02)
Added
- Listeners FFI exported -
DataReaderListenerandDataWriterListenernow available in C, C++, and Python SDKs - hdds-telemetry-otlp crate - OpenTelemetry OTLP export for traces and metrics (Jaeger, Grafana Tempo, Datadog)
- TypeScript SDK (
sdk/typescript/) - WebSocket-based client with@hdds/clientpackage - hdds-ws WebSocket bridge - Complete 4-bug fix pass (JSON serialization, reconnection, topic filtering, heartbeat)
Changed
- C SDK enum prefixing - All 33 enum variants now use
HDDS_prefix (breaking:OK->HDDS_OK,RELIABLE->HDDS_RELIABLE, etc.) - SDK C FFI expanded to 265+ functions - Transport Config, Security Config, Dynamic Types, Content Filters, Conditions, RPC
- Router status command rewritten with actionable diagnostic output
- Removed
hdds-asynccrate (was 7-line placeholder, misleading)
Fixed
- Python SDK - 4 function name mismatches in
waitset.py, 1 type mismatch in_native.py(c_uint32->c_uint16) - C++ SDK - Commented out 3 unimplemented DSCP declarations that had no C FFI backing
- rmw_hdds - 120 cascading fixes from enum renaming
V5 - SDK Samples (2026-01)
Added
- 20 new QoS samples - lifespan, latency_budget, time_based_filter, transport_priority, resource_limits (x4 languages)
- 12/12 QoS policies now have SDK samples (was 7/12)
- 28 concept demo disclaimers - Security, advanced, and performance samples marked with honest capability status
Changed
- 5 QoS Rust sample builder API fixes for consistency
[1.0.0] - 2024-12-01
First Stable Release
HDDS 1.0.0 marks the first production-ready release with full DDS 1.4 and RTPS 2.5 compliance.
Features
-
Core DDS API
- DomainParticipant, Publisher, Subscriber
- Topic, DataWriter, DataReader
- Full QoS policy support (22 policies)
-
Multi-Language Support
- Rust (native)
- C bindings (FFI)
- C++ bindings (RAII wrapper)
- Python bindings (PyO3)
-
RTPS 2.5 Compliance
- SPDP/SEDP discovery
- Reliable and best-effort transport
- Large data fragmentation
- Participant redundancy
-
Interoperability
- Tested with FastDDS, RTI Connext, CycloneDDS
- Wire-compatible with RTPS 2.3+ implementations
-
Tools
- hdds_gen code generator
- hdds_viewer network analyzer
- hdds_studio visual IDL editor
Known Limitations
- DDS Security is feature-complete but not yet FIPS certified
- Shared memory transport is experimental
- Windows ARM64 not yet supported
[0.9.0] - 2024-10-15
Release Candidate
- Feature freeze for 1.0
- Security audit completed
- Performance benchmarks published
[0.8.0] - 2024-08-01
Beta Release
- C++ bindings added
- QoS XML profile support
- hdds_studio initial release
Migration Guides
Migrating from 0.x to 1.0
Breaking changes in 1.0:
// 0.x API
let writer = participant.create_datawriter(&topic)?;
// 1.0 API - renamed for clarity
let writer = participant.create_writer(&topic)?;