v1.1.0 Release notes

New features


You can now debug a running simulation with the familiar tools of Visual Studio. Individual workers within a simulation can be paused, enabling you to inspect variables, step through code and assign values. See the debugging documentation to get started.

Unity client

Using C# bindings, Unity clients can connect to Aether Engine simulations to receive and send messages. This is demonstrated in an example Unity PhysX project, which shows bouncing PhysX cubes in Unity, with user interaction using FlatBuffers to share protocol definitions between C++ and C# code bases. See the Unity documentation to get started.


Aether Engine Common Library

  • code_position_2f has been renamed to net_decode_position_2f to fix an accidental rename.
  • tl::optional is now exposed in the aether::compatibility namespace.
  • Preprocessor logic has been fixed so that aether::optional is std::optional for C++17 and above.
  • Preprocessor logic has been fixed so that aether::monostate is std::monostate for C++17 and above.
  • The common/io/byteorder.hh header has been added which contains the aether::io::byte_order::endian_buffer class along with typedefs for buffers which hold unsigned integers in little and big-endian representations.
  • The logging framework has been updated to prevent race conditions in initialisation which could lead to crashes.
  • aether::morton::AABB has been modified not to use the range-v3 library.
  • Serialization support has been added to morton_code and cell.
  • All headers and source files have been updated not to include C++17 headers.
  • interval now asserts that the end is after the start during construction.
  • region::clear() has been added.
  • mpl::uint_exact has been added which maps bit-widths to unsigned integer types.
  • Aether Engine's random number generation functions are moved to the aether::random namespace.
  • The last_error_is_would_block function is added to tcp.hh which enables checking if the last socket operation would have blocked on Posix and Windows.

Aether Engine

  • The unmaintained MPI support has been removed.
  • A bug is fixed where simulations using the global state and not using the external storage writer could not shutdown cleanly.


  • Cloning an ECS component from an existing one no longer leads to undefined behaviour.

Generic Netcode

  • The generic netcode will now emit a warning when no updates are sent to a player because no user-controlled entity is found.
  • The decode function of demarshaller now returns a int error code instead of a bool indicating success.


  • The repclient is now default constructable.
  • All non-default repclient constructors are marked as deprecated (since they would assert on failure)
  • The connect, connect_record and connect_playback functions are added to the repclient to initiate connections and interact with dump files.
  • The repclient now correctly interprets an EOF during send or receive as a disconnect.
  • The repclient now interprets an error or EOF while reading a dump file as a disconnect.
  • The repclient now correctly handles "would block" errors during sends and receives.


  • aether run has a new --debug flag that will start a simulation with debugging enabled.
  • aether list-paused-processes is a new command that will provide the list of Hadean PIDs that are currently paused on a hadean::stop() call.
  • aether continue-all will continue any processes that have been paused at either a hadean::stop() call or breakpoint and are not currently being debugged.
  • aether status will now indicate if the simulation being inspected was run with debugging enabled, and if there is currently a debugger attached.


  • The installer now supports installing the Visual Studio extension and the Unity plugin.


  • The Physics demo now includes a Unity client.