Skip to content

Releases: rerun-io/rerun

0.25.0 - Syntax highlighting, table filtering, transparent objects

16 Sep 16:08
Compare
Choose a tag to compare

Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.


✨ Overview & highlights

Syntax highlighting

Our data frames and selection panel now feature prettier colors based on data types.

syntax highlight

Table filtering

We are busy working on a powerful filtering feature for our arrow dataframe widget used for tables (sent with ViewerClient.send_table()) as well as the Rerun server browser (entry list, partition list, and remote tables). This release introduces support for filtering boolean, integer, floating point, and string columns, with more coming in future releases. (Note that the text log views and dataframe views are using a different widget which does not support filtering.)

table_filtering

Transparent objects

We finally support transparency for meshes & various shapes (boxes, ellipsoids, etc.)!

transparency.mp4

Source of transparency ("alpha") is a bit limited for now:

  • color component on all of Boxes3D, Ellipsoids3D, Capsules3D & Cylinders3D
  • Mesh3D's albedo factor
  • Asset3D albedo color (depends on the underlying model format)

Naturally, there's still a lot of places missing where we'd like to add transparency support!

Experimental MCAP support

Rerun has experimental, partial support for importing data from MCAP files. We support a subset of ROS2/CDR and Protocol Buffers messages. Development is ongoing, feel free to share your use cases!

⚠️ Breaking changes

We removed the --serve, --drop-at-latency and -o CLI arguments, deprecated Python 3.9 and changed archetype specification in AnyValues.

See the
🧳 Migration guide for more details.

🔎 Details

🪵 Log API

  • Add explicit timeout to flush API #11008
  • Make archetype and URDF loaders honor entity_path_prefix #11085
  • Keep static log messages longer in the proxy #11091

🌊 C++ API

  • Fix flush_blocking destroying C++ recording stream #10885
  • Respect CMAKE_BUILD_TYPE when building the Rust code #11023
  • Add options to gRPC proxy server to replay newest data first #11118
  • Prevent arow_cpp from configuring/building/installing all the time #11093 (thanks @eliemichel!)

🐍 Python API

  • Add __len__ to codegened Python datatypes #10774
  • Remove '-o' shorthand for stdout from script_add_args #11043 (thanks @kabouzeid!)
  • Deprecate python 3.9 #11090
  • Bump datafusion-python to 48.0.0 #11089
  • Improve numpy 1 compatibility #11129 (thanks @Benjamin-Tan!)
  • Split AnyValues into AnyValues and DynamicArchetype #11045

🦀 Rust API

  • Update MSRV to 1.88 #10832
  • Split AnyValues into AnyValues and DynamicArchetype #11045

🪳 Bug fixes

  • Fix panic on bad STL files (e.g. for URDFs) #10855
  • Fix Ellipsoids3D archetype not showing in 2D view projections #10922
  • Fix unwanted eye (camera) movement when using shortcuts #8975 (thanks @kailiuca!)
  • Fix opacity heuristic for images/segmentation when scene changes #11014
  • Fix 3D eye camera reset not resuming tracking scene bounding box #11037
  • Fix mesh cache eviction issue #11079
  • Fix recording to split in two when loading an URDF #11086
  • Fix for single channel textures displayed only in the red channel #11101
  • Fix columns menu closing on click #11119
  • Fix sharing selection as a fragment #11161
  • Fix UI glitch when connected twice to the same server #11185
  • Fix tooltips sometimes being way too big #11190
  • Fix incorrect application id when dragging and dropping files #11197
  • Fix wrong rendering of some texture formats in light mode #11225

