Highlights
Viewer design refresh
The Viewer has a refreshed home screen, a centered command palette in the top bar, and more consistent typography and colors across light and dark themes. Rounded surfaces, animated menus and dialogs, and refined list items make navigation and controls feel more consistent throughout the Viewer. The top bar also has a single toggle for diagnostic metrics. The macOS menu bar and web menu share commands and shortcuts with the command palette.
See Configure the Viewer for an introduction to the Viewer.
Inspect transform graphs via MCP
Rerun already provides a transform debugging UI for inspecting frame connections and transform values at the current time cursor.
Agents can now inspect that same transform graph via MCP using rerun_get_transform_graph, which returns frame connections and their sources as JSON, with optional filters and numerical transform values to help debug spatial relationships.
See Inspecting transforms via MCP for details.
New features
Experimental: table filters and sorting can be defined in the table blueprint and filters run faster
Table filters can now be defined in the table blueprint. Either using rrb.table.col to get filters that the viewer UI can edit, or by passing an SQL expression.
The column a table is sorted by can also be defined in the table blueprint. Sorting a column in the viewer saves it to the table blueprint, so the sort still applies after you navigate back to the table.
import rerun.blueprint as rrb
from rerun.blueprint.table import col
rrb.TableBlueprint(
# The blueprint doesn't know the schema of your table, so you have
# to make sure the filters make sense for each column.
filters=[
col("task").str.contains("pick"),
col("success").is_true(),
col("created").last_week(),
col("tags").list.str.does_not_contain("broken"),
'length("notes") > 0', # Can also pass SQL expressions.
],
sort_by=rrb.table.SortBy("score", "descending"),
)A side effect of using SQL for filters is that they are also much faster in many cases: about 1000× faster for timestamp columns, and 20–300× faster on list columns.
See Filtering rows for the full list of filters.
The rerun.blueprint.table API is experimental and may change in future releases.
Catalog API improvements
DatasetEntry.segment()returns aSegmenthandle to inspect a segment's layers and schema, get its Viewer URL, and unregister a single layer. See managing segment layers.DatasetEntry.layer(name)returns a liveLayerhandle whose.segment_ids()lists the segments currently containing that layer.DatasetEntry.schema()andDatasetSelection.schema()return catalog schema snapshots, which convert to Arrow with.to_arrow().DatasetEntry.arrow_schema()is deprecated in favor ofDatasetEntry.schema().to_arrow().DatasetEntry.info()summarizes a dataset (segment count, size, layers, timeline ranges, contents and property columns) without reading any recording data. See getting an overview.
The selection panel shows which layers a component comes from
Selecting a component of a dataset segment now lists the layers its data comes from.
Data from an asset shows up as the asset's name, and hovering it shows which of the asset's layers the data comes from.
Edit asset coverage in the viewer
The assets tab of a dataset now shows which segments each asset applies to, and lets you change which segments an asset applies to:
See assets for more information on the concept of assets.
Assets without normals are shaded
OBJ, PLY, glTF and DAE Asset3D assets that have no vertex normals are now lit and shaded: the Viewer computes flat per-triangle normals for them instead of rendering them unlit.
To keep an asset unlit, include all-zero vertex normals in the file.
Before:
After:
Experimental: LeRobot dataset metadata
LeRobotReader.metadata() returns the dataset-wide metadata of a LeRobot dataset as one static chunk at /__lerobot (configurable with entity_path_prefix), holding the text of meta/info.json and, when present, meta/stats.json.
The metadata is the same for every episode, so write it to its own .rrd and register it once with DatasetEntry.register_asset() instead of copying it into each episode.
The dataloader example now reads feature shapes and normalization statistics from this asset.
LeRobotReader is part of rerun.experimental and may change in future releases.
Train a policy on a Rerun dataset Dataloader example
Other
- Viewer-control operations answer once they are done:
open_url,close_recordings,set_time_cursor,set_blueprint, andrun_commandnow answer once the Viewer has carried them out, so the nextviewer_state()sees the result.open_urlwaits a few seconds at most for what it loads, andViewerClient.open_urlreturnsFalseif it was still loading by then. See the MCP reference. - Undo and redo table blueprint edits: Edits to a table's blueprint, such as filters and column visibility, can now be undone and redone.
- Custom table filters show their SQL with syntax highlighting: Hovering a custom table filter pill now shows its SQL with syntax highlighting, and the text can be selected and copied.
- LeRobot v2.1 videos load as
VideoStream: LeRobot v2.1 datasets now load video asVideoStreaminstead ofAssetVideo, like v3.0. Video with B-frames, such as most H.264, now needsffmpegon thePATH, and the re-encode can make ingesting these datasets slower.
Breaking changes
Python 3.11 is the minimum supported version
Python 3.10 reaches end-of-life in October 2026.
The Rerun SDK now requires Python 3.11 or later, and importing rerun on Python 3.10 raises a RuntimeError.
To keep using Rerun, upgrade to Python 3.11 or later.
See what's new in Python 3.11 for what an upgrade involves.
If you must stay on Python 3.10, pin rerun-sdk<0.40.
The supported Python versions table lists which Rerun release works with which Python version.
DatasetView renamed to DatasetSelection
rerun.catalog.DatasetView, returned by filter_segments() and filter_contents(), is now rerun.catalog.DatasetSelection, with unchanged behavior.
The old name still works but emits a DeprecationWarning; use the new name in type hints and isinstance checks.
Rust: catalog methods moved from re_redap_client to re_catalog_client
High-level catalog methods moved from re_redap_client to CatalogClient in the new re_catalog_client crate.
Looking for an older release? See the migration guides for 0.33 and earlier.