All posts
Release

0.27 — the C++ SDK leaves beta

Header-first, CMake and Bazel targets, and the same schema as everything else. Plus a Jetson build that does not need a cross-compiler.

The C++ SDK has been usable for a year and labelled beta the whole time, which was starting to be dishonest. It is stable now, and here is what changed to get there.

One schema, generated

The reason we were comfortable calling it stable is that almost none of it is hand-written. The archetypes, components and their serialisation are generated from the same schema that produces the Python and Rust bindings.

A recording written by the C++ SDK is byte-identical to one written by Python with the same data. That is a property we can test, and we do, on every commit.

#include <dalaran.hpp>

int main() {
    const auto rec = dalaran::RecordingStream("robot");
    rec.spawn().exit_on_failure();

    rec.set_time_sequence("frame", 0);
    rec.log("world/points", dalaran::Points3D(cloud).with_radii(0.01f));
}

Build integration

Two paths, both first-class: a CMake FetchContent block pulling a prebuilt static core, or a Bazel target. There is also an amalgamated single-header-plus-archive drop for teams with build systems that predate both.

Jetson without pain

The thing we are most pleased about. Previously, running on a Jetson meant cross-compiling the Rust core yourself. We now publish aarch64 Linux artefacts, so the same CMake block works on the robot as on your laptop.

What "stable" means here

The API will not break within 0.x releases. The wire format is versioned and the viewer reads older versions. If we do need a breaking change, it comes with a dalaran migrate path, as the 0.26 data model change did.