🌁 Viewer improvements

  • Integrate basic MCAP loader from rerun-io/rerun-mcap #10721
  • Support scroll-/pinch-to-zoom with first person eye control #10783
  • Low-level Arrow conversion of protobuf-encoded MCAP messages #10791
  • Support flexible x-axis for bars in BarChart #10675 (thanks @Xiao-Chenguang!)
  • Customize color and line width of Pinhole camera frustum #10842
  • CLI now consistently forward URLs to native/web viewer when possible #10909
  • Fix closing recordings/tables that are still being loaded showing up again #10963
  • Persist fallback token #10970
  • Allow opening web viewer links directly #10928
  • Add keyboard shortcut to copy entity hierarchy #10938
  • Add H.265 support for native & VideoStream #10994
  • Support sharing URLs for dataplatform datasets & tables #11038
  • New open from URL dialog & main menu entry #11040
  • Add archetypes for MCAP metadata #11062
  • Add opacity setting for VideoStream & VideoAsset #11113
  • Add MCAP parsers for scalar sensor messages #11078
  • Remove custom number formatting on copy #11148
  • Implement fallback mode for raw MCAP layer #11136
  • Support basic transparency for Mesh3D/Asset3D/Boxes3D/Ellipsoids3D/Capsules3D/Cylinders3D #11132
  • New link sharing dialog for detailed link sharing #11137

🚀 Performance improvements

  • Prevent 100% CPU Usage when running gRPC server by sleeping instead of yielding #10944 (thanks @nisseknudsen!)

📚 Docs

🖼 UI improvements

  • Log all low-level MCAP primitives + raw messages as fallback #10769
  • Add arrow data tree view and syntax highlighting #10777
  • Add debug information about caches on the memory panel #11055
  • Implement full text filtering for string-based columns of the table widget #11061
  • Add support for filtering on boolean columns #11095
  • Add support for filtering numeric (int/float) columns in tables #11142
  • Use partition id in the recording panel #11157
  • Draw loop selection highlight on the collapsed timeline #11203
  • Move copy / save buttons inline with the relevant component #11181
  • Set timeline with most ...
Read more

Development Build

17 Sep 04:07
ce2bfd7
Compare
Choose a tag to compare
Development Build Pre-release
Pre-release

This is a prerelease. It is not intended for production use.
Please report any issues you find.

Example Hosted App

https://rerun.io/viewer/commit/ce2bfd7

Wheels can be installed with:

pip install --pre --no-index -f https://build.rerun.io/commit/ce2bfd7/wheels --upgrade rerun-sdk

or

pip install --pre --no-index -f https://github.com/rerun-io/rerun/releases/download/prerelease --upgrade rerun-sdk

CMake fetch-content for C++ SDK

