Releases: rerun-io/rerun
0.30.1 - Bugfixes & Viewer improvements
Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli --locked - Online demo: https://rerun.io/viewer
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.30.1/rerun_cpp_sdk.zip
✨ Overview & highlights
This patch on top of 0.30.0 comes not only with a random assortment of bug fixes but also some small improvements to the Viewer.
Most notably it's now possible to inspect values that were logged on the same timestamp!

🔎 Details
🐍 Python API
- Allow re-registering the same blueprint to a dataset cafbec9
- Fix
using_index_valuenot accepting pyarrow data of the correct types c59df09
🪳 Bug fixes
- Gracefully handle Rrd Manifest failures f14e343
- Fix docs urls being loaded as data sources 3eb98db
- Fix fix clicking names of color maps 700b590
- Fix rare ui id conflict in list item content 352f7c8
- Fix drag'n'drop issue on web 956ed91
🌁 Viewer improvements
- Selection panel: show all values at the latest time stamp 36ff7ff
- Limit number of plots only for non-builtin components and increase the limit f4fb62b
- Show all visualizable scalars on time series add-visualizer menu 0da70a5
- Stop warning on synthetic
oneofprotobuf fields 84ee94e
📚 Docs
- Corrected the docs example for the
DynamicArchetype32c37e8
🖼 UI improvements
🧢 MCAP
- Support also "sec" & "nsec" in
TimeSpecToNanos31c9a43
Development Build
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/5d3a25f
Wheels can be installed with:
pip install --pre --no-index -f https://build.rerun.io/commit/5d3a25f/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/5d3a25f/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/5d3a25f/rerun_js
0.30.0 - Plot any scalar & on-demand streaming
Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli --locked - Online demo: https://rerun.io/viewer
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.30.0/rerun_cpp_sdk.zip
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-30
✨ Overview & highlights
📈 Plot any scalar
anyscalar.action.4.mp4
You can now plot any scalar value, even if it lacks Rerun semantics in time series views. For instance, this lets you plot any value in an MCAP file.
In addition to plotting scalars from MCAP files, it is now possible to visualize arbitrary scalar components that were logged using AnyValues or DynamicArchetype. The supported data types are:
Float32andFloat64Int8,Int16,Int32, andInt64UInt8,UInt16,UInt32, andUInt64Boolean- Any of the above nested inside of Arrow structs.
This also makes it possible to log and visualize multiple scalars to the same entity, which can drastically reduce the size of the resulting .rrd files.
Note that by default, and without blueprints, views are still only spawned for entities with Rerun semantics.
Time series views for entities with custom scalar components need to be spawned either:
- from the context menu of the streams,
- by adding a view from the blueprint panel,
- or by specifying a blueprint using the Python or Rust SDK.
The components that should be visualized can be selected via a new dropdown menu from the completely revised visualizer section in the selection panel.
To quickly navigate to the desired visualizer, each time series view now shows an overview of it's current visualizers.
For more details please refer to our documentation:
- Customize views
- Plot any scalar
- Component mappings outside of plotting, shown on the example of a colored point cloud
Thanks to a contribution from @vfilter, the series lines visualizer now also supports different interpolation modes to render staircase (or step) functions:
📡 On-demand streaming / larger-than-RAM
The Rerun Viewer now supports on-demand streaming, when connected to either the OSS server or Rerun Cloud.
on-demand-streaming.mp4
With on-demand streaming, whatever you are currently viewing will be downloaded first.
This includes time-scrubbing to the end of a very long recording and quickly seeing what is there, or viewing only one camera feed of many.
Of course, your memory limit will be respected, and when you change your view or move the time cursor, the stale data will be evicted and the new data downloaded.
This also means that the web viewer can finally view recordings larger than the 4GiB limit enforced by Wasm32, as long as those recordings are served by a Rerun server.
It also means that Rerun Cloud users can view huge recordings, larger than what fits into RAM.
The OSS server, however, still loads everything into RAM before serving it.
Usage:
> rerun server -d folder_with_large_recordings
Then either open the native viewer:
> rerun "rerun+http://127.0.0.1:51234"
Or the web viewer:
> rerun --serve-web "rerun+http://127.0.0.1:51234"
🦾 Support for many more MCAP message types
Like in the previous releases, we're continually expanding our support for common robotics data to make it easier for users to load their existing recordings.
This release adds support for Foxglove Protobuf schemas to our built-in MCAP data loader, in addition to the existing set of supported ROS 2 messages.
You can find an overview of all the messages that are currently supported here.
🎨 Extend existing views without forking
Previously, extending the Viewer with custom Rust code required creating an entirely new view type,
even if you just wanted to add a single new visualization to the existing 3D view.
Now, you can register custom visualizers that plug directly into existing views, using fully custom archetypes & shaders in the process!
2026-02-20_17-13-08.mp4
In practice this works currently only well for 2D, 3D, and Map views but we'll keep working towards
making the Viewer more and more modular & extensible!
For more details, see the custom visualizer example and the viewer rust extension docs for a general overview.
⚠️ Breaking changes
- Python:
segment_url_udfandsegment_url_with_timeref_udfhave been removed - Python:
segment_urlparameter names have been updated - CLI:
.rrdfiles are no longer tailed by default - SDK:
SeriesVisiblecomponent type has been removed
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-30
🔎 Details
🪵 Log API
- Fix performance regression with
--server-memory-limit 0cfc9a4c - Remove
SeriesVisiblecomponent in favor ofVisible1fca08a rerun rrd verifynow checks for the presence of RRD manifests 2000ba5- Footer-preserving RRD routing b56a145
🌊 C++ API
- Build C++ snippets into a single executable to avoid link time overhead b0a3876
🐍 Python API
- Basic Rust & Python blueprint API for component mappings c6d7409
- Ensure that
import rerun_sdk.reruncan be used 196c658 - Expose
on_duplicatein the Python SDK e909e20 - Small conversion improvement 383d37d
- Table entry APIs: provide a hint for single-row list data cb38397
- Add hint to prepend
api.on connection error a2ef1b3 - No longer return all columns when
filter_content()matches nothing 5997d6f - Remove deprecated UDFs b078e18
- Allow access to redap token from python sdk bc2ce79
- Expose "rerun_registration_status" to
DatasetEntry.manifest()881cee6 - Correctly handle lists in
AnyValues/DynamicArchetype.columnsd2b53da - Atomic (un)registrations 153acd1
- The
urlargument ofCatalogClient.create_table()is now a prefix [1eb6c79](1eb6c790d7c26f47da8dcfc8...
0.29.2 - Bug fixes and documentation update
✨ Overview & highlights
This patch release contains bug fixes and adds a documentation guide with an example for converting existing data to Rerun.
🔎 Details
🪵 Log API
- Fix performance regression with
--server-memory-limit 0cefbdf6
🐍 Python API
- notebook: Re-export viewer event types 51d949e
🪳 Bug fixes
- Fix table config button symbol for light-mode 57b0121
- Fix drag-and-drop of
.mcapfiles on web #12631 - Ensure we report file loading errors on web 7fd794e
🌁 Viewer improvements
- Show error when rerun_js viewer panics or fails to load 04e7ae8
📚 Docs
- Add snippet demonstrating conversion of custom MCAP protobuf file to RRD 53fbeeb
- Add documentation for converting custom data to RRD using log/send_column 815d45c
🖼 UI improvements
0.29.1 - Improved labels, bug fixes & performance improvements
✨ Overview & highlights
This is mainly a patch release with some fixes and improvements.
We also included a change that makes labels translucent. This makes them less obtrusive and improves visibility of overlapping labels, as shown in the image segmentation example below.
🔎 Details
🐍 Python API
- Ensure that
import rerun_sdk.reruncan be used fd28cd3 - Allow access to redap token from Python SDK 51506ca
🪳 Bug fixes
🌁 Viewer improvements
- Make labels in spatial view translucent ec62ad9
🚀 Performance improvements
- Do faster lineage check in release builds 0d546c0
0.29.0 - URDF improvements, improved ROS 2 docs, and memory panel
Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli --locked - Online demo: https://rerun.io/viewer
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.29.0/rerun_cpp_sdk.zip
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-29
✨ Overview & highlights
URDF loader improvements
In the previous 0.28 release, we overhauled Rerun's built-in URDF loader to work with TF-style transforms with parent and child frames.
Now, taking advantage of these entity-path-independent transforms, we simplified the hierarchy in which URDF assets are stored.
Collision and visual meshes are now below separate entity path roots, making it easy to toggle one or the other.
Additionally, the paths are now more compact to make it easier to scroll through them.
urdf_entity_path_hierarchy.mp4
UrdfTree utility in Python
We added a UrdfTree Python utility that can be used to simplify operations with URDF models, e.g.:
- accessing links and joints
- computing transforms from joint states
- retrieving geometry entity paths for links
We also updated our animated_urdf.py demo to use this utility, showing for example how you can dynamically change the color of a gripper link based on its angle.
urdf_dynamic_mesh_example.mp4
Experimental screenshots from Python
There's now an experimental screenshot API which allows to take screenshots of the Viewer or individual views:
# Connect to a local viewer.
viewer = ViewerClient()
# Screenshot the entire viewer.
viewer.save_screenshot("entire_viewer.jpg")
# Screenshot only the view we created earlier.
viewer.save_screenshot("my_view.png", view_id=view.id)For a full snippet check here.
Improved target frame selection UI
The target frame selection UI now shows matching suggestions, making it easier to select a frame name from the transforms in your data.
target_frame_selection_ui.mp4
Updated ROS 2 example & documentation
We refreshed the documentation showing examples of how some ROS concepts and messages can be mapped to Rerun, together with an updated Python node example. The documentation page can be found here.
Improved memory panel
You can now get some insight on which parts of your recording use how much memory in the viewer using the improved memory panel:
⚠️ Breaking changes
- Python: New API for visualizer overrides -
VisualizerOverridesremoved, now pass visualizer objects directly (e.g.,rr.SeriesLines()) - Python:
Entry.update()deprecated in favor ofEntry.set_name() - Python:
CatalogClientandServerconstructor parameters renamed (addr→url/host) - Python: Removed deprecated
rerun.dataframemodule (usererun.server.Serverandrerun.cataloginstead) - Python: Removed deprecated
rerun.catalogAPIs from 0.28 - Python: Internal submodules moved to underscore-prefixed names (e.g.,
rr.color_conversion→rr._color_conversion) - CLI:
rerun server --addrrenamed torerun server --host - Blueprint: Component overrides from
.rblfiles created in previous versions cannot be loaded in 0.29 - Data Platform: Datasets need re-registration to populate
nameandstart_timein segment table
🧳 Check the migration guide for details: https://rerun.io/docs/reference/migration/migration-0-29
🔎 Details
🪵 Log API
- Fix dropping of entities when using
rerun rrd filter#12584 - Apply backpressure in gRPC proxy server cac538e
- Enforce
Selectorusage inre_sdk::lenses521c796
🐍 Python API
- Allow tables to be created without providing a URL #12132
- Remove deprecated dataframe API (
rerun.dataframe) #12320 - Remove deprecated APIs in
rerun.catalog#12321 - Deprecate
Entry.updatein favor ofEntry.set_name#12370 - Fix missing
child_frame/parent_framearguments from pinhole constructor #12360 - Use visualizer objects in blueprint override API #12345
- Rename
addresstourlorhostdepending on context #12402 - Check for unset attr from extension class init #12376
- Add time axis in snippet in time series view snippet #12506
- Fix
RecordingStreamso it has a unique recording id when none is provided eb14e16 - Do not assume top-level bindings in
RecordingStream.__del__201e7c3 - Fix rare deadlock in Python send/log API 7f72b23
- Catch keyboard interrupt in
rerun-sdkCLI and return exit codes #12496 - Make
rr.experimental.ViewerClient.send_tablemore flexible ba733ad
🦀 Rust API
- Allow tables to be created without providing a URL #12132
- Rust SDK:
blueprintsupport #12307 (thanks @sectore!) - Update MSRV to 1.90 #12337
- Make
RecordingStreamBuilder::with_blueprint()apply to everything, not justspawn()#12347 (thanks @kpreid!) - Rust SDK: Change default server memory limit 5cb7213
- Update ply-rs-bw to 3.0.0 (corrected) #12593 (thanks @bourumir-wyngs!)
🪳 Bug fixes
- Fix bad error reporting when registering a (faulty) RRD URI built from a relative path #12309
- Only do
furthest_fromGC when we can download chunks again #12363 - URDF loader: use
InstancePoses3Dfor geometry scale #12371 - Fix incorrect handling for cameras and depth images for 3D views that use target frames other than the scene root #12361
- Fix OSS server locking up when asked for many chunks at once #12384
- Fix GC sometimes not collecting anything #12398
- URDF: Bundle pose + mesh scale in single
InstancePoses3D#12385 (thanks @yujeong1jeong!) - Don't show error for implicit transform axes if we're already showing named transforms #12419
- Fix opening link with only time selection in fragment #12428
- Fix decoding errors for MCAP files with gaps in protobufs #12436
- Fix time point sharing for duration timelines #12466
- Fix transforms & videos breaking when receiving new data in the background #12452
- Fix ignoring nested
oneoffields inprotobufMCAP messages #12462 - Fix early disconnect with
--newest-first[#12484](https://github.com/rerun-io/rerun/pull/...
0.28.2 - Fix RRD compaction, plot panning, and Collada mesh loader
Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python: pip install rerun-sdk
- Rust: cargo add rerun and cargo install rerun-cli --locked
- Online demo: https://rerun.io/viewer
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.28.2/rerun_cpp_sdk.zip
✨ Overview & highlights
Fixes to .rrd Chunk handling.
We revised our Chunk slicing logic to prevent .rrd files ballooning in sizes. This also fixes the problem of broken .rrd files that contain tensors.
Collada (.dae) mesh support.
This patch adds native support for Collada (.dae) meshes, a common format used with URDF files. You can now load URDFs that reference .dae assets without manual mesh conversion!
🔎 Details
🐍 Python API
🪳 Bug fixes
🌁 Viewer improvements
📚 Docs
- docs: Fix parameter name from 'color' to 'colors' #12294 (thanks @Ivan-Zhong!)
0.28.1 - Fix some telemetry settings, depth images, and logging details.
Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python: pip install rerun-sdk
- Rust: cargo add rerun and cargo install rerun-cli --locked
- Online demo: https://rerun.io/viewer
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.28.1/rerun_cpp_sdk.zip
🪵 Log API
- Ensure that
flushwaits for all data loaders to finish #12281
🪳 Bug fixes
- Fix video errors having black rectangle around them #12284
- Fix RVL depth decoding for non-quantized images #12289
🌁 Viewer improvements
- Fix image planes not working correctly in some named-transform frame scenarios #12276
- Fix auto-size for 2d views with RVL encoded depth image not working #12288
- Restore depth image visualizers to 2D view kind (fix heuristic) #12290
- Add dataloader for encoded depth image (to allow
log_from_file& dragdrop) #12287
🤷 Other
- Improved error message when
rrd compare --unorderedfails #12282
0.28.0 - Easier use with ROS style data
Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python: pip install rerun-sdk
- Rust: cargo add rerun and cargo install rerun-cli --locked
- Online demo: https://rerun.io/viewer
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.28.0/rerun_cpp_sdk.zip
✨ Overview & highlights
🦾 Transform system overhaul
This release brings significant improvements to how transforms are handled, especially from ROS or MCAP-based systems. You can now decouple spatial relationships from entity paths by using CoordinateFrame to associate entities with named frames, and Transform3D with child_frame/parent_frame parameters to define relationships between frames—similar to ROS tf2. Pinhole cameras also support this system. Additionally, axis visualization has moved to its own TransformAxes3D archetype.
Much more can be found at our revamped docs page here.
🤖 Improved URDF and MCAP Transform support
Parent and child frame components are now available in the Transform3D archetype, meaning you can send transforms to a single entity instead of using the entity path to inform the structure (note, for URDFs this is required). Additionally, ROS2’s tf2_msgs/TFMessage and PoseStamped messages are automatically parsed as Transform3D and InstancePoses3D , respectively, from MCAP files.
We also added a new documentation page for URDF here.
robots.with.transforms.mp4
📹 AV1 video codec support for streaming
VideoStream now supports the AV1 codec alongside existing formats.
📚 Catalog API refinements (Python)
The Python catalog API has been substantially reworked: "partition" terminology is now "segment," table operations have moved to TableEntry objects, and the query interface has been simplified with methods like filter_segments(), filter_contents(), and reader().
⌚ Viewer usability improvements
New keyboard shortcuts let you switch between recordings (cmd + option + ↑/↓) and navigate the timeline (←/→ to move by 0.1s. Add shift for 1s. home/end to jump to beginning or end).
timeline-hotkeys.mp4
Forward/back navigation was previously exclusive to the web viewer and is now available on native viewers as well!
📂 Added a LeRobot v3 dataloader support
We previously supported LeRobot v2 and updated our dataloader now to work with the latest version as well!
⚠️ Breaking changes
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-28
Transactional transform behavior (important!):
Changes to Transform3D, InstancePose3D, or Pinhole transform properties are now treated transactionally. Updating any component resets all other transform components—the viewer no longer looks back in time for previously logged values. If you relied on partial updates (e.g., logging only rotation while keeping a previous translation), you must now re-log all components together. If you always logged the same components on every call or used the standard constructors, no changes are needed. #11911
rr.log("simple", rr.Transform3D(translation=[1.0, 2.0, 3.0]))
# In 0.27: This clears the translation—it will NOT inherit the previous value
rr.log("simple", rr.Transform3D.from_fields(scale=2))Transform3D archetype changes:
Transform3D::axis_lengthhas moved to the newTransformAxes3Darchetype #11925CoordinateFrame::frame_idrenamed toCoordinateFrame::frame#11991- Redundant
Pose*component types removed in favor of general counterparts (e.g.,PoseTranslation3D→Translation3D) #11905
URDF loader changes:
Transform updates for URDF models now require parent_frame and child_frame fields to be set (matching URDF joint specifications), and must include both rotation and translation. This aligns with ROS tf2 conventions and allows sending all transform updates on a single entity. #12005
Deprecated API removal:
Items marked deprecated before 0.27 have been removed, including old Timeline, TimeColumn, Asset3D, AssetVideo, Image, and Pinhole methods. #12204
MCAP timeline naming:
MCAP timelines renamed from log_time/publish_time to message_log_time/message_publish_time to avoid conflicts with SDK timestamps. #12145
Python Catalog API (breaking changes):
- The
rerun_partition_idcolumn is nowrerun_segment_id entries(),datasets(),tables()now return lists of entry objects instead of DataFramesget_table()returns aTableEntryobject instead of a DataFrame—use.reader()to get the DataFrameDataframeQueryViewremoved; usefilter_segments(),filter_contents(), andreader()instead #12151register()andregister_batch()merged into singleregister()returningRegistrationHandle#12187search_fts()andsearch_vector()now return DataFrames directly (no.df()needed) #12198
Python Catalog API (deprecated, still work):
- "Partition" renamed to "segment" throughout (e.g.,
partition_table()→segment_table()) #12059 - Method renames:
get_dataset_entry→get_dataset,get_table_entry→get_table, etc. #12112 - Table writes moved from
CatalogClienttoTableEntry(append(),overwrite(),upsert()) #12114 Schematypes moved fromrerun.dataframetorerun.catalog#12135- Search index methods renamed:
create_fts_index()→create_fts_search_index(), etc. #12198
🔎 Details
🪵 Log API
- Transform3D no longer sets all its components to empty array by default #11911
- Move
Transform3D::axis_lengthinto its ownTransformAxes3Darchetype #11925 - Add
show_frameoption onTransformAxes3D#11977 - Rename
CoordinateFrame::frame_idtoCoordinateFrame::frame#11991 - RRD footers 1: framing #12044
- RRD footers 2: RRD manifests #12047
- RRD footers 3: encoding/decoding manifests #12048
- Add option to specify
target_frametoSpatialInformation#12040 - Remove redundant
Pose*components #11905 - Add
OutputModeoption to Lenses #12107 - Load URDF with frame IDs and named transforms #12005
- RRD manifests: implement
chunk_byte_size_uncompressedsupport #12194 - Disable merging compaction for video samples #12270
🌊 C++ API
- Make component type registration thread-safe in C++ SDK #11907
- Don't install signal handlers into rerun_c outside of DEBUG mode #11956
🐍 Python API
- Fix dataframe queries failing on empty datasets #11846
- Add lint to check if rust classes have str, fix or exclude all existing #11928
- Partition-to-segment rename (wave 1): redap layer #12017
- Partition-to-segment rename (wave 3): Python SDK #12059
- Rework notebook auth to use device code flow #12128
- Catalog API update 1: listing entries #12103
- Catalog API update 2: getting and creating entries #12112
- Catalog API update 3: editing tables #12114
- Catalog API update 4: schema #12135
- Catalog API update 5: dataset query #12151
- Catalog API update 6: register APIs #12187
- Catalog API update 7:
segment_tableand blueprint APIs #12191 - Catalog API update 8: search indexes #12198
- Remove items marked as deprecated before 0.27 #12204
- [python] Automatically disconnected recordings when they go ful...
0.27.3
Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli --locked - Online demo: https://rerun.io/viewer
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.27.2/rerun_cpp_sdk.zip
🔎 Details
🌊 C++ API
- Make component type registration thread-safe in C++ SDK #11907
- Don't install signal handlers into rerun_c outside of DEBUG mode #11956
🐍 Python API
- Rework notebook auth to use device code flow #12128
🪳 Bug fixes
- Fix the visible time range for the time series view #11938
- Fix opening non-recording URLs on startup #11981
🗄️ OSS server
- Expose
/versionfrom oss server #12108
🤷 Other
- Add crate linkage delete user logging from future f7df67196c6844369f91a23ac4bbb14002ee6b05
