Release Notes#

These are all the recent releases of OpenDDS.


Released 2024-04-16

Download this release on GitHub.

Read the documentation for this release on Read the Docs.


  • Added an XCDR2 value writer that can be used to serialize static and dynamic samples to XCDR2 encoding format. (PR #4421)

  • Added utility to flatten the index to a multi-dimensional array represented by dynamic data. (PR #4421)

  • A new header, dds/OpenDDSConfig.h is generated by configure or CMake. (PR #4482, PR #4498)

    • Users manually configuring a build will need to create this file, which may be empty, or add #define OPENDDS_IGNORE_OPENDDSCONFIG_H_FILE to their ace/config.h file.

    • See dds/ for details.

  • ConfigStore

  • The @value(x) annotation is now supported on IDL enumerators when using the IDL-to-C++11 mapping. (PR #4519)

  • The IDL for the Shapes example was updated for interoperability. (PR #4528)

  • Added [rtps_discovery] SpdpUserTag. (PR #4533)

  • The data type for the OpenDDS-specific Built-in ParticipantLocation Topic now includes the lease duration. (PR #4545)

  • Allow compile-time configuration of CLOCK_BOOTTIME as the clock used for timers (PR #4568)

    • If the platform supports it, this can be done using --boottime when building with the configure script or OPENDDS_BOOTTIME_TIMERS when building with CMake.

Platform Support and Dependencies#




Released 2024-02-07

Download this release on GitHub.

Read the documentation for this release on Read the Docs.


Platform Support and Dependencies#

  • Improved support for configure script detection of clang on Linux (PR #4449)

  • When using Visual C++, OpenDDS can now be configured using --std=c++NN (NN = 17 or 20). (PR #4452)


  • Updated the read and write semantics of DynamicData for union, expandable collections (sequence and string), and optional member of an aggregated type. (PR #4278)

  • Fixed memory leak where instances were not cleaned up with exclusive ownership. (PR #4343)

  • Removed the special handling for sequence members with length code of 5,6, or 7. (PR #4376)

  • Reading data from a dynamic data object for a primitive type now must use MEMBER_ID_INVALID id. (PR #4376)

  • create_datawriter and create_datareader check if the topic belongs to the same participant as the publisher/subscriber. (PR #4398)

  • Fixed uninitialized durability_service in Topic QoS when using QoS-XML. (PR #4424)

  • Fixed a bug where compiling IDL with -Lc++11 -Gequality produced code outside of a namespace that didn’t compile. (PR #4450)

  • SedpLocalAddress now defaults to [common] DCPSDefaultAddress to behave like SpdpLocalAddress and local_address. (PR #4451)



Released 2023-11-14

Download this release on GitHub.

Read the documentation for this release on Read the Docs.


  • Building with CMake

    • Fixed Issue #4328, where each run of CMake effectively always appended the MPC features to default.features in ACE. (PR #4330)

  • Fixed a corner case in RTPS ParameterList parsing (PR #4336)

  • Reject some types of invalid RTPS DataFrag submessages (PR #4348)


Released 2023-10-23

Download this release on GitHub.

Read the documentation for this release on Read the Docs.




  • Improved the subject name parsing to better conform to the DDS Security spec. (PR #4201)

    • The order of attributes in subject names is now significant when comparing them.

  • Remove from TypeLookupService when remote endpoint is removed from SEDP (PR #4216)

  • WaitSet is now notified when DataWriter liveliness is lost. (PR #4223)

  • ICE doesn’t use IPv4-mapped IPv6 addresses anymore. (PR #4230)

  • Efficiency: Remove per-element locking in JobQueue (PR #4253)

  • RtpsRelay: fixed bug in record_activity’s use of remove in GuidAddrSet (PR #4254)

  • Fix warnings in typeobject_generator when using TAO 3 (PR #4262)

  • Fix null pointer when participant is absent when updating locators (PR #4265)

  • Initialize variables in TypeObject to silence warnings (PR #4292)

  • RtpsRelay: Use ACE_Message_Block’s locking strategy for cached SPDP to fix tsan warning (PR #4293)

  • Fix tsan warning in ReactorTask (PR #4298)


  • Removed documentation for -Grapidjson option of opendds_idl that was removed in 3.20.0 (PR #4231)

  • Remove reference to mailing lists (PR #4234)

  • Restructured parts of DDS Security page and expanded documentation of some XML security document elements. (PR #4281)

  • OS-specific instructions will now be automatically selected based on the browser’s user agent. (PR #4281)

  • OMG specification section references are now links to that section in the specification PDF. (PR #4281)

  • Move build and install instructions to DevGuide (PR #4294)

  • Incorporate the quick start guides, FAQ, and shapes demo into the DevGuide. (PR #4297)


  • Using Perl 5.38.0 might prevent TAO from building properly, see here for details.


Released 2023-07-20

Download this release on GitHub.

Read the documentation for this release on Read the Docs.



  • Fixed null pointer exception caused by RTPS Parameters with incorrect zero size. (PR #4197)


  • CMake Config Package

    • Made linking dependencies and macro definitions closer match using MPC with OpenDDS and TAO. (PR #4140)

    • Fixed issues with passing OPENDDS_IDL_OPTIONS -SI to opendds_target_sources. (PR #4140)

  • Fixed issue deserializing bounded sequences with JSON (PR #4150)

    • The deserialization will fail if the JSON input contains more elements than the bounded sequence can hold.

  • Updated the RtpsRelay’s tracking of client IP addresses so they are removed when no longer used. (PR #4202)

    • The RtpsRelay configuration option -MaxAddrSetSize was renamed to -MaxIpsPerClient



  • CMake Config Package

    • OPENDDS_TARGET_SOURCES is now called opendds_target_sources. (PR #4140)

      • CMake macros and functions names are case insensitive, so this should have no effect on CMake code.


Released 2023-06-30

Download this release on GitHub.

Read the documentation for this release on Read the Docs.


  • Fixed a vulnerability in the rtps_udp transport where an acknowledgement sequence number beyond the maximum expected by the writer leads to an assert and incorrect state. (PR #4155)

    • Thanks to Seulbae Kim (@squizz617) for discovering this.


  • Fixed leaked shared memory by the shared memory transport. (PR ##4171)

  • Fixed bug introduced by PR #4120 (PR #4180, PR #4184)

    • The fix introduced in #4120 causes the TransportClient to silently drop messages when the client’s guid is not initialized. This causes issues for TransportClients that send messages to the transport before association. One such example is a DataWriter with liveliness configured. The DataWriter will send liveliness messages to the transport (which will be dropped) and hang waiting for them to be delivered.

    • The solution was set the guid for a TransportClient before calling any method that uses the guid.


  • PR #4180 required changes in InfoRepoDiscovery’s IDL, so InfoRepo compatibility with older versions has been broken.


Released 2023-04-22

Download this release on GitHub.

Read the documentation for this release on Read the Docs.


  • Fixed compile warnings in TypeSupport that can happen with GCC and -O2 or higher (PR #4117)

  • Fixed compile error in TypeSupport for IDL that contains a typedef of a typedef (PR #4117)

  • Fixed bug in the tcp transport where readers and writers can fail to associate (PR #4120)

  • Fixed issue in some headers that could leak #pragma pack (push, 8) into user code on Visual Studio (PR #4123)

  • Fixed theoretical infinite loop in rtps_udp transport code (PR #4124)


  • Removed invalid links and references in README and the Developer’s Guide and fixed other minor issues (PR #4115, PR #4116, PR #4121, PR #4126)

  • Changed theme used by the Sphinx documentation to make the Developer’s Guide easier to navigate (PR #4127)

  • Added copy buttons to embedded code and code-like examples (PR #4127)


Released 2023-04-11

Download this release on GitHub.

Read the documentation for this release on Read the Docs.


  • The OpenDDS Developer’s Guide is now available at (PR #4100, PR #4101, PR #4102, PR #4103, PR #4104, PR #4105, PR #4051, PR #4092, PR #4094, PR #4095)

    • The Sphinx/reStructuredText source for this new format is now located in the repo at docs/devguide

  • DOCGroup ACE6/TAO2 is now the default ACE/TAO for OpenDDS, OCI ACE/TAO is no longer supported (PR #4069)

  • Dynamic content subscription (PR #3988)

    • This allows DynamicDataReaders to use QueryCondition and ContentFilteredTopic and allows DynamicDataWriters to do filtering on behalf of matched DataReaders that use ContentFilteredTopic.

  • DynamicData

    • Can now read and write enum members as strings (PR #4022)

    • DynamicDataImpl now uses lazy initialization to reduce memory usage (PR #4024)

    • get_int64_value and get_uint64_value can now cast from different types (PR #4078)

  • Added aliases for IDL types from XTypes spec such as DDS::UInt32 (PR #3394)

  • Added PublicationMatchedStatus Current Count To RtpsRelay Statistics (PR #4006)

  • Allow reassembly of overlapping fragment ranges in RTPS (PR #4035, PR #4047)

  • Added hardening features to RtpsRelay (PR #4045)

    • These are configured with the new options -MaxAddrSetSize and -RejectedAddressDuration.

  • Can now cross-compile on macOS (PR #4048)

  • Added OPENDDS_AUTO_LINK_DCPS and OPENDDS_USE_CORRECT_INCLUDE_SCOPE global options to the CMake package (PR #4071)

  • Expanded support for using C++ keywords in IDL (PR #4073)

  • IDL file and generated TypeSupport.idl can now be in different directories (PR #4077)

  • Improved support for anonymous types in unions branches (PR #4078)


  • Fixed rtps_relay_address_change deadlocks (PR #3989)

  • Fixed RtpsUdpTransport data race from relay_stun_mutex_ (PR #3990)

  • Fixed invalid socket handles in RtpsUdpTransport (PR #4002)

  • Fixed index increment in GuidPartitionTable::prepare_relay_partitions (PR #4005)

  • Improved reliability of the shared memory transport (PR #4028)

  • Fixed a bug in content filtering with enum comparisons on serialized samples (PR #4038)

  • Secure writers and readers in same participant can now associate (PR #4041)

  • Fixed transport config and transport instance derived from template conflicting (PR #4058)

  • Fixed issue with using -o in tao_idl/opendds_idl options in OPENDDS_TARGET_SOURCES and those directories are now automatically included (PR #4071)

  • XTypes (PR #4078)

    • TypeObjects struct and union members used to be sorted by member ID, but they are now sorted by declaration order as the XTypes spec calls for.

      By default member IDs increment starting at 0, and in that case the TypeObjects will be the same. If @autoid(hash), --default-autoid hash, or @id(ID) are being used then the order could be different. This could cause some reader/writer matching incompatibility with older versions of OpenDDS:

      • Topics with final and appendable structs will no longer match.

      • If DISALLOW_TYPE_COERCION QoS is being used, then all topics where the order differ will not longer match. Note that this is true for any time the type hash changes.

      • Pass the opendds_idl --old-typeobject-member-order to use the non-standard order.

    • The size of XCDR2 member parameters in mutable structs and unions is now correctly interpreted when the “length code” is 5, 6, or 7.

      • This is an optimization that OpenDDS doesn’t serialize samples with, so this could only be an issue when dealing with samples from other DDS implementations.

    • DynamicDataImpl (DynamicData made by DynamicDataFactory that can be passed to DynamicDataWriter):

      • get_member_id_at_index now returns ids for members that haven’t been initialized yet.

      • Fixed incorrect serialization of keyed unions for instance registration, disposal, and unregistration samples.

      • Fixed errors from serializing some cases of arrays and sequences.


  • Release files will only be uploaded to GitHub from now on

  • OpenDDS::DCPS::RepoId has been removed, if needed use OpenDDS::DCPS::GUID_t instead (PR #3972)

Older Releases#

Older releases can be found in