include(FetchContent)
FetchContent_Declare(rerun_sdk URL https://build.rerun.io/commit/ce2bfd7/rerun_cpp_sdk.zip)
FetchContent_MakeAvailable(rerun_sdk)

or

include(FetchContent)
FetchContent_Declare(rerun_sdk URL https://github.com/rerun-io/rerun/releases/download/prerelease/rerun_cpp_sdk.zip)
FetchContent_MakeAvailable(rerun_sdk)

Web Viewer NPM package

Can be installed with:

npm install https://build.rerun.io/commit/ce2bfd7/rerun_js

0.24.1 - Bug fixes

07 Aug 16:00
Compare
Choose a tag to compare

Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.


🌊 C++ API

  • Fix rerun_cpp CMake link errors #10756 (thanks @reinar!)
  • Fix C++ interface for VideoStream #10745
  • Fix C++ Arrow build #10799

🐍 Python API

  • Explicitly import pyarrow.compute in url_generation.py #10690
  • Add rerun-sdk[datafusion] and rerun-sdk[all] #10696

🦀 Rust API

  • Fix unnecessary rfd and wayland dependencies in SDK crate #10802

🪳 Bug fixes

  • Make parking_lot dependency version stricter to prevent import failure #10732 (thanks @sdd!)
  • Use ui.warning_label() in more places #10697
  • Fix colors sometimes being wrong in plot view #10713
  • Fix breaking example in rerun_notebook/example.ipynb #10706 (thanks @glk0!)
  • Fix GUI hickup when starting native video player #10797
  • Improve command palette in light mode #10825

🌁 Viewer improvements

  • Add time range query params when opening a time_range-based url #10819

🖼 UI improvements

  • Better component UI for Arrow StructArray #10748

🕸️ Web

  • Make @rerun-io/web-viewer-react compatible with React 19 #10809

📈 Analytics

  • Add some analytics events #10793

0.24.0 - Light mode, streaming video and data model improvements

17 Jul 17:36
Compare
Choose a tag to compare

Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.


✨ Overview & highlights

💽 Tagged components

Starting with 0.22 Rerun began storing additional meta-information for each component,
identifying its field name (e.g. vertex_colors) and its archetype (e.g. Mesh3D).
We finally concluded this effort and made all parts of the Viewer and API aware of this.

While this is mostly about under-the-hood changes, this has a lot of surface level benefits:

  • You can now log the same component type multiple times on a single entity path.
    For example, logging multiple archetypes which use the Color component onto the same entity was possible before, but the colors would have overwritten each other:
rr.log("path", rr.GeoPoints(lat_lon=[some_coordinate], colors=[0xFF0000FF]))
rr.log("path", rr.Points2D(positions=[0.0, 0.0], colors=[0x0000FFFF]))
rr.log("path", rr.Mesh3D(vertex_positions=vertices, vertex_colors=[0x00FF00FF]))
  • The UI now groups by archetype everywhere and will show the same field names you use in the logging SDKs
  • Better blueprint defaults: component defaults are now per archetype field and not per type. Making them a lot more useful.
  • No more indicator components! These showed previously up in the UI and needed special handling for some advanced use cases.

🎥 Video streams

Rerun previously supported video only in the form of MP4 files,
so it was not possible to stream live encoded video to Rerun.
The new VideoStream archetype remedies that!

If you already have encoded video frames, it is just as easy as logging images now:

rr.set_time("time", duration=float(packet.pts * packet.time_base))
rr.log("video_stream", rr.VideoStream(codec=rr.VideoCodec.H264, sample=bytes(packet)))

For now, we only handle H.264, but support for more codecs is on the roadmap.
Learn more on the updated video reference page.

😎 Light mode

Rerun finally has a light mode.

The theme defaults to your OS's setting, but can be adjusted in the settings menu.

🔀 Multi sink

Previously, the SDK's recording stream could only send to one sink at a time.
We now expose the ability to set multiple sinks at once, so you can simultaneously
stream to both the Viewer and a file.

Here's what that looks like in Python (but the API is available in C++ & Rust as well!)

rr.set_sinks(
    # Connect to a local viewer using the default URL
    rr.GrpcSink(),
    # Write data to a `data.rrd` file in the current directory
    rr.FileSink("data.rrd"),
)

🤖 Built-in URDF data loader

You can now log URDF files directly to Rerun using the log_file API.

👀 Other highlights in short

  • New Cylinder archetype
  • AnyValues utility for Rust
  • rerun rrd stats for retrieving statistics about rrd files
  • rerun rrd route command to manipulate .rrd files on transport level
  • Much faster & better compaction for both rerun rrd compact and automatic in-Viewer compaction
  • Viewers started with spawn use now less memory since it no longer sets up an GRPC server for message forwarding
  • View3D's eye control type & speed can now be changed from blueprint (and as such is persisted over session!) more properties will follow in the future. (thanks to @jccampagne)

🔎 Details

🪵 Log API

  • Remove deprecated Scalar, SeriesLine, SeriesPoint archetypes #9892
  • Remove untagged Component::descriptor() #10038
  • Add Cylinders3D archetype #10139
  • Provide AnyValues helpers in Rust SDK #10074
  • Rename ComponentDescriptor fields and use colons in Sorbet metadata #10245
  • Stop logging indicators and drop them during migration #10521
  • Make SeriesPoints::markers component required #10572
  • Remove indicators from codegen, rerun_py, and rerun_cpp #10581
  • Removes remnants of indicators from dataframe queries and viewer #10584
  • rerun rrd stats #10593
  • Source default batcher settings from sink #10620

🌊 C++ API

  • (CMake) download arrow inside the rerun build folder instead of general binary folder #10141 (thanks @jzubizarreta!)
  • Fix documentation wording on which arrow-cpp version to use #10235
  • Disable gRPC server history for Spawn/CLI #10314
  • Add set_sinks to C++ RecordingStream #10359

🐍 Python API

  • Add Dataset.register_batch and wrappers for task ids #9895
  • Introduce ConnectionRegistry for centralised redap client and token management #10078
  • Build in manylinux_2_28 container #10148
  • Add APIs to Dataset to query and update the associated blueprint #10156
  • Support for seconds-since-Epoch numpy arrays for constructing TimeColumn #10168 (thanks @MichaelGrupp!)
  • Fix initializing two recordings with the same recording id causing SDK hangs #10201 (thanks @AhmedMousa-ag!)
  • Improve rerun_notebook startup times #10111
  • New dataset API for just retrieving chunk_ids associated with a query #10261
  • Multi-sink / tee Python API #10158
  • Rename to tee to set_sinks #10312
  • Add support for index=None to local and remote dataframe APIs and deprecate select_static #10332
  • Disable gRPC server history for Spawn/CLI #10314
  • Deprecate serve_web and improve documentation around how to serve a web viewer #10360
  • Add partition ID to TimeUpdateEvent #10403
  • Fix set_time_ctrl not doing anything when called twice #10547
  • Notebook auto-sizing #10554
  • Add RegisterTable rpc, LanceTable message, and related proto changes #10538
  • Add open_url/close_url notebook APIs #10602
  • AnyValue Torch Performance Improvement #10647
  • Make it easier to disable the 3D line grid in Python (blueprint) #10621
  • Add to_arrow_reader() to TableEntry and DataFusionTable #10601
  • Make it possible to configure batcher explicitly via python APIs #10657

🦀 Rust API

  • Update MSRV to 1.85 #9798
  • Improve rerun crate forwarding, removing need to depend on other re_* crates for viewer customization [#9825](https://github.com/r...
Read more

0.23.4 - Fix `rerun rrd migrate` tool

26 Jun 15:08
Compare
Choose a tag to compare

This release is a pure bugfix release for migration of old RRD files in how meta-data keys for archetypes & field names were handled.

For details see #10350

0.24.0-alpha.3

11 Jun 21:07
Compare
Choose a tag to compare
0.24.0-alpha.3 Pre-release
Pre-release
Bump versions to 0.24.0-alpha.3

0.23.3

26 May 19:17
Compare
Choose a tag to compare

Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.


This patch release contains various bugfixes, improvements, and updated documentation.

🔎 Details

🌊 C++ API

🪳 Bug fixes

  • Add draw order to video (-frame-reference), fix 2d objects sometimes being behind videos #9946
  • Fix time series points querying extra points at start and end of time range (causing stuttering on playback in some scenes) #9963
  • Increase max size of gRPC messages #10006
  • Check TextEdit state before copying selection description #10063

🌁 Viewer improvements

  • Use recording name for file name when saving a file #9982
  • Improve error message for QueryError and DataLoaderError #9998

🚀 Performance improvements

  • Series of build changes for web release to minimize generated wasm #9870

📚 Docs

  • Remove remaining mentions of rr.connect #10016
  • Update callbacks and custom_callbacks example docs to mention the other #10062
  • Fix missing reference to Spatial3DView in Pinhole docs #9932 (thanks @hu-po!)
  • Mention URL scheme in connect_grpc docs #10018

🤷‍ Other

  • LeRobot: Add support for List datatype #9958

0.23.2 - RRD migration and bugfixes

06 May 16:19
Compare
Choose a tag to compare

Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.


✨ Overview & highlights

  • New CLI tool to migrate .rrd files
  • Various bugfixes

.rrd migration tool

With 0.23, we made several breaking changes that resulted in older .rrd files not being able to load at all anymore.
To help smoothen the migration to 0.23, we're introducing a migrate command to the Rerun CLI:

rerun rrd migrate colmap.rrd arkit.rrd rgbd.rrd

The command will copy the contents into a .backup file, and then migrate the file.

Due to the incompatibility between .rrd files from 0.23 and those from earlier versions, this command likely
won't be able to migrate every recording perfectly. We expect the migration to work on files between 0.20 and 0.22,
simpler recordings may work as far back as 0.18.

We plan to use this command future .rrd migrations as a way to fulfill our N+1 compatibility guarantee:

  • Viewers after 0.23 will always be able to load recordings from the previous version.
  • Recordings from 0.23 and beyond may be migrated to the next version.

We currently have no plans for compatibility or migrations across multiple versions.

🪵 Log API

  • Improve and mitigate warnings around data loss when flushing #9846

🐍 Python API

  • Add ViewerClient to rerun.experimental #9828
  • Improve set_time error handling for large Python integers #9839
  • Properly resolve component selectors in dataset index creation and search APIs #9854
  • Fix incorrectly advertised minimum supported pyarrow version (18.0.0 is required) #9878
  • Fix incorrectly advertised numpy 1.x support (numpy2 is required now) #9880

🪳 Bug fixes

  • Fix world grid not scaling correctly when camera is below the grid #9867
  • Tensor view improvements #9831
  • Fix size check for NV12 & YUY2 formats in C++ and Rust #9890

0.23.1 - Fix notebooks

25 Apr 15:19
Compare
Choose a tag to compare

Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.


🪳 Bug fixes

  • Use correct URL for RERUN_NOTEBOOK_ASSET #9800

🌊 C++ API

  • C++: Emit warnings when using deprecated Rerun types #9801

🐍 Python API

  • Direct API for setting blueprint on a notebook-embedded viewer #9804

🌁 Viewer improvements

  • Fix doclinks to archetypes #9791

🧑‍🏫 Examples

🖼 UI improvements

  • Show image format (resolution etc) of image blobs #9792

0.23.0 - Backwards compatible `.rrd` and multi-scalar logging

24 Apr 12:06
Compare
Choose a tag to compare

Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.


✨ Overview & highlights

Viewer

Multiple scalars under a single entity

In this release we have added support for logging scalar data with multiple signals, under the same entity. This allow you to log data that inherently belongs together, such as the action values in a LeRobot dataset or gyroscope measurements, under the same entity path.

As part of this update, we're deprecating the SeriesLine/SeriesPoint/Scalar archetypes in favor of the plural versions SeriesLines/SeriesPoints/Scalars, for consistent naming with the other archetypes.

For example, the x, y and z component of a gyroscope measurement, previously would be logged as separate entities:

rr.log("gyroscope/x", rr.Scalar(measurement[0]))
rr.log("gyroscope/y", rr.Scalar(measurement[1]))
rr.log("gyroscope/z", rr.Scalar(measurement[2]))

Now can be logged under a single entity:

rr.log("gyroscope", rr.Scalars(measurement))


See the new IMU signals example for more

The SeriesLine and SeriesPoints archetypes now include a visible_series component that lets you control which series appear in your visualizations. Unlike the regular entity visibility property, hidden series will still show up in the legend.

Image

Callbacks API for notebooks and JavaScript

We've added a (limited) API with callbacks, useable from JavaScript and from Notebooks (but not yet from out logging SDKs).

With this you can easily write simple annotations tools.
We've created an example for this using Gradio at https://github.com/rerun-io/annotation-example.

Annotation example

Recording properties

For this release, we have improved Rerun's logging capabilities. There is a new recording properties concept in all of our APIs.
Recording properties allow you to attach metadata to a recording.
For example, you can now change the name of your recording via .send_recording_name("My episode"), which will show up in the recording panel of the viewer as well.
You can also log arbitrary data via the general .send_property() method.
Properties are logged as static data and will therefore show up in the timeline as well.
Also, the side-panel shows an overview of the properties when a recording is selected.

Image Image Image

Our snippets now contain examples for recording properties in all SDKs:

Experimental send_table API

We are also working on better support for tables and dataframes in Rerun, a feature that has been requested several times by our community. With this release, there is now an experimental API send_table that can be used to send arbitrary Arrow record batches via the Python SDK and from notebooks. For now, while we evolve this feature, this API is separate from the rest of our logging APIs. This tutorial shows how to use this APIs and also provides more details on the current implementation. In future releases, we plan to improve support for the table representation in the viewer to facility more advanced analysis tasks such as filtering, or showing summary statistics.

Please note that this is distinct from our current send_dataframe API and dataframe query view.

Image

⚠️ Breaking changes

This release changes how the SDKs interact with the viewer, as Rerun now relies heavily on gRPC.
Additionally, we have changed our file format and data model to be much more flexible in the future.
These changes will improve our backwards-compatibility going forward, but this also means that this release introduces breaking changes to our .rrd format and how the SDKs communicate with the viewer.

  • .rrd files from previous releases cannot be loaded anymore
  • Removed unsupported connection methods from the SDKs
  • The connection URLs have changed and now require a rerun:// (TLS) or rerun+http:// (unencrypted) prefix
  • Several changes to our logging SDKs (timelines, time units, …)

You can find more information in our 🧳 migration guide

🔎 Details

🪵 Log API

  • Migrate file format to protobuf #8995
  • Move rerun.components.blueprint.Visible to rerun.components.Visible #9067
  • Infer column partition size from shape in Scalar.columns() #9068
  • Infer partition size for FixedSizeList-backed components #9210
  • Recording properties for naming recordings and adding information #9249
  • Provide APIs to log arbitrary data to recording properties #9316
  • Deprecate SeriesLine/SeriesPoint/Scalar in favor of SeriesLines/SeriesPoints/Scalars #9338
  • Add serve_grpc API #9447
  • Add experimental send_recording python api #9148
  • Implement send_table in re_grpc_server and re_viewer #9510
  • Example showcasing send_table from notebooks #9522
  • Add rr.serve_web_viewer #9540
  • Add experimental send_table to Python SDK #9538
  • Fix handling of custom indicator components #9755

🌊 C++ API

  • Migrate SDK comms to gRPC #8838
  • New C++ API for timestamp/duration indices #9200
  • Remove deprecated C++ connect APIs #9212
  • Add detach_process option to spawn #9400 (thanks @imstevenpmwork!)
  • Consistent constructor naming of Asset3D across C++ and Rust #9239 (thanks @abhishek47kashyap!)
  • Use consistent time unit names for our API #9343
  • CMake: Use find_dependency for Arrow #9548 (thanks @BillyONeal!)
  • Set RERUN_ARROW_LINK_SHARED_DEFAULT based on found Arrow build #9550 (thanks @BillyONeal!)

🐍 Python API

  • Migrate SDK comms to gRPC #8838
  • Update maturin to 1.8.1 and fix pyproject.toml #9104
  • Add rr.set_index to replace rr.set_time_* #9166
  • Fix support for numpy-2 #9109
  • Add rr.IndexColumn #9179
  • Python SDK spring cleaning: 3.9, no more monkey patching, more lints #9182
  • Enable a bunch of ruff lints #9201
  • Remove deprecated Python APIs: log_components, connect, connect_tcp #9197
  • Remove deprecated rr.serve() #9207
    ...
Read more