511 KiB
Rerun changelog
0.34.1 - 2026-07-07
🔎 Details
🪳 Bug fixes
- Fix: auto-refresh collections when opening a recording 9d40120
- Better error for unsupported mp4 codec 949b6a8
- Fix stack overflow for live-streamed data 1f3f5af
📦 Dependencies
- Patch
tonic-web-wasm-clientwith cherry-picked trailer changes 7436cda
0.34.0 - 2026-07-06
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-34
✨ Overview & highlights
Viewer MCP
We've added a MCP that allows an llm agent to see and interact with the Viewer! You could ask your agent to
- verify its work looks as expected in the Viewer.
- debug a bug when something doesn't show up right.
- explore a recording or dataset to search for specific patterns.
The agent has full control over the Viewer, meaning it can see and click any widget.
Here's an example where Claude Sonnet was asked to create a fancy particle animation of the Rerun logo and verify its work using the mcp in the open Viewer (sped up by a lot, except when showing the end result):
https://github.com/user-attachments/assets/14ffe7ed-6000-4193-900c-627784682125
Once it wrote the script, it logged the recording to the Viewer, and then iterated until the result looked as requested. It adjusted the camera position, improved the particle rendering by looking at different frames in the animation, and then debugged why the fade out animation was still showing particles on the last frame.
Full prompt
/goal Create a new rerun python example in this folder that uses reruns 2D shapes to recreate the rerun logo (rerun-wordmark-black.svg). There should be a nice fade-in animation in the beginning, 10 frames duration. Then pause a bit with the full rerun logo visible and then the shapes should explosively fade away with a 20 frame animation before the recording ends.
You may only stop once the recreated logo in the viewer looks close to the provided svg (black text, white background). Use the mcp to verify in the open viewer, don't ever kill it. Once done, launch an opus agent and ask it to judge how closely it looks to the original image. Keep going until it's convinced that it looks close.
See our mcp docs to get started.
Learning course
https://rerun.io/learn is a great way to learn how the Rerun data model covers the full physical AI experiment loop. It is a short, hands-on course for robotics ML engineers who want the full robot learning data loop in one place:
raw data -> RRD -> derived layers -> dataset queries -> training -> evaluation
Rerun agent skills
We added new skills to the Rerun repo to make it easier to investigate existing robotics data with Rerun. You can install the skills in your project via:
npx skills add rerun-io/rerun
The new learning course also shows how these agent skills can be used to collect, refine and train with robotics data.
VoxelGridMap archetype
Rerun now supports sparse voxel grids through a new VoxelGridMap archetype (thanks to @makeecat for the contribution!).
The archetype supports sparse indexing, anisotropic voxel sizes, pose offsets, and optional explicit colors or values & colormap per voxel.
Rerun's MCAP importer now also converts the dense ROS nav2_msgs/VoxelGrid and Foxglove VoxelGrid formats to Rerun VoxelGridMap.
And if you wonder how the smooth 3D navigation through the voxel scene in this video was done, see below!
https://github.com/user-attachments/assets/87fb80da-66dd-4fcd-8b35-ab553696f536
🎮 Gamepad support in 3D views
You can now use a gamepad to navigate 3D views in the native viewer. This makes it easier to do fine-grained, complex maneuvers with varying speed - e.g. for navigating large scenes or for screen videos. Analog sticks control the eye position and look target, shoulder triggers move the eye up and down, and shoulder buttons accelerate/decelerate.
Note: The gamepad feature is currently experimental and can be activated through the settings menu.
Switch the 3D view's eye controls to FirstPerson for optimal experience.
Under the hood, we use the gilrs crate that supports a wide range of devices.
Drag & drop components
You can now drag & drop a component right from the streams panel to visualize it in a Time series view or Status timeline.
https://github.com/user-attachments/assets/d70587a9-2020-4ae8-9cf3-0fef54dcf896
Transform debugging tool
We added a new debugging UI for visual introspection of the 3D transform cache. This allows to view the tree structure of the transform hierarchy, including potentially disconnected trees, and inspect the latest stored values of each frame node or transform edge. The UI supports horizontal and vertical tree layout and you can filter by transform type (e.g. static or temporal).
Note: this UI is currently a tab in the dev panel (accessible via "Toggle dev panel" in the menu or ctrl/cmd+shift+m). But we are open to making this a dedicated view in the future - let us know if you have any feedback!
https://github.com/user-attachments/assets/b4b1ea6e-bce9-4e88-9ede-262f545e3b47
⚠️ Breaking changes
- SDK: If you relied on the
log_ticktimeline being automatically created, you'll now have to callset_log_tick_enabled(true). - Python:
rr.send_dataframeis now stricter for more correctness. See the migration guide for more details. - Python: The deprecated python module
rerun.recordinghas been removed; Usererun.experimental.RrdReaderinstead. - SDK: Several deprecated
DatasetEntrymethods have been removed. - SDK:
ParquetReadercolumn rules have been removed in favor of lenses.
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-34
🔎 Details
🪵 Log API
- Make
log_ticktimeline OPT-IN f734978 - Allow to change shading of
Points3Dcd7fa3e - Extract out re_mp4_reader from importer 6eeeede
- Add stream-mode support and Python
Mp4ReaderLazyChunkStream binding e87dd89
🐍 Python API
- Add headless viewer mode 7e31c42
- rerun-sdk[datafusion] and rerun-sdk[dataplatform] extras are now rerun-sdk[catalog] 182cbb0
- Remove deprecated
Recordingand related APIs 2156155 - Split dataloader queries into windowed and keyframe-anchored 9ccc89e
- Introduce direct
ChunkStorequerying with.reader()d14018e - Fix
ViewerClient.closenot closing subprocesses on Windows 2bc53b6 - feature-removal: drop custom indices 4dd9c78
- Deprecate
DatasetEntry.manifest()fd24de9 - Make
Chunk.from_record_batchmore flexible d1771d4 - Remove
column_rulesfromParquetReaderAPI d18da8e - Add casting capability to derive lens f76a7d5
- Introduce
packbuilt-in function to lenses a5ea965 - Introduce
DeriveLenshelpers for common components a93eb62 - Add support for duration timelines to
FixedRateSampler45bddb7
🦀 Rust API
- Add headless viewer mode 7e31c42
🪳 Bug fixes
- Take grpc server into account when purging viewer memory f83f167
- Move relative time view range when moving time cursor e9b22c5
- Don't show loader for encoded images when playing before their encoding data has been loaded c2eed0a
- GC ever growing fields in
ChunkStoref5747cf - Fix clicking in-view links to entities outside of view (usually via transform tree) b82a1d9
- add missing
App::logiccallbacks to examples #12810 (thanks @adsick!) - Do not delete "duplicate" chunks that contain transform data 11b90ed
- Fix sort order of
nullvalues in table UI 8a0f7c5 - Navigate back after closing 71ecad0
- Fix custom visualizer example showing a black viewer e068ce8
- Fix
face_renderingon arkit_scenes example 3d04f6f - Fix ROS 2 reflection decoding of byte/char, empty specs, and wstring be0a632
- Handle codec changing for video-likes f7466ef
- Retain entry list in recording panel on refresh e7357ba
- Don't buffer & fetch more of entities based on what's hovered d9b3008
rerun rrd optimize: continue on error 63e0882- Look at
source_componentandselectorwhen assigning colors to plots 71e2cf7 - Fix viewer hang when loading static compressed images b9acd34
🌁 Viewer improvements
- Temporary time pause on scrubbing bfea333
- Experimental gamepad support for 3D spatial views (native only) da470f7
- Rename memory panel -> dev panel c54e7b8
- Show rejection reason on state component drop b6a764d
- Table blueprint registration instead of base64 encoded table blueprints f2a2805
- Hold command/control to see and drag all preview timelines 91286ba
- Improve default & visualizer reporting for
GridMapcolormap e8386c5 - Table blueprint registration for segment tables 0c60d04
- Add sparse VoxelGridMap archetype fa40ec1 (thanks @makeecat!)
- Expose
App::current_query()for external viewer #12811 (thanks @adsick!) - Don't play time forward when video is buffering c4c6832
- Local catalog server 3c6b02e
- Drag & drop scalars into time series view ae4a157
- Always buffer time 81384a4
- Visualize transform trees in dev panel a534ac6
- Query only visible parts of the state timeline 9118c03
- Add
rerun viewer-mcpaa56c88 - Hide screenshot notification on automated screenshots (scripts, mcp) 8924417
- State timeline view is now stable 0a26a8b
🗄️ OSS server
- Fix slow registration calls from OSS Catalog Server 5b74d8f
🚀 Performance improvements
- Cache string interning calls a05a4f8
- Skip empty visualizers 7d6aeef
- Don't load blueprint for previews e861b9e
- Redap client connection pool 5406d3a
- Replace
cdr-encodingwithre_cdrd2bc3b8 - Make the .ply parser ~10x faster using a custom PropertyAccess 6f8fb76
🧑🏫 Examples
- Local Vector Search example 0a336d5
🖼 UI improvements
- Add button to copy server URL 15aeda9
- Implement
WatchEventsinre_server8e07bdb - Show average bitrate for selected video 9e28016
🧢 MCAP
- MCAP: add support for ROS
nav2_msgs/VoxelGrid651c140 - MCAP: add support for
foxglove.VoxelGridc8580c1 - Move sensor_msgs/msg/MagneticField to lens fe9b74f
🧑💻 Dev-experience
- Add Rerun agent skills 6732840
- Show bound and connect URLs when serving web viewer #12753 (thanks @terror!)
- Skills: mandate the idiomatic reader+lens pipeline (steer away from hand-built chunks) c436da5
📚 Docs
- Document catalog entry renaming and directory delimiter 57da6f3
📦 Dependencies
- chore: update lance, datafusion, and arrow 47d29ff
🤷 Other
- Push down selected components to
fuzzy_descriptors92f2281 - Add RRD footers section to
rerun rrd stats4ab8388 - Bound server chunk scans with per-segment index-value pushdown 990166c
- sdk: retry+backoff on behalf of the customer 2ef0fde
0.33.1 - 2026-06-22
🔎 Details
🪳 Bug fixes
- Do not delete "duplicate" chunks that contain transform data b2ac735
🌁 Viewer improvements
- Temporary time pause on scrubbing c7578b9
0.33.0 - 2026-05-29
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-33
✨ Overview & highlights
After our large 0.32.0 release, this one is more focused but still has some great new things in store for you!
Headless viewer
This release comes with a new headless mode for the viewer! Together with smaller improvements to the screenshot API, this can be an invaluable tool for automation and LLM usage.
import rerun.blueprint as rrb
from rerun.experimental import ViewerClient
# Spawn a headless viewer; the client owns its lifetime.
# ⚠️ you need a graphics driver to run this (software rasterizers like lavapipe are fine too!).
with ViewerClient(spawn=True, headless=True) as viewer:
rec = rr.RecordingStream("rerun_example_screenshot")
rec.connect_grpc(url=viewer.url)
view = rrb.Spatial3DView(name="my blue 3D", background=[100, 149, 237])
rec.send_blueprint(view)
# Screenshot only the view we created earlier.
viewer.save_screenshot("my_view.png", view_id=view.id)
# Disconnect the RecordingStream before the headless viewer shuts down.
rec.disconnect()
We're planning more features for ViewerClient Python object, including an MCP server allowing agents to fully instrument the Viewer.
Stay tuned!
Push-down filtering on chunk processing
This release brings a significant optimization to pipelines in the shape of:
from rerun.experimental import RrdReader
lazy_store = RrdReader(...).store()
stream = lazy_store.stream().filter(...)
# more stream operations
The filter is now pushed down to RrdReader, which will selectively load the matching chunks only.
This massively accelerates targeted data extraction from large RRDs (e.g. extract a joint data from a RRD that also contains multiple video streams).
Improvements on experimental state timeline view
We're continue to perfect the state timeline view, and this release brings this lot of improvements:
https://github.com/user-attachments/assets/b7549593-363f-4e13-ab9b-184d6434fc19
- Support for numbers and boolean components, not just strings.
- Drag a component right from the streams tree into a state timeline.
- Highlight the time range of a state by hovering it.
- Clear state by logging an empty string or a
Clearmessage: the timeline shows a gap until the next state value.
Improvements on experimental dataset review
Amongst other improvements, we made the play behavior much nicer for our experimental dataset review and table blueprint feature:
https://github.com/user-attachments/assets/4543af53-52ca-4488-90b0-8c365f9fb89b
Nicer native Viewer title bars on Windows & some Linux desktops
On MacOS we used to have a compact title bar for a very long time. Now the same feature comes finally to Windows and some Linux desktops.
Before:
✨ After ✨:
If you experience any issues with this you can turn it off in the settings menu.
⚠️ Breaking changes
The Python optional-dependency extra for catalog/query API tools has been renamed to catalog.
| Before | After |
|---|---|
pip install rerun-sdk[dataplatform] |
pip install rerun-sdk[catalog] |
pip install rerun-sdk[datafusion] |
pip install rerun-sdk[catalog] |
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-33
🔎 Details
🪵 Log API
- Fix problem of intermixing different store messages in one rrd bee551f
🐍 Python API
- Add
trim_metadata_keysargument toChunk.format2d6cd8d - Allow
#whenanchors without#time_selection1c242c8 - Optional Hub ingestion of customer SDK traces 5a362a3
- Remove segment id validation with
dataset.reader(..., using_index_value=...)7846d38 - Dedup video stream samples in video decoder d341ba4
- Pushdown
LazyChunkStore.filter()toLazyStore99a2149 - Add headless viewer mode b050087
- rerun-sdk[datafusion] and rerun-sdk[dataplatform] extras are now rerun-sdk[catalog] fcb5b13
🦀 Rust API
- Increase the re_sdk viewer spawn timeout to 4s 230cde6
- Optional Hub ingestion of customer SDK traces 5a362a3
- Add headless viewer mode b050087
🪳 Bug fixes
- Create spatial topology from schema instead of from chunk data (fixing to sometimes never pull data) 3fffd8b
- Respect play state from blueprint with Catalog Server 35613c9
- Fix orbital zoom clamp panic on tiny scenes 6f1bcde
- Fix notification id collision a453f9a
- Fix previews repeatedly opening log sources 4e03a27
- Fix video issues after GC at start of recording 9670f20
- Dataloader: skip predicate keyframes c8b963f
- Default Safari to WebGL — Safari 26.4 broke 3D under WebGPU #12789
- Fix occasional Viewer hangs on some Wayland systems 1f7680c
- Fix handling of png encoded depth images on the web bcfbd22
- MCAP: resolve field type ambiguities in message schema reflection 0ce185b
- Implement unclamped
SetTimeand fix#whenanchors d33a6ab - Fix encoded rvl images 717b40d
- MCAP: fix
sensor_msgs/PointCloud2offsets for extra fields 20fe293 - Fix AV1 OBU walker cursor drift c61b60b
Clearlog support for state timeline 639c5e6- Take grpc server into account when purging viewer memory 09b0192
🌁 Viewer improvements
- Emit
VideoStream::is_keyframeinrrd optimizeab74f37 - Opening a url with a timestamp anchor now always pauses the recording 24827ea
- Add a copy button to image previews 8e5e5ad
- Components from timeline panel can be dropped to State timeline e68e001
- Show loading indicator for dataset previews 9e811e5
- State timeline accepts numbers and booleans de849aa
- Compact title bar on Linux & Windows 475fc45
- Surface errors when loading a URI e3aabd7
- Add "Show/Hide in all views" entity context menu actions aa49fc4 (thanks @ollema!)
- Individual controllable time playing for previews 4b17956
- Vertical scroll support for state timelines 6dc3e49
- Fixes last state in timeline extending to infinity a13dc44
- Hovered state highlights time range in time-based views 5258852
- Make webdecoder more robust against spurious decoding problems fb2e5d1
🚀 Performance improvements
- Faster queries: do not split or compact chunks 0cb8ffb
- re_server: refresh schema cache after add_layer 2e736c4
- Separate is keyframe chunk 85fe857
- Speed up queries over single columns 5bc08c6
- Enable SIMD on wasm 3bcaca0
- Making dataloader keyframe aware 203d7ce
- Speedup for points & line rendering on Apple Silicon in some situations b8b0ced
- Cache RGB8 image histograms #12800 (thanks @waamm!)
🧑🏫 Examples
- Add example for preprocessing a robot recording via chunk API 396a512
📚 Docs
- Adding overview to Getting Started 473abad
- Moving install and setup from overview to getting started on resources page f1de7a4
- Make more reference material available in the side bar ba868d9
- Simplifying docs guide 0ca2c5f
- Add migration note for legacy ROS 1 data de6a430
- Fix custom-data doc page claiming you can't visualize custom data, instead redirect to pages that explain how 7bad539
🖼 UI improvements
- Respect Wayland compositor preferences for client/server-side decorations 0c00f57
- Add a nicer About-menu 6645dbe
- Reset states timeline view via double-click 36cf84d
🧢 MCAP
- Keep MCAP channels without schema as raw data 7b87ed0
- MCAP: Add lens for ROS 2 geometry_msgs/PoseStamped be7012c
- Move std_msgs/String to lens 06fef1c
- Move rcl_interfaces/msg/Log to lens 325b28f
📈 Analytics
- Datafusion metrics fdbb66f
🧑💻 Dev-experience
- Include trace-id in error message on failed registration bab7682
0.32.2 - 2026-05-20
🔎 Details
🪳 Bug fixes
- Create spatial topology from schema instead of from chunk data (fixing to sometimes never pull data) 6c015b9
- Respect play state from blueprint with Catalog Server 58aa9c5
- Fix orbital zoom clamp panic on tiny scenes d039a5f
- Fix video issues after GC at start of recording e230962
🌁 Viewer improvements
- Opening a url with a timestamp anchor now always pauses the recording 9977cd1
🚀 Performance improvements
- re_server: refresh schema cache after add_layer fefa95e
- Speed up queries over single columns 0a6e2d8
🧢 MCAP
- Keep MCAP channels without schema as raw data 7d3e0d5
0.32.1 - 2026-05-15
🔎 Details
🪵 Log API
- Fix problem of intermixing different store messages in one rrd 5620f47
0.32.0 - 2026-05-13 - Chunk Processing, Pytorch dataloader, Dataset Review
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-32
✨ Overview & highlights
Python chunk processing API
This release introduces a chunk processing API designed for systematic and efficient wrangling of robotics data. It includes:
- A
Chunkobject for inspecting, creating, and manipulating chunks. - Readers for common file formats (RRD, MCAP, Parquet, URDF, and more to come) which output streams of chunks.
- A composable
LazyChunkStreamclass to define memory-bounded chunk-based filtering and transformation pipelines. - Lenses: an expressive and performant API to manipulate component data in chunks.
- A multithreaded, GIL-free, native engine for pipeline execution that is designed for distributed execution in the future.
- Interoperability with a catalog server and the Rerun SDK logging API.
In addition to enabling powerful data wrangling pipelines, the chunk processing API is significant for offering read/write chunk-level control of RRD files down to the raw Arrow data.
Note: this API is experimental and subject to breaking changes as we continue to improve it.
Experimental dataset review
You can now build tables of recording previews configured with arbitrary blueprints!
https://github.com/user-attachments/assets/7acf9671-c46a-4355-a50f-2670cc80c4d9
Clickable flags let you curate data directly from the table: toggles update a boolean flag column and are written back to the server.
To try it out, enable the experimental options in the Viewer's settings and try the two Python examples:
table_grid_with_flags for basic grids with clickable flags,
and table_blueprints for the full preview experience.
Limitations, or why this is still experimental:
- previews don't yet work directly on raw datasets; you have to send a special table to the server instead (see examples)
- table blueprints are currently text-encoded in table metadata, this is subject to change
- depending on the number and content of previews, overall runtime performance can be poor, especially in the browser
- many UX details are still unfinished
Experimental state timeline view
A new experimental view for visualizing discrete state transitions over time as horizontal colored lanes, useful for state machines, mode transitions, and similar discrete signals. Log state changes with the new StateChange archetype; configure their display on the UI or using StateConfiguration in the blueprint API.
Read our guide to get started. Feedback is appreciated!
GridMap archetype and MCAP support for ROS occupancy grids
Rerun now supports 2D grid maps, as used e.g. in robot mapping & navigation applications, through a new GridMap archetype.
- A
GridMapis an image buffer with defined cell size per pixel, which can be embedded as a textured rectangle in a 3D scene. GridMaphas a regularImageBuffercomponent, so you can also send color images (e.g. to do custom color-mapping in your code).- For layering of multiple maps you can optionally set draw order and opacity when logging, or separately in the viewer / blueprint.
- The visualizer also supports the colormap options that RViz users are familiar with, selectable at log time or in the viewer / blueprint.
- In a 3D scene, the map appears at the entity's coordinate frame (either entity-path based or with TF-style named frame like
CoordinateFrame("map")). Additionally, an optional translation & rotation offset can be specified.
For ROS 2 users:
- 🧢 Rerun's MCAP importer automatically loads ROS 2
nav_msgs/OccupancyGridmessages asGridMaps. - 📖 Our ROS 2 guide also shows an example how you can log
GridMapfrom your custom ROS nodes.
Here's a demo video showing a typical ROS 2 MCAP recording with multiple map and costmap layers in Rerun:
https://github.com/user-attachments/assets/f31b712d-2dd7-4e45-bb6a-0e103e7016b3
OSS catalog server now streams from disk
The OSS server (rerun server and rr.server.Server) no longer eagerly loads RRDs in memory when registering datasets.
It instead uses the manifest embedded in the RRDs to load chunks on demand when serving requests.
This greatly extends the amount of data that can be registered and queried for a given memory budget, and makes registration orders of magnitude faster.
Note: This requires the RRDs to have a manifest, which most modern RRDs have.
Legacy RRDs are still eagerly loaded.
Use the rerun rrd optimize CLI to migrate and optimize legacy RRDs.
Plot improvements
- Performance improvement for scenes with many series. Moved from egui CPU tesselation to GPU line rendering.
- Redesigned tooltips. Hovering over a plot now shows a cleaner, more compact tooltip with color swatches matching each series. Also it is visually obvious now when events were actually logged.
- Better NaN & Infinity handling. Time series views now gracefully handle non-finite values: the Y-axis range ignores them, isolated data points surrounded by NaN are drawn as dots instead of disappearing, and aggregation skips over non-finite values rather than corrupting nearby points
Performance improvements
This release comes with a few significant performance improvements. Among other things:
- Visualizing scenes with many transforms on the same entity (as it is often the case with
tf-style named transforms) will now perform vastly better - Plot line tessellation is now GPU accelerated, using the same rendering path as our 3D lines
- Web viewer now decodes images using the web decoder, resulting in much smoother play of raw-image "videos"
- various improvements to
rrd optimize(formerrrd compact) to produce more streaming & object storage friendly data - MCAP decoder is now multithreaded
New branding
You may have noticed a new Rerun logo and app icon! We've also slightly tweaked our color palette. Stay tuned for more exciting news!
Docs feedback on the website.
As a part of our website update, we've also added a feedback form to all our documentation pages. So you can add your feedback directly to the respective topic.
☁️ Highlights for Rerun Hub customers
Several improvements in the open-source Rerun SDK are designed specifically to work with Rerun Hub. Here are the key updates that are especially relevant if you're a customer of Rerun Hub:
Direct fetch from object storage for commercial Rerun Hub customers
The SDK will now fetch chunk data directly from the object store that holds your recordings, without needing to proxy the data through the server. This allows for better performance in highly parallel workloads, as well as lower latency when the client is located close to the data store.
The old proxy path is still supported, and can be opted into using the RERUN_CHUNK_STRATEGY=grpc environment variable.
Experimental training dataloader
You can now train PyTorch models directly against the Rerun OSS server, with no intermediate export step!
The new highly experimental rerun.experimental.dataloader module exposes Rerun recordings as iterable or map-style PyTorch datasets, streaming encoded images, scalars, and compressed video (h264/h265/av1) on the fly. Random access, multi-worker prefetching, and DDP support work out of the box.
Each field accepts an optional window=(start_offset, end_offset) parameter, an inclusive range relative to the current index. When set, the field yields the slice of values across that window instead of a single sample. For example, window=(1, CHUNK_SIZE) returns the next CHUNK_SIZE action values after every observation, making action-chunking policies a single query per batch.
See the new LeRobot ACT training example.
Expect breaking changes between releases while we iterate on the design. For large-scale training, Rerun Hub offers a higher-performance backend.
⚠️ Breaking changes
- "Data loaders" renamed to "importers" to avoid confusion with the widely-used ML/PyTorch "dataloader" concept
- Rust Lenses API has been restructured
rerun rrd compactrenamed torerun rrd optimize, has profiles and new defaultsDatasetEntry.registerrequires a sequence of URIs (Python)- URDF importer now loads the static transforms of the model to the
/tf_staticentity by default - MCAP metadata and statistics are now saved to
__mcap_metadata
🧳 Full Migration guide: https://rerun.io/docs/reference/migration/migration-0-32
🔎 Details
🪵 Log API
- Group URDF collision entity paths by geometry type a394117
- Add Parquet Dataloader with some workarounds for merging columns c1ee446
- Optionally add struct grouping on parquet columns ae22b4d
- Introduce
GridMaparchetype & visualizer d74cb27 - Rename "DataLoader" to Importer 11cd1c2
- Use
/tf_staticas default in URDF importer & make configurable inUrdfTree1f01a57 - Expose
mimicjoints from URDF cf4c652 - Add RViz-style "Map" and "Costmap" color options for
GridMapc452a48 - Add
stream() -> LazyChunkStreamto PythonUrdfTreedc51f60 - Renames ChunkBatcherConfig::ALWAYS to ALWAYS_TEST_ONLY 46c20b8
- Opt-out from generating a FileSink footer 0a78f28
- Add
UrdfTree::compute_joint_transform_batchesfor lens/chunk pipelines efd045c - Add snippet showing a
GridMapat a specific pose 2e99c68
🐍 Python API
- Introduce
LazyChunkStreama0ce421 - Introduce
McapLoaderto produceLazyChunkStreamfrom MCAP file ef51623 - Expose
Selectorin Python SDK ffc088d - Introduce Python
ChunkStoreobject 9294554 - Add ability to compact
ChunkStore5dd9f23 - Use Lenses to manipulate
ChunkStreamin Python SDK 72ff520 - Make notebook display loading spinner when waiting on send_table ea09906
- Make
RrdLoaderproduce lazyChunkStore2e804c4 - Add
mapandflat_mapmethod toLazyChunkStream393680c - Add
Chunkconstruction methods:from_columnsandfrom_record_batch547d650 - Add
exists_okoption toCatalogClient.create_dataset8d4e1b3 - Add
Chunk.apply_lenses()API 88fea86 - Expose split-size-ratio in python c21a5b8
- Initial torch dataloader dca28f2
- Rename
rrd compacttorrd optimizec5b027b - Add
apply_selectormethods toChunk5a20bd6 - Use
Mapping-basedLensOutputand improve naming 2fc409e - Add Map-style torch dataset ebb9953
- Make task cancellation API public, add
.cancel()on RegistrationHandle 260d119 - Add documentation page for lenses 1cb99e5
- Add include & exclude topic filter options to MCAP importer 1b586fa
- Further simplify Lenses API in Python and Rust 65d744a
- Allow creating a
Chunkcopy with a new entity path 3d8f97c - Make
Selectorpicklable db20691 - Add
dataset.segment_store(segment_id)to create a lazyChunkStore524b5cc - Introduce optimization profiles and change default d3488bc
- Split off
LazyStorefromChunkStore(now returned bydataset.segment_store()andRrdReader.store()) fa63189 - Improve dataloader config b96a985
- Add support for multi-store RRD to
RrdReader41ed51a - Rename
send_chunktosend_chunksand accepts stores andLazyChunkStreamc8e0965 - Deprecate
rerun.recording8b52512 - Fix disconnect footgun 4833706
🦀 Rust API
- Introduce
at_entityinstead of*_output_columns_at8e65ff0 - Decouple entity path filtering from
Lensdefinition 80ab3a9 - Pushdown filters for select 215e8aa
- Rework chunk output produced by Lenses dbeef05
- schema evolution: widen record-batch on read 838a669
- Unify
Chunk-based APIs between Rust and Python a171102 - Add
apply_selectormethods toChunk5a20bd6 - Enforce one-to-one mapping of
LensOutputto target entity b5709e5 - Add documentation page for lenses 1cb99e5
- Further simplify Lenses API in Python and Rust 65d744a
- Allow creating a
Chunkcopy with a new entity path 3d8f97c - Add
GraphViewto rust blueprint api 9327b5f
🪳 Bug fixes
- Fix our python 3.10 support 7d4716d
- Fix MCAP CLI decoder identifier list 5b170a4
- Fix bug where shapes defined with UI units were scaled incorrectly 7e7ec15
- Improve
rerun download1c9aa10 - Fix off-by-one bug in video stream cache f0484ee
- Fix: Hyperlinks shown in tables wouldn't resize f16707e
- Fix range queries on 3D points in
SpatialView3De8dc5e0 - Fix plot view time range ui 45de0cb
- Make arrow keys pause playback 37009c0
- Fix silent error swallowing in gRPC streaming, add error injection testing infrastructure ec01f7a
- Fix
follownot being propagated tohttpURLs with extensions 09d5f94 - Fix renderer registration order influencing draw order 97db1a1
- Unify
rerun//andrerun+httpsat parse time, fixing Viewer bugs for incorrectly distinguishing them 69ff58d - Add
SystemCommand::RemoveRedapServerfor more thorough cleanup 52bc3ea - Close recordings when a server is removed ad7371f
- Fix visualizations not showing up when initial data was empty c867040
- Fix reflection of "pure-constant" ROS2 message schemas fefbf6d
- Handle large video file error gracefully #12744 (thanks @AyushAgrawal-A2!)
- Use row id instead of byte span for video streams 645e57b
- Return empty tensor on video decoder cold-start instead of raising 13f92e5
🌁 Viewer improvements
- Cluster overlapping coplanar
TexturedRects and use draw order for tie-breaking 76b64c1 - Always open recording in background from context menu a173287
- Improve implicit handling of invalid instance pose rotations e65a6ce
- Use optional
poseof FoxglovePointCloud(if set) fee2815 - LeRobot loader: Add support for flat feature names a493658
- Select
message_log_timeas default timeline for MCAP b687bd6 - Properly handle outline masks of overlapping coplanar rectangles 617a7c2
- New liftable shape limit to avoid unresponsive viewer a4f6223
- Add configurable CORS policy for rerun proxy and re_server 8baa142
- Smarter
VideoStreamstreaming 2f73783 - Support focusing specific 3D points in viewer ddda5cf
- Experimental grid layout & flagging for tables 9b6bf71
- Make panel state toggable while inspecting tables/server 2eb8fb0
- Streaming info panel (as part of memory panel) 597fdd4
- Respect
up_axisin Collada (.dae) mesh importer #12708 (thanks @Abhisheklearn12!) - Improve handling of NaN & Infinity values in time series view 055777f
- By default, fetch similar chunks 30 seconds of playtime forward 7c0680e
- Remember memory limit between viewer relaunches 1eb763a
- Add support for duration columns in lerobot datasets 1cd0abc
- Support hierarchical dataset naming in viewer efa2f23
- Display
.separated dataset in a folder hierarchy a217309 - Full VP8+VP9 support on native & web a1642b4 (thanks @AyushAgrawal-A2!)
- Use video player for encoded depth images c3af7d5
- Better log console formatting bd4c866
- Make text document configuration part of the blueprint e6ae09a
- Experimental preview renders for tables with data set URLs b133946
- Add
VideoStream.is_keyframecomponent d50eab6 - Limit 2D & 3D view zoom out e43c172
- Make previews always play looping 90b5b01
- Fix arrows blowing up when cap behind camera db571f7
- Add Ellipses2D archetype 2cbf5ff
- Clamp time controls 8af40e2
🗄️ OSS server
🚀 Performance improvements
- Decode encoded images using our video-player system, and use the web video decoder 794a722
- Drop details from the manifest that aren't needed to reduce manifest memory bloat 612e9ef
rerun rrd compact: split by video GoP boundaries 2485570- By default, only prefetched what is visible b509f91
- Speed up
DatasetView.reader: only fetch schema once b266938 - Huge speedup transform lookups for overlapping transform chunks 803337d
- Don't traverse through parent entities in queries if there are no cleared entities at all a873b22
- Fix not taking fast paths in line/point for using default radii 5fb7c3d
CatalogClient: Add RTT and bandwidth probes 87c5e05- Improve performance of Protobuf reflection 3969825
registernow takes a list of URIs 9ec5265- Parallelize mcap decoder 6ccfcbf
- Emit sparse
is_keyframemarker chunks when running optimize ec6dff0
🧑🏫 Examples
- Add dataloader training example 8cd8acb
- Add snippet demonstrating
LineStrips3DwithVisibleTimeRange80dd138 - Use blueprint, component ui and type reflection in
custom_viewexample e64abd0 - Subscribe to occupancy grids in ROS node example b4a46c5
📚 Docs
- Clearer behavior for
CoordinateFrame("")5bf9c4a - Move "Installing Rerun" into Getting Started 0296f67
- Reduce python docs footguns 4e158e1
- Split "Set up a project" out of Log and Ingest d0d63bc
🖼 UI improvements
- New tooltip redesign b1a9d82
- Reduce the size of chevrons in the UI 3f63fa1
- Highlight invalid frame ID input and show
tf#/suggestions if applicable 2dbe13a - Status visualizer configuration bb83ed7
- Update our icon ✨ 0677bbf
- change colors for new brand colors 27c9036
🕸️ Web
- Add progress bar to rerun-js and handle incomplete wasm downloads ad551bd
- Add rerun-js login setting and default to hiding the login button 0d14814
- web_viewer: support overriding theme via ?theme= URL param 34b9958
🎨 Renderer improvements
- GPU accelerated time series plot drawing 8e9635b
🧢 MCAP
- Add
Selector::pipefor calling anonymous functions ea50667 - Support Foxglove
LocationFix&LocationFixes28fe84e - Split
Runtimeout ofSelector0febb36 - Transition Lenses to be
Selector<DynExpr>-based 75e965a - Lenses should not drop unrelated columns 849efb4
- MCAP: Add lens for ROS 2
nav_msgs/OccupancyGridc87a9ae - Write MCAP metadata to
__mcap_metadatainstead of__properties3352bb6 - Write MCAP stats & info to
__mcap_propertiesinstead of__properties31159e1 - Decode MCAP attachment records into
__mcap_attachments004539a
📈 Analytics
- More SDK analytics fc6c8c7
🧑💻 Dev-experience
- Add
rerun.tracing_session()for support correlation ec9f048
📦 Dependencies
- Update datafusion to 52.5.0 2832f82
- Unpin wasm-bindgen #12737 (thanks @anassinator!)
🤷 Other
- Add option to split chunks with large component size differences for different archetypes b0e6f90
- Run
rerun rrd optimizeon a folder of recordings 9ccb8b2
0.31.4 - 2026-04-29
🔎 Details
🪳 Bug fixes
- Prompt login on whoami failure a312a99
- Ensure proper
on_new_storebook-keeping for all messages 029e245 - Fix visualizations not showing up when initial data was empty c867040a
- Fix
follownot being propagated tohttpURLs with extensions 09d5f94c
🕸️ Web
- Web view add open options #12731
0.31.3 - 2026-04-13
🔎 Details
🪳 Bug fixes
- Fix plot view time range ui 3922bea
📚 Docs
- Clearer behavior for
CoordinateFrame("")4b5c2f0
🖼 UI improvements
📦 Dependencies
- Update datafusion to 52.5.0 87af7a9
0.31.2 - 2026-04-08
🔎 Details
🪳 Bug fixes
- Fix MCAP CLI decoder identifier list 24f2604
- Fix bug where shapes defined with UI units were scaled incorrectly 9a28f8e
- Fix off-by-one bug in video stream cache e4eddc9
- Fix range queries on 3D points in
SpatialView3D213957c
📚 Docs
🕸️ Web
- Add progress bar to rerun-js and handle incomplete wasm downloads 476a178
- Add rerun-js login setting and default to hiding the login button 3203577
🤷 Other
- Stop creating the search index into
docs.rs6afa84b
0.31.1 - 2026-03-31
🔎 Details
🪳 Bug fixes
- Fix our python 3.10 support 2ee1f4f
0.31.0 - 2026-03-30 - component mappings & prettier primitives
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-31
✨ Overview & highlights
Component mappings
https://github.com/user-attachments/assets/18954263-1b34-4819-869d-02fa8117d6a3
You can now map components more generally. Want to display your mesh as a point cloud? Just add a point cloud visualizer and select the vertex positions as the source.
Prettier primitives
https://github.com/user-attachments/assets/4e523454-4b3c-492b-a2a4-463f0f17ec51
Our 3D primitives got a new default look!
Performance improvements
- Optimization for point clouds, videos shared among views, data ingestion, and recordings with many entities.
⚠️ Breaking changes
- MCAP "layers" renamed to "decoders" cf0a800
rr.Serverandrr.CatalogClient:addressparameter/method renamed tourl;rerun server --addressis now--host#12402Entry.update(name=…)is deprecated in favor ofEntry.set_name(…)#12370
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-31
🔎 Details
🪵 Log API
- Redesign Lens
OpAPI to beSelector-based d962bfe - Add cull mode for front/back face culling on
Mesh3Dbe5a50f - Add
frame_prefixtoUrdfTreefor multi-robot URDF setups 8e27391
🐍 Python API
- Improve
DynamicArchetypedocs with example on how to use builtin batch types 2052af5 - Narrow typing for dynamic archetype 7b0bfaf
- Fix wrong variable in error message for extra args in log() #12674 (thanks @jashshah999!)
- Allow re-registering the same blueprint to a dataset fd03bf0
- Fix
using_index_valuenot accepting pyarrow data of the correct types 62b8ac3 - Fix passing color columns with one element in the python sdk e312d36
- Entity filter: do not include all properties if a single property is included 5d3a25f
- Support binary stream 0a05422
- Reuse precomputed timelines dict in send_columns instead of re-iterating indexes #12673 (thanks @jashshah999!)
- Add description back to python package 6ab7971
- Add
save()toRecording4ab863a - Add
compress()andas_pil_image()toDepthImagewith PNG compression bde6870 - Introduce
ChunkAPI to the Python SDK 32eb891 - Adds
rr.logoutto Python SDK 97af60e - Disable cloud vector & full-text-search for now 3da7180
- Add ContentFilter for cleaner filter_contents 8ce6d13
- Add cloud provider details to end point c8dd0c8
- Add component descriptor helper to Python archetype classes 8a2ef31
🦀 Rust API
🪳 Bug fixes
- Fixes recording staying open when user logs out 80ab340
- Selection panel: show all values at the latest time stamp 474dbe8
- Gracefully handle Rrd Manifest failures 900edfd
- Fix docs urls being loaded as data sources 80e3ce6
- Fix: fix clicking names of color maps 92529ca
- Fix rare ui id conflict in list item content 0966696
- Fix drag'n'drop issue on web 2d97010
- Handle
?url=rerun+http://…in web viewer 0a47b41 - Fix weird tooltip sizes in streams view 0d98570
- Fix showing empty label boxes for various 2d & 3d visualizations 9c547ce
- Fix bounding box calculation for GLB/GLTF & DAE meshes 8382f14
- Fix eye camera being affected by previous recording of the same application/dataset 1b9a60f
- Ignore NaN/Inf values for bounding box calculations used in 3d eye camera operations 3e26be7
- Ensure that share modals are always on top 8d8eb40
- Add zoom in limit to camera, because zooming in too far broke the view 4534001
- Bump
lz4_flexto prevent web viewer crashes 9355dd8 - Improve handling of texture creation errors ea4283e
- Fix prematurely resetting to Welcome screen even if stream finished properly 46d86eb
- Fix flipping chunks between loaded/unloaded when hovering time panel 0e51fa6
- Fix unset/reset not being greyed out for previously cleared out values 45f6ed2
- Fix default blueprint not being activated for Redap segments e66cb92
- Don't close active recording when opening settings ea86ae9
- Fix some AV1 videos not playing in the WebViewer c062098
- Fix
sensor_msgs::PointCloud2MCAP parser for empty point clouds #12684 (thanks @Woodii1998!) - Stop time control following if set time is called acba7b3
- Support LeRobot feature names on the
ListArraypath 30a86e1
🌁 Viewer improvements
- Support custom bool types in plots 888a9e8
- Add util to compute column of
Transform3Dupdates for URDF joints #12666 - Unified color swatches c020c80
- Make more visualizer errors point to specific components that are in an invalid state 19b2c79
- Add context menu to visualizer pills on time series view 136a2d1
- Make many more required components ui editable 2f791ad
- Limit number of plots only for non-builtin components and increase the limit 0d66ceb
- Show all visualizable scalars on time series add-visualizer menu 90bf07b
- Stop warning on synthetic
oneofprotobuf fields 975d3ba - Allow saving image previews in the selection panel 6e09d66
- Support plotting components that contain
FixedSizeListArray53d2864 - Add
!operator toSelectorto assert non-nullvalues a53c683 - Allow all visualizers to be created for any datatype match 5d5c2f2
- Fix overrides in blueprints created by a native viewer no showing up on the web viewer and vice versa 74a30f2
- Displays WorkOS organization when logged in 784c7b5
- Use full recording schema in manifest ingestion 6589388
- Change default fill mode for primitives 9d54afd
- Fixes logout + login into a different account 15d18e7
- Fix spamming errors when trying to show static scalars in the time series view f9ca495
- Ensure that URDF primitives are colored correctly 25ee3cb
- Add 5% vertical margin to time series plot bounds 5beb61e
- Ignore outliers for focusing on 2d & 3d point clouds b367ae9
- Limit amount of heuristic lineseries from arbitrary sources 2f6d88f
- Adds cancel button to login flow 900887f
- Add
magnification_filtercomponent to all image archetypes & add bicubic filtering 2c1ccee - Truncate strings in syntax highlighted arrow ui to 100 chars d06fc95
- Show login information on token mismatches in viewer 710ccd9
- Allow cpu->gpu transfer buffer to shrink again 4977603
- Fixes login in Safari 750f65f
- Add support for subtasks in LeRobot loader 464ff56
🗄️ OSS server
- Allow OSS server to register existing segments to new datasets d0b8f78
🚀 Performance improvements
- Remove collapsing time gaps for performance reasons eb0b67a
- Share video players between views, de-duplicating video decoding work between pinholes and 2d views 64f1003
- Support progressive ingest of the rrd manifest 9a67723
- Performance improvements for many views + many entities 8f297fe
- Speed up many-entities (Refactor view class store subscriber) e24407f
- Much faster 3D point clouds cb62f8c
- Add
ChunkStoreDiff::SchemaAdditionand use it for heuristics 822ac41
🧑🏫 Examples
- Add any scalar example ffd1687
📚 Docs
- Add generalized example (snippet + doc page) for component mappings 41cb42f
- Corrected the docs example for the
DynamicArchetype64d466d - Adding snippet showing how to register a dataset as a subset of an existing dataset 09814c0
🖼 UI improvements
- Visibility control from scalar visualizer list 5f03f15
- Make arrow values expandable if they don't fit b30522c
- Add scrolling to column popup a9a00ad
- Allow to switch between recordings in chunk store browser d449525
- Don't flicker videos to black when there's unloaded samples dc8c31f
- Show tooltip even when hovering play head in the time series view d8bd248
- Show number of columns and rows in the recording ui 29a88f9
- Collapse multi-line labels if there are too many on screen 2916462
- Fix slow resizing of table columns 299969c
- Default to only showing active timeline in dataframe and log views 4df6c62
- Refactor chunk browser UI 5b6017b
- Add cmd-K as secondary shortcut for command palette 6d5d512
- Add fade to scroll areas to indicate that scrolling is possible c0b8685
- Better time range deselect UX c947940
- Better legend ui on plot views (time series & bar chart) bc7393b
🕸️ Web
- Enable WebGPU rendering on Safari (MacOS Tahoe+ only) 76bd562
- Update wasm-bindgen to 0.2.108 7314d4d
- Fix(web-viewer): clean up loader when startup is interrupted #12696 (thanks @Woodii1998!)
🧢 MCAP
- Protobuf schema evolution and optional field support in Lenses 75a6dbc
- Improve Lenses errors and debug output 47596e0
- Support also "sec" & "nsec" in
TimeSpecToNanosf7eb4cd - Add a list of available layers to mcap convert cli bc46df7
- Add
--timestamp-offset-nsoption to MCAP CLI 787e6cc - Decode MCAP metadata records into
__properties0b43178 - Split
re_arrow_combinatorsintore_lensesandre_lenses_corea9f4ca3 - Rename MCAP
LayertoDecodercf0a800 - Default to UNIX epoch timestamp timeline in MCAP decoders bb6aee5
- Support protobuf messages with
Mapand arbitraryoneoffields 5ba2817 - Create static timeline for /tf_static ROS 2 MCAP channels 959f77f
- Ignore empty MCAP channels f0c99c5
- Ignore 'rosbag2' metadata field 357aab8
- Load URDF from
/robot_descriptionROS 2 string topics in MCAP 426fcfc - Make
SelectorevaluationArrayRef-based 35dff31 - Remove lenses that produce static columns 95ba113
📦 Dependencies
- Upgrade
jsonwebtokento 10.3 10a42b6
🤷 Other
- Add
--newflag to always spawn a new viewer even if another one is already using the default port 874d3a8 - Add
rerun downloadto download full recording from server ac95098 - Fix
rerun rrd statsreporting identical compressed/uncompressed sizes 5ac9604
0.30.2 - 2026-03-11
✨ Overview
Among many other things, this patch addresses a security advisory (SNYK-RUST-JSONWEBTOKEN-15189005) and adds a new example!
🔎 Details
🐍 Python API
- Expose executable_name and executable_path in Python spawn() #12685
🪳 Bug fixes
🚀 Performance improvements
- Share video players between views, de-duplicating video decoding work between pinholes and 2d views ed236da
🧑🏫 Examples
- Add any scalar example 3f58058
🖼 UI improvements
- Show tooltip even when hovering play head in the time series view e44fbf0
🧢 MCAP
- Add a list of available layers to mcap convert cli 89f18dc
- Decode MCAP metadata records into
__propertiescc8f1c2
📦 Dependencies
- Upgrade
jsonwebtokento 10.3 312c3b8
🧢 MCAP
- MCAP "layers" have been renamed to "decoders". The CLI flag
-l/--layeris now-d/--decoder.
0.30.1 - 2026-03-04
✨ 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
0.30.1 - 2026-03-04
✨ 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
0.30.0 - 2026-02-25 - plot any scalar & on-demand streaming
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-30
✨ Overview & highlights
📈 Plot any scalar
https://github.com/user-attachments/assets/cb10e8fd-7428-44ae-9f22-37fd721a357f
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
And finally, 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 Hub.
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 Hub 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!
https://github.com/user-attachments/assets/df609f10-5515-49bc-86fd-6940cc25706f
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 - notebook: Re-export viewer event types 4c7d978
- Add
entity_paths(),archetypes(), andcomponent_types()methods toSchema015f1fc - Error when querying an unknown index 74a27df
- Rename
rerun-sdk[datafusion]torerun-sdk[dataplatform]and add pandas dependency b82cd06 - Add (and document) time range and selection support to
segment_urlb2e7eff
🦀 Rust API
- Basic Rust & Python blueprint API for component mappings c6d7409
- Move URDF joint transform computation to Rust 4e10aea
- Allow for custom visualizer with custom shader that integrates into existing view + example 3bf7120
- Improve feature-gating in Rust SDK (removes datafusion & co from the SDK deps) #12659 (thanks @paulzhng!)
🪳 Bug fixes
- Fix first-person camera having zero speed in zero-sized scenes #12535 (thanks @Shivam-Bhardwaj!)
- Fix heuristic for
target_framein 3D views for scenes with pinholes & named frames 3c678cc - Fix
sensor_msgs::PointCloud2MCAP parser for small pointclouds 6491b95 - Bug fix: allow copying selected text 4094a91
- Fix viewer error list jumping around a1c976c
- Fix potential video deadlock 3827b1d
- Fix drawing visualizations too often whenever there's multiple visualizer instructions of the same type on an entity 2f52aae
- Fix table config button symbol for light-mode 55747b5
- Lenses: Use nullability of input rather than the output d4398f5
- Ensure we report file loading errors on web febbffc
- Recover from failing to load RrdManifest ad214ca
- Fix transparent annotation classes not leading to transparent segmentation image 55578c3
- Make the "copy" button work for components in the time panel tree 8f788a9
- Fix deadlock when loading LeRobot datasets #12652
- Fix NV12/YUYV ROS2 images being incorrectly loaded as depth 04beb77
- Don't include redo-buffer when saving blueprints 85cc4f9
- Address issue where
.daewith multiple triangle groups is not rendered 83e96bf - Don't reset video player on keyframe boundary for AV1 3bcd9b8
- Fix mono8/mono16 image channel classification #12660
- Set AR for wasm development build on macOS 7945601
- Fix interactions going through popups to the timepanel 1efc8c1
- Fix arrow key stepping on sequence timeline 1c6a71c
- Fix bad errors for unknown transform frames from overrides & view target frame 36ab981
🌁 Viewer improvements
- Extract
Selectorsfrom (nested)StructArrayfields 8319663 - Video player fetching missing chunks and less memory usage with big gops 2596f4e
- Stop offering to visualize static scalar data as time series (would previously emitting a visualization error) cc8c82c
- Source selector for visualizer components #12548
- Implement
Selectorwhen resolving component mappings 81879fd - New (simpler) heuristic for spawning time series views 53fc1fe
- Show at most 20 time series plots per entity, hide legend for more than 20 plots b103ed5
- Visualizers can now report warnings & multiple errors 67f8ef1
- Populate source mappings with nested struct fields in time series 7365386
- Add
ListArraysupport for field extraction intoSelectors6f769d6 - Adds visualizer list to time series view selection 127efa6
- Make labels in spatial view translucent 2c376b1
- Fix sometimes not showing correct values in visualizer ui a4839ce
- Show error when rerun_js viewer panics or fails to load 3f7a96d
- Visualizer list now shows color codes for time series data 2a4ef19
- Tweak
spawn_heuristicsandrecommended_visualizersfor time series views cebc107 - Fix color array display, allow editing color arrays in some cases 1e17b86
- Move Visualizer list above View properties in selection panel be57aca
- Visualizers can be deleted right from the visualizer list 0c57f9e
- Show the root transform when visualizing transform trees 84388a9
RecommendedVisualizernow contains all nestedFloat*Arrays27a7fbd- Different severities for video decoder errors 384c078
- Fix showing fallback values for empty required components in visualizer UI c8bf060
- Fix plot legend items disappearing when they have the same name 9c95786
- Visualizers can be added right from a view's selection 2e0f4cf
- Make columns reorderable by entity in the dataframe view e1e439e
- Allow loading arbitrary data loader files (mcaps, pngs, ...) via http urls a02a22b
- Drop cached videos once all referencing episodes are loaded #12653
- Add auto-scroll feature and time indicator to the dataframe view 514f1f3
- Add
InterpolationModecomponent for step function rendering #12657 (thanks @vfilter!) - Allow loading extensionless http urls via magic bytes detection daf7a35
- Fixes performance issue of too many time series plots a74b382
- Support
(U)Int16in time series plots 6bb58e4
🗄️ OSS server
- Test handling of schema conflict and make OSS server compliant c618910
- Fix table entry name leaking upon creation failure af77d4e
🚀 Performance improvements
- Improve memory budgeting ce48297
- Only initialize the transform cache for the active timeline a2f945b
- Remove larger-than-ram feature flag a4a8d56
- Fix: don't reload meshes after a GC 0259c43
- Do faster lineage check in release builds e9c0def
- Optimization: skip calculating size of time histogram 33a492d
- Change VideoStreamCache eviction policy: keep cache around until GC d517c3c
- Change default plot bounds to follow time cursor d2cf5d2
- Make handling of out of order video chunks much faster f050460
🧑🏫 Examples
📚 Docs
- Add a disambiguation from RViz to the README 90faabb
- Add snippet demonstrating conversion of custom mcap protobuf file to rrd ebd731c
- Adding snippet to convert mcap with send_column f2b3770
- Adding urdf import support to protobuf convert snippets 8be967d
- Add documentation for converting custom data to rrd using log/send_column f8cf13c
- Update MCAP message support documentation a77922a
- Add layer identifier "foxglove" to
rerun mcap convert1436027
🖼 UI improvements
- Show that other timelines have data on timeline loader 47bf28f
- Improve error messages regarding arrow datatypes b3c395e
- Fix moving text cursor with cmd-arrows cd90f34
- Don't auto-pause when moving time cursor 647cd11
- Value previews in source dropdown 6d41da9
- Only allow ui edits of visualizer components where they actually have an impact b3fa1fc
🕸️ Web
- Expose theme setting on web-viewer notebook beaee9c
- react-web-viewer: improve parameter handling logic 07a76ca
🧢 MCAP
- Support some Foxglove messages in MCAP data loader via lenses 7e05213
- Support Foxglove
Logprotobuf message in MCAP loader f7cdf09 - Support
foxglove.FrameTransformin MCAP data loader a018942 - Support
foxglove.RawImagein MCAP data loader ff7db99 - Support
foxglove.PointCloudin MCAP data loader 9e8e34b - Add ROS2 MCAP support for Float64Array, Float64MultiArray, and Joy messages 512d0e6
🤷 Other
- Refactor
add to new viewsection 8871a13 - Add
rerun auth logout7b3ae54 rerun rrd split9bde24f- Add
--followoption to explicitly follow files and URLs c34a84b
0.29.2 - 2026-02-13 - 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
- Fix moving text cursor with cmd-arrows 13f7124
- Improve error messages regarding arrow datatypes 48f4637
0.29.1 - 2026-02-06 - 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 - 2026-01-28 - URDF improvements, improved ROS 2 docs, and memory panel
🧳 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.
https://github.com/user-attachments/assets/7a3f6112-e87f-4249-977b-ed9944e2c356
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.
https://github.com/user-attachments/assets/e0b6882f-b5dd-47d9-9afc-3ea30bc38e28
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.
⚠️ There's still a lot of rough edges and this API may change in the future.
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.
https://github.com/user-attachments/assets/4ba25a41-de6a-4209-bd06-c31a33d8d993
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 - Catalog server: 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 - Fix: tap stream view to move time cursor #12476
- Fix
RecordingInfoproperties not included in the segment table 3781b18 - Fix DAE import crash caused by duplicate XML id attributes #12555 (thanks @yujeong1jeong!)
- Warn when logging transform at
/without setparent_frame#12588 - Fix
sensor_msgs::PointCloud2MCAP parser for small pointclouds f705229
🌁 Viewer improvements
- Automatically cast to
Float64Arrayin time series views #12342 - Show loaded indicator when time panel is collapsed #12396
- Video stream changes to support out of order samples #12277
- Measure and display network latency to redap servers #12426
- Enable vulkan backend for Mac Viewer builds, select graphics adapter more explicitly internally #12449
- More robust world grid rendering #12444
- Display downloaded & max size of recording in selection panel #12429
- Allow multiple visualizers of same type per
Entity#12275 - Warn if an entity has multiple
CoordinateFrameinstances #12514 - Fix case of unstable camera image plane distance #12559
- Simplify memory panel with more tabs 9dada34
🚀 Performance improvements
- Implement backpressure in
re_log_channel3a25a25
🧑🏫 Examples
- Modernize
ros_nodeexample and documentation #11968 - Add MCAP example #12353
- Add eye control example #12459
- Use optical flow tracking in detect and track objects example #12564
- Show dynamic mesh update in
animated_urdf.pyexample #12571
📚 Docs
- Reshuffle documentation organization #12355
- Update documentation about MCAP ROS 2 message support #12406
- feat: Add the SAM 3D Body example #12499 (thanks @pablovela5620!)
- Add how to guide on querying videos 5a36526
- Mention memory limit settings UI in docs 50ebee6
- docs(sdk): add thread safety warning for log() with mutexes #12579 (thanks @ecto!)
🖼 UI improvements
- Add user menu #12336
- Larger than ram time panel UI #12338
- Improved auth section in server modal #12369
- Show info message after screenshot from command palette #12465
- Display chunk download bandwidth #12451
- Fix icon colors in light theme edac1a1
0.28.2 - 2025-12-18 - Fix RRD compaction, plot panning, and Collada mesh loader
✨ 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 - 2025-12-18 - Fix some telemetry, depth images, and logging
🪵 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 - 2025-12-18 - Transforms, URDF, LeRobotV3, and Catalog API improvements
✨ 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.
AV1 video codec support. 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).
Forward/back navigation is now available on native viewers as well.
New dataloaders. Added LeRobot v3 dataloader support.
⚠️ 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 fully out of scope #12220
🦀 Rust API
- Make
RecordingStream::disabled()aconst fn#11829 (thanks @kpreid!) - Fix double memcpy in Rust blob serialization of image and other blob-based types #11842 (thanks @joelreymont!)
- Remove items marked as deprecated before 0.27 #12204
🪳 Bug fixes
- Fix rare case for incorrect queries for some cases of out of order logging #11892
- Fix exiting tracking with inputs #11915
- Fix the visible time range for the time series view #11938
- Fix sharing links to time ranges on duration timelines #11948
- Fix opening non-recording URLs on startup #11981
- Fix
ChunkIdclash due to chunk splitting #12008 - Fix scroll bar / resize handle flicker in selection panel #12020 (thanks @kratos2377!)
- Fix infinite redraw that sometimes happened in a spatial 3d view #12030
- Do input from the perspective of spin #12068
- Fix incorrect displayed transform for some cases of logging transforms at a previously shown time #12088
- Fix links to time points #12163
- Fix timepanel size being rounded down #12208
- Fix missing data after saving a time slice as .rrd #12239
🌁 Viewer improvements
- Add
av1support toVideoStream#11849 - Improved transform query semantics #11901
- Text log view blueprint properties #11896
- Order partitions by opening order #11936
- Allow visualizers to report runtime errors #11962
- Instanced drawing of
TransformAxes3DviaInstancePose3D#11970 - Add utility for sampling video from
VideoDataDescription#11972 - Relax visualizability constraints and handle invalid transforms as visualization errors instead #11973
- Native back and forth navigation #11974
- Add support to explicit child/parent transform frames for
Pinhole#11988 - Eye rotation or translation with inputs stops using fallbacks for both #12025
- Transform frame ancestors in UI #12006
- Better discovery for view's visualizer errors #12015
- Partition-to-segment rename (wave 2):
re_uri#12050 - Make
InstancePose3Dconsistently interact with transform frames #12021 - Gracefully exit on
ctrl c#12079 - Add
NavSatService::Unknownto ROS2 parsing #12106 - Add exclusions for 2d visualizables in 3d and vice-versa #12087
- Replace time trimming urls with time selection #12154
- Better target frame fallback #12127
- LeRobot v3 dataloader #12071
- Allow specifying widths of
BarChartbars #12090 (thanks @bilsen!) - Support
png&rvldepth images via newEncodedDepthImagearchetype + integration with viewer andre_mcap#11877 (thanks @makeecat!) - Show
TransformAxes3Dfor out-of-hierarchyTransforms #12262
🗄️ OSS server
- Add static/temporal chunk query filtering to OSS server #11984
- Expose
/versionfrom oss server #12108 - Add support for creating dataset from list of RRDs to
rerun.server.Server#12225
🚀 Performance improvements
- JIT compaction in ChunkStore can now split chunks in addition to merging them #11921
- Cache dataset schema #11808
- Simplify transform resolution cache's tracking based on new atomic-latest-at semantics #11909
- Add FPS to metrics #11904
- GC: target chunks furthest from time cursor #12217
🧑🏫 Examples
- Add EgoExo Forge and VistaDream examples #11883
📚 Docs
- Make python api doc search match more things #11946
- Remove load_recording docs #11997
- Mark frame based transform apis as stable #12028
- Add new (snippet) example for using pinholes with 3D->2D & 2D->3D projection #12033
- Complete overhaul of transform manual page #12034
- Document built-in URDF loader #12056
🖼 UI improvements
- Add shortcuts to switch between recordings #11637
- Allow to load URDF files via file dialog #11941
- Load URDF file into the current recording, if one exists already #11944
- Add shortcuts to navigate the timeline #11933
- Make transform frame edit not experimental #12057
- Add memory budget to setting panel #12190
- Show server auth modal on auth errors when loading recording #12121
🧢 MCAP
- Rename MCAP timelines to avoid conflicts with SDK timestamps #12145
- Parse
PoseStampedfrom ROS 2 MCAPs asInstancePoses3D#11879 - Parse
tf2_msgs/TFMessagefrom ROS 2 MCAPs asTransform3Ds #12224 - Parse
frame_idfields of ROS 2 MCAP messages asCoordinateFrame#12238
🧑💻 Dev-experience
- cpp: Export
compile_commands.jsonvia Pixi #11898
🗣 Refactors
- Partition-to-segment rename (wave 4): rename everything else #12085
📦 Dependencies
- Use
scuffle-av1for parsing av1 headers #11910 - Update
walkers(map widget) to 0.50.0 #12024 (thanks @podusowski!)
🤷 Other
- DPF: create_index: deprecate num_partitions #11920
- Add partition table context menu and row selection #11908
- Implement the search service #11954
- Add
MapProvider::MapboxLight#12083 (thanks @sectore!) - Implement streaming for datafusion table #12162
- Add Rerun Hub section to welcome page #12051
- Add support for server side filtering of DataFusion DataFrames #12147
- Fix compaction of recordings containing video streams 35810c74187c250925e958a8f095756915313ce7
- Python SDK: Add timeout_sec argument to flush f69d249e5c6bc5225d8f2f0be384243ab9dacf03
0.27.2 - 2025-11-14 - Fix compatibility with dependency
- Fix non semver compliant breaking changes in
ply-rsbreaking Rust builds #11890
0.27.1 - 2025-11-13 - Bug fixes and performance improvements
🪳 Bug fixes
- Respect timepoint in URDF loader #11866
- Fix pinhole color fallback showing the wrong color #11861
- Fix broken
delete_entriesand entries table not updated #11872 - Don't smooth velocity after WASD input #11858
- URDF loader: Use global material if inline material is absent #11869
🚀 Performance improvements
- When closing recordings (and blueprints), drop them on separate threads for UI responsiveness #11834 (thanks @kpreid!)
- Remove frame lag when creating loop region #11862
- Reverted #11766 because of performance issues with the time panel.
0.27.0 - 2025-11-10 - Viewer improvements and more blueprint configuration
✨ Overview & highlights
🟦 more properties configurable from blueprint
The viewer is now even more configurable via blueprints. With more options for time series, bar chart, graph views, time panel, and the 3D view. With the latter now having the option to control the 3D eye position and look target.
⌨🖱️User Interface improvements
We’ve changed the interaction of the time panel! Now the top bar is only for making selections, while the bottom panel is for moving the time cursor. Hold down shift for snap-to-grid! You can also click on events now to select them.
https://github.com/user-attachments/assets/3cabd74c-8227-4e9d-bd42-fdff36f0466e
You can now also use just a keyboard to navigate in panels with trees (blueprint / streams / recordings).
⚠️ Breaking changes
- Dropped support for python 3.9, and the minimum supported version is now 3.10.
- Official Intel (x86) macOS binaries are no longer provided (compiling from source is still possible).
- Removed the option to specify the current time cursor via Blueprint.
See the 🧳 Migration guide for more details.
🔎 Details
🪵 Log API
- Functionality to
add_time_columnvia lenses #11596
🌊 C++ API
- CMake: Download Arrow from Tarball URL Instead of Git #11558 (thanks @threeal!)
- Fix in-repo CMake build not resolving builds of rerun_c that weren't made with pixi #11751
🐍 Python API
- Expose view container visibility in python blueprint api #11602
- Drop Python 3.9 Support #11426
- Try to avoid timestamp footguns #11601
- py-sdk: add register_prefix SDK call #11600
- [Python] Improve errors in mesh3d_ext #11662 (thanks @iwanders!)
- Return optional DebugInfo with
memory_usedas part of CreateIndexResponse #11691 - Add a new
target_partition_num_rowsAPI parameter to the CreateIndex API #11686 - Add Ability to Launch OSS Server From Python #11689
- Our IndexValuesLike type is overly strict. Allow np.datetime64 inputs #11721
- Add play state, loop mode and loop selection to blueprint #11664
- Index management APIs: Python bindings, types cleanup, and index statistics #11729
- Remove time from blueprint #11823
🦀 Rust API
- Make
Debugfor Utf8 datatype derived component types readable #11780
🪳 Bug fixes
- Fix handling of components that only vary by descriptors #11593
- Fix selection panel infinite redraw #11623
- Allow editing times in the time panel #11774
- Allow moving text cursor while holding down options/alt #11773
- Fix 3D eye speed-up modifier not working with scroll-to-zoom #11814
🌁 Viewer improvements
- Background of graph view is now blueprint configurable #11522
- Enable multiple instance poses for
Points3D#11572 - Disable toast when copying component path #11495
- Add cyclic colormap #11498
- Allow eye-camera tracking arbitrary entities in 3D view #11554 (thanks @Gentlegg!)
- Introduce experimental
CoordinateFramearchetype #11674 - Add experimental
child_frame&parent_frametoTransform3D#11730 - Expose
TimeSeriestime range & zoom in the Blueprint API #11621 - Improve data density visualization by sampling dense chunks #11766
- 3D eye position and other properties in blueprint #11788
- Support arbitrary transform frame based hierarchies, fully independent of entity hierarchy #11790
- Removing time selection with context menu #11845
🗄️ OSS server
- Add support for layers in OSS server #11532
- Add support for properties in OSS server #11630
- Simplify
CreateIndexRequest#11636 - Improve column projection specification and implement it for OSS server #11687
- Index management APIs #11693
- Add support for blueprint dataset #11758
- Add support for renaming entries #11777
🚀 Performance improvements
- Perform transform tree walk only once per frame, rather than for every View #11470
- Significantly improve transform ingestion speed #11655
- Update mimalloc allocator from v2 to v3 #11703
- Small performance improvement for many entities #11720 (thanks @joelreymont!)
🧑🏫 Examples
- Create and write tables in the Rerun server #11694
📚 Docs
- Clarify that 0B memory limit for grpc server only makes sense if client/server are connected from the start #11599
- Add documentation to dataframe query workflow and fix api rendering for bindings #11650
- Expose all the python apis I could find for web docs #11709
- Reorganize Docs Overview / Getting Started #11781
🖼 UI improvements
- Fix blueprint / streams tree navigation ignoring focus #11574
- Keyboard navigation in tree UIs (left panel, streams panel, etc.) #11595
- Improve formatting of durations and timestamps #11659
- When scrubbing time, intelligently round to a nice value #11658
- Hold down shift for snap to grid when moving time cursor #11757
- Time panel: pick sub-second precision based on zoom level #11761
- Change how to select loop region in the time panel #11675
- Click events in the streams view #11806
🗣 Refactors
- Transform computations are internally now using double precision #11756
🤷 Other
- Add client object table writing functions #11657
- No longer providing official Intel Macs binaries for rerun #11719
0.26.2 - 2025-10-27 - More bug fixes
- Add missing
line_radiiandfill_modeparams toCapsules3Din Python SDK #11660 (thanks @yunho-c!) - Fix pressing the play button sometimes going to follow mode #11609
- Fix hiding all tabs in a tab-view breaking undo #11619
- Fix color picker on default & override disappearing when trying to edit #11651
- Fix
ViewerEvent::TimeUpdateviewer callback not emitted during playback #11639
0.26.1 - 2025-10-21 - Bug fixes
- Fix
cargo install rerun-clirequiringprotoconPATH#11592 - Switch to newly received recordings even if
SetStoreInfomessage is missing #11568
0.26.0 - 2025-10-13 - Viewer improvements and table filtering upgrades
✨ Overview & highlights
We have started aiming for a higher release cadence, with smaller, more frequent releases.
🧩 Blueprint improvements
Blueprints now give you more control over playback and visualization settings. You can define playback speed and FPS directly in blueprints, and manage time and timeline behavior through them as well. The Blueprint panel is now always resizable, and we've added support for customizing plot backgrounds.
Table filtering upgrades
Table filtering just got a lot more capable. You can now filter on timestamps, use new string operators like starts with, ends with, and does not contain, and combine these with improved numeric and boolean filtering.
⚠️ Breaking changes
🐍 Python SDK
The blocking argument for flush has been removed, use the new timeout_sec argument instead, for non-blocking calls, set timeout_sec=0.
Mostly you can just call .flush() with no arguments.
We also have started using named arguments (kw-args) for more of our functions, this will make it easier for us to evolve our APIs in the future, when adding new arguments, or renaming old ones.
See the 🧳 Migration guide for more details.
🔎 Details
🪵 Log API
- Merge
DroppableEncoderandEncoderinto a single facility #11446 - Encoder: simplified APIs and improved discoverability #11450
- Introduce
Lensas a concept for semantic mapping of arbitrary data #11394
🐍 Python API
- Add module definition to all
pyclasses#11268 - Python SDK: Add
timeout_secargument toflush#11295 - Python SDK: remove
blockingargument offlush#11314 - Fix instances of
newest_firstnot working correctly #11326 - Update Schema to make query view requirements clearer #11287
- Fix error when logging
AnyValueswith empty columns #11322 - Include "outer nullability" when we format column datatypes #11339
- Fix error message for what package to install #11398
- Py-SDK: More kw-args #11384
- Add meaningful equality comparisons to many rust wrappers #11401
- Remove deprecated methods from
AnyValues#11390 (thanks @Weijun-H!) - Introduce the dataset manifest and remove layer information from the partition table #11423
- Make time and timeline controlled by blueprint #11405
🦀 Rust API
🪳 Bug fixes
- Fix edge case for parsing videos with constant frame size #11226
- Fix title bar height on macOS Tahoe #11241
- Blueprint panel can now always be resized #11046
- Fix rare issue where video stream sample indices would be determined incorrectly, breaking video inspection UI & playback #11308
- Fix links to custom timelines #11333
- Fix url edit warning spam #11330
- Fix race condition for ui adjustments while loading recordings from redap client #11365
- Fix formatting and parsing of component paths in URLs #11364
- Share button on notebook no longer uses the current base url for web viewer urls #11379
- Enable "Close current recording" only when there's a recording #11353
- Do not include metadata when rendering table in html #11463
- Data loaders: fix multiple nasty bugs when working with virtual FDs (e.g.
<(...)FIFOs) #11486 - Fix data corruption during compression of large chunks #11525
🌁 Viewer improvements
- Keep last paused time in web-viewer url #11246
- Add limited support for out-of-order video stream samples #11307
- Better video stream errors for missing samples & key frames #11310
- Add optional viewer url parameter to web app options #11296
- Add spectral colormap #11298
- Better gRPC errors #11335
- Fix
UnixEpochdisplay/parsing inconsistency #11491 - Blueprint plot background #11494
- Put playback speed and fps in blueprint #11490
🗄️ OSS server
- Add table support to OSS server #11356
🚀 Performance improvements
- Determine per-view overrides in parallel (-> faster many entities + many views on native) #11439
- Improve many-entity performance by fixing redundant
AnnotationContextlookups (also affects scene without annotation contexts) #11445
🧑🏫 Examples
- refactor: Move examples for notebook viewer and callbacks to
examples/python#11416 (thanks @Weijun-H!)
📚 Docs
- Add how to connect the server to the CLI command output #11400
🖼 UI improvements
- Add copy-button to the recording link table item #11242
- Add copy link context menu to server entries #11235
- Add support for displaying timezone with our timestamps #11234
- Show loading screen when opening link #11270
- Support filtering by timestamp in table view #11227
- Add
starts with/ends withstring filters to table #11341 - Mark valid data ranges in timeline when loading data via range-limited URL #11340
- Add
does not containoperator to string column filtering #11349 - Copy button on some selection items #11337
- Add
is notto timestamp filtering #11366 - Add
is notto nullable boolean filter #11371 - Treat
!=filtering of numerical column as the inverse of==(aka. outer-NOT and ALL semantics) #11372 - Add context menu button to copy partition name #11378
- Store (and display) recordings in insertion order #11415
🎨 Renderer improvements
🧢 MCAP
- Add support for
enumin protobuf MCAP messages #11280 - Represent enums from
protobufmessages asStructArray#11458 - Reflection-based
protobufparser only returns single component #11459 - Add reflection based support for deserializing ROS2 MCAP #11367
- Reflection-based ROS2 parser now only returns single component #11480
🧑💻 Dev-experience
- Improve rrd loading errors by checking FourCC first #11265
📦 Dependencies
0.25.1 - 2025-09-19 - Bug fixes
- Fix vector search #11259
- Fix space origin editor resetting & closing immediately #11251
- Fix some menu buttons closing unexpectedly #11247
- Fix table UI not saying switch to when opening a certain links #11237
- Use short name in component defaults menu #11264
0.25.0 - 2025-09-16 - Syntax highlighting, table filtering, transparent objects
✨ Overview & highlights
Syntax highlighting
Our data frames and selection panel now feature prettier colors based on data types.
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.)
Transparent objects
We finally support transparency for meshes & various shapes (boxes, ellipsoids, etc.)!
https://github.com/user-attachments/assets/5a78cf2c-1e11-4f5f-a8a4-4e5d503f4cd9
Source of transparency ("alpha") is a bit limited for now:
- color component on all of
Boxes3D,Ellipsoids3D,Capsules3D&Cylinders3D Mesh3D's albedo factorAsset3Dalbedo 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.
We also removed flush_timeout_sec parameter to out connect functions. Instead you can specify a maximum wait time in the calls to flush, but usually this isn't needed, as the new blocking behavior is also much smarter.
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_blockingdestroying C++ recording stream #10885 - Respect
CMAKE_BUILD_TYPEwhen 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
🪳 Bug fixes
- Fix panic on bad STL files (e.g. for URDFs) #10855
- Fix
Ellipsoids3Darchetype 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
Pinholecamera 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 catalog server datasets & tables #11038
- New open from URL dialog & main menu entry #11040
- Add archetypes for MCAP metadata #11062
- Add
opacitysetting forVideoStream&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
- Fixed highlighting of Python code in docs #10920 (thanks @YohDeadfall!)
- Correct 'altitude' to 'latitude' in documentation #10998 (thanks @skalldri!)
- Added release calendar for Python #11081
🖼 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 events as default timeline #11217
- Add share link button to time panel context menu #11186
🕸️ Web
- Improve browser navigation for http & catalog server links #10863
- pixi: Use llvm-ar from PATH on macOS, avoid unexpanded ${PIXI_PROJECT… #10910 (thanks @matildasmeds!)
🧑💻 Dev-experience
🗣 Refactors
- Add
ApplicationIdinStoreId#10742
📦 Dependencies
🤷 Other
0.24.1 - 2025-08-07 - Bug fixes
🌊 C++ API
- Fix
rerun_cppCMake link errors #10756 (thanks @reinar!) - Fix C++ interface for
VideoStream#10745 - Fix C++ Arrow build #10799
🐍 Python API
- Explicitly import
pyarrow.computeinurl_generation.py#10690 - Add
rerun-sdk[datafusion]andrerun-sdk[all]#10696
🦀 Rust API
- Fix unnecessary
rfdand wayland dependencies in SDK crate #10802
🪳 Bug fixes
- Make
parking_lotdependency 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-reactcompatible with React 19 #10809
📈 Analytics
- Add some analytics events #10793
0.24.0 - 2025-07-16 - Tagged components, Video Stream, light mode and more
✨ 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
Colorcomponent 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
Cylinderarchetype AnyValuesutility for Rustrerun rrd statsfor retrieving statistics about rrd filesrerun rrd routecommand to manipulate .rrd files on transport level- Much faster & better compaction for both
rerun rrd compactand automatic in-Viewer compaction - Viewers started with
spawnuse 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,SeriesPointarchetypes #9892 - Remove untagged
Component::descriptor()#10038 - Add
Cylinders3Darchetype #10139 - Provide
AnyValueshelpers in Rust SDK #10074 - Rename
ComponentDescriptorfields and use colons in Sorbet metadata #10245 - Stop logging indicators and drop them during migration #10521
- Make
SeriesPoints::markerscomponent required #10572 - Remove indicators from codegen,
rerun_py, andrerun_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_sinksto C++RecordingStream#10359
🐍 Python API
- Add
Dataset.register_batchand wrappers for task ids #9895 - Introduce
ConnectionRegistryfor centralized redap client and token management #10078 - Build in
manylinux_2_28container #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_notebookstartup times #10111 - New dataset API for just retrieving
chunk_idsassociated with a query #10261 - Multi-sink /
teePython API #10158 - Rename to
teetoset_sinks#10312 - Add support for
index=Noneto local and remote dataframe APIs and deprecateselect_static#10332 - Disable gRPC server history for Spawn/CLI #10314
- Deprecate
serve_weband improve documentation around how to serve a web viewer #10360 - Add partition ID to
TimeUpdateEvent#10403 - Fix
set_time_ctrlnot doing anything when called twice #10547 - Notebook auto-sizing #10554
- Add
RegisterTablerpc,LanceTablemessage, and related proto changes #10538 - Add
open_url/close_urlnotebook APIs #10602 - AnyValue Torch Performance Improvement #10647
- Make it easier to disable the 3D line grid in Python (blueprint) #10621
- Add
to_arrow_reader()toTableEntryandDataFusionTable#10601 - Make it possible to configure batcher explicitly via python APIs #10657
🦀 Rust API
- Update MSRV to 1.85 #9798
- Improve
reruncrate forwarding, removing need to depend on otherre_*crates for viewer customization #9825 - Update glam to 0.30, and replace
re_mathwithmacaw#10119 - Add
RecordingStream::set_timestamp_nanos_since_epoch#10200 - Add
set_sinksto RustRecordingStream#10336 - Disable gRPC server history for Spawn/CLI #10314
- Deprecate
serve_weband improve documentation around how to serve a web viewer #10360 - Experimental connection status inspection for Rust gRPC connections #10433
- Implement
Fromfor more narrow integers and floats forFloat64#10463
🪳 Bug fixes
- Fix non-deterministic mesh rendering order #10117
- LeRobot Dataloader: Mark robot type as optional #10174
- Fix some actions happening on key up instead of key down #10232
- Fix showing too much data for generic blobs of data (arrow
ListArrays) #10275 - Make it possible to click the barchart view to select it #10257
- Fix integer overflow in
TimeSeriesViewfor too large timestamps #10310 - Fix
SIGBUSstartup crash on some Mac systems #10334 - Silence harmeless "Unrecognized present mode" warning #10379
- Fix copy and cut from notebook cells #10401
- Fix videos re-decoding on some ui interactions #10420
- Fix video stuttering on Firefox & Safari when encountering b-frames #10405
- Fix pixel picking ui width changing rapidly by padding values #10481
- Fix: don't always pick
/as the origin when creating new views #10514 - Fix tooltips sometimes jumping around on screen #10527
- Fix spurious decode errors with H.264 on native Viewer #10539
- Fix H.264 with b-frames not decoding last few frames on native #10545
- Fix visible time range documentation on property inheritance #10618
- Remove redundant ffmpeg install check #10635
- Make rerun menu scrollable if there is not enough space #10642
🌁 Viewer improvements
- Basic ability to show components that only differ by archetype/field name on same entity #9877
- Visualizers' data queries take component tags into account #9887
- Allow editing existing recording properties, like name #10003
- Fix issues when combining
InstancePoses3Dwith transform properties ofBoxes3D/Ellipsoids3D/Capsules3D#10010 - Replace
tinystlwithstl_ioto support more stl files #9997 - Introduce variant UIs in
re_component_ui#10034 - Simple built-in URDF loader #10105
- New
VideoStreamarchetype for loose video samples #10126 - Enable
VideoStreamH264 on the web #10189 - Ensure LeRobot Dataloader logs tagged components #10213
- Support loading ROS paths in URDF loader #10231
- Move the default plot legend to bottom left instead of right #10233
- Add
FillModetoCapsules3D#10238 - Make plot axis thinner #10234
- Add a UI Slider to change speed of eye camera in 3D Views #10085 (thanks @jccampagne!)
- Delay showing video wait-for-decoder spinner on seeks #10404
- Rename
RecordingPropertiestoRecordingInfo#10411 - Sharper icons on low-dpi screens (which is most of them) #10508
- Add tab-bar button to hide a view #10520
- Improve error message for FFmpeg not found #10617
- Add Eye Controls 3D (Camera) properties to blueprint for kind and speed #10445 (thanks @jccampagne!)
🚀 Performance improvements
- Add detailed view of latency #10173
- Update tower http and tonic dependencies, improving
LogMsgdecode speed #10209 - Free up memory of inactive recordings #10537
- Compaction: performance & quality improvements #10594
rrd stats: add transport-layer only fast path #10605rrd stats: parallelize decompression #10606- Add documentation for all things compaction #10674
🧑🏫 Examples
- Fix custom view example not instantiating visualizer by default #9762
- Improve custom visualizer example #9994
- New example: log and animate a URDF file #10210
- Add Python example snippet for
VideoStreamusingavto encode numpy images #10279 - Standalone example for compressed video streams #10297
- Add snippet demonstrating re-muxing of
VideoStreamdata #10614
📚 Docs
- Fix errors in getting-started/data-in documentation #10134 (thanks @wyfo!)
- Make Rust getting-started example more idiomatic #10137 (thanks @wyfo!)
- Show help clicking the
?as well as by just hovering it #10160 - Provide descriptor-aware
AnyValuesexample in snippets #10225 - Update Video reference manual with information about
VideoStream#10423 - Publish JS docs #10410
- Document changes to
VisualizerOverride#10486 - Improve documentation around
AnyValuesand custom data #10589 - Add juxtaposition of
SeriesLinesandSeriesPointstovisualizer-overridessnippet #10637 - Micro-batching snippets #10662
🖼 UI improvements
- Introduce a DataFusion-backed table widget #9764
- Use
DataFusionTableWidgetfor table entries #9869 - Selection ui now handles different images on the same entity path #9928
- Add a light mode theme #9953
- Save all selected recordings #9968
- Use archetype field name in ui instead of component name #9983
- Add keyboard navigation to the blueprint and streams tree #9960
- Allow selecting multiple recordings #10004
- Remove
data_based_visualizability_filterfromBarChartandEncodedImage#10029 - Add support for variant UIs in the DataFusion table widget and show a button in the partition table recording links #10035
- Switch icons to .svg #10055
- Improve button tooltip help text #10103
- Group components by archetype in the streams panel #10124
- Group components by archetype in selection panel #10140
- Zoom X/Y axes individually, in time series and bar chart view #10159
- Toggle maximized view with Ctrl+M #10162
- Add option to link the X-axis of multiple time plots #10146
- Animate the maximization of a view #10163
- Group dataframe table by archetype and use new table design #10149
- Add "deep inspection" selection ui for the new
VideoStreamarchetype #10239 - Add duration field to the recording UI #10284 (thanks @pweids!)
- Add catalog entry table #10290
- Highlight help buttons until the user clicks one of them #10301
- Highlight redap server list item if active #10340
- Allow editing connection settings for an existing redap server #10300
- Improved menu styling #10357
- Disambiguate component entries in selection panel #10368
- Display the partition ID in recording selection panel #10387
- Show average FPS of selected video #10479
- Rename the 'Welcome screen' option to 'Rerun examples' #10503
- Show arrow data in header tooltips and ever more data when alt is down #10526
- Add support for table entries in the redap browser #10569
- Add a 'copy entry url' button next to the name of remote datasets and table #10571
- Show loading screen when starting viewer with a URL #10587
🕸️ Web
🧑💻 Dev-experience
- Show stderr output of external dataloaders #10087
- Dynamically Set Active Partition URL and Select Time Window #10557
- Log a warning when starting the viewer from inside a Docker container #10306
🗣 Refactors
- Add descriptors to all remaining blueprint components #9908
- Require
ComponentDescriptorinChunkBuilder::with_component_batch*methods #10026 - Make
archetype_field_namemandatory inComponentDescriptor#10082
📦 Dependencies
- Update to wgpu 0.25 #10009 (thanks @ThierryBerger!)
- Update Arrow and DataFusion dedpendencies #10195
- Update egui to 0.32 #10604
🤷 Other
- Add migration tool for legacy .rrd files #9816
- Add support for remote dataset blueprints #10128
- Use new column name in
blueprint::datatypes::ComponentColumnSelector#10215 - Support u16/u32/u64 wide Rerun
enumtypes in data definition #10252 rerun rrd routecommand to manipulate.rrds on transport level #10607
0.23.4 - 2025-06-26
- Fix
rerun rrd migratetool #10350
0.23.3 - 2025-05-26
🔎 Details
🌊 C++ API
- Fix building with arrow 20.0.0 #9966 (thanks @adamreeve!)
- Fix MSVC C++20 compilation issues #9951
🪳 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
QueryErrorandDataLoaderError#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
Spatial3DViewinPinholedocs #9932 (thanks @hu-po!) - Mention URL scheme in
connect_grpcdocs #10018
🤷 Other
- LeRobot: Add support for List datatype #9958
0.23.2 - 2025-05-06 - RRD migration and bugfixes
✨ Overview & highlights
- New CLI tool to migrate
.rrdfiles - 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.23will always be able to load recordings from the previous version. - Recordings from
0.23and 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
ViewerClienttorerun.experimental#9828 - Improve
set_timeerror handling for large Python integers #9839 - Properly resolve component selectors in dataset index creation and search APIs #9854
- Fix incorrectly advertised minimum supported
pyarrowversion (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 - 2025-04-25 - Fix notebooks
🪳 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
- Add link to Gradio annotation example #9790 (thanks @pablovela5620!)
🖼 UI improvements
- Show image format (resolution etc) of image blobs #9792
0.23.0 - 2025-04-24 - Backwards compatible .rrd and multi-scalar logging
✨ Overview & highlights
Viewer
- ⏩ New .rrd format that will be backwards compatible
- 📈 Support for multiple scalars under a single entity
- ↪️ Callbacks API for notebooks and JavaScript
- ⚙️ New APIs for attaching properties (metadata) to recordings
- 🧮 Experimental support for tables and dataframes
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.
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.
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.
Our snippets now contain examples for recording properties in all SDKs:
- 🐍 Python (
recording_properties.py) - 🦀 Rust (
recording_properties.rs) - 🌊 C++ (
recording_properties.cpp)
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.
⚠️ 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.
.rrdfiles 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) orrerun+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.Visibletorerun.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/Scalarin favor ofSeriesLines/SeriesPoints/Scalars#9338 - Add
serve_grpcAPI #9447 - Add experimental
send_recordingpython api #9148 - Implement
send_tableinre_grpc_serverandre_viewer#9510 - Example showcasing
send_tablefrom notebooks #9522 - Add
rr.serve_web_viewer#9540 - Add experimental
send_tableto 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++
connectAPIs #9212 - Add
detach_processoption tospawn#9400 (thanks @imstevenpmwork!) - Consistent constructor naming of
Asset3Dacross C++ and Rust #9239 (thanks @abhishek47kashyap!) - Use consistent time unit names for our API #9343
- CMake: Use
find_dependencyfor Arrow #9548 (thanks @BillyONeal!) - Set
RERUN_ARROW_LINK_SHARED_DEFAULTbased 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_indexto replacerr.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
rufflints #9201 - Remove deprecated Python APIs:
log_components,connect,connect_tcp#9197 - Remove deprecated
rr.serve()#9207 - Deprecate
rr.new_recording()in favor ofrr.RecordingStream()and improve type checking of the Rust bindings #9206 - Archetype based overrides & defaults #9209
- Fix several typing annotations in the SDK and run mypy on snippets #9260
- Correct truncation of AnyValues when using strings or bytes #9269
- New
EntityBehaviorarchetype for easyvisible/interactiveblueprint overrides #9281 - Fix the string representation of archetypes #9297
- Initial python wrapper for the new catalog API #9301
- Change signature of
set_time_ctrlto matchset_time#9342 - Add
detach_processoption tospawn#9400 (thanks @imstevenpmwork!) - Use consistent time unit names for our API #9343
- Allow passing url to notebook viewer #9493
- Import
rerun.notebooklazily #9557 - Fix
Mat3x3shape inference in.columnsapi #9569 - Cleanup
rerun.utilitiesand remove unused utilities #9759
🦀 Rust API
- Migrate SDK comms to gRPC #8838
- Document default-log level change #8988
- Transposed
RecordBatchformatter and other niceties #9056 - Fix
instacrate leaking into regular (non-testing) builds #9092 - Update MSRV to 1.84 #9216
- Remove deprecated Rust
connectAPIs #9219 - Introduce
IndexCell#9226 - Add
RecordingStream::set_index#9236 - Add Rust Viewer Callbacks example #9346
- Make
BinaryStream::readproduce full RRD files #9352 - Add
detach_processoption tospawn#9400 (thanks @imstevenpmwork!) - Consistent constructor naming of
Asset3Dacross C++ and Rust #9239 (thanks @abhishek47kashyap!) - Use consistent time unit names for our API #9343
🪳 Bug fixes
- Fix time series marker sizes not being able to vary over time #9035
- Fix shader compilation failure in Chrome 131 #9152 (thanks @yakunouyang!)
- Fix setting visible time range from overrides #9151
- Speed up 2d spawn heuristic for many entities & fix heuristic creating overlapping views for
EncodedImage#9308 - Fix time series display range being affected by invisible plots #9353
- Improve
rerun.notebook.Viewerconstructor #9495
🌁 Viewer improvements
- Make
SeriesLinevisualizer work with several scalars per time #9033 - Load depth images from Le Robot datasets #9049
- Fix inconsistencies in plot highlights #9061
- Add command palette action for resetting to the default blueprint #9088
- Plot series visibility separarate from entity visibility, handle multi-series visibility #9079
- Support Unitree LeRobot dataset naming format #9100
- Add context menu action to copy entity paths to clipboard #9137
- Copy description of selection (entity path, store id, etc.) via
cmd/ctrl + c#9172 - Editable time control & time context menus #9174
- Check dataset version when loading LeRobot dataset #9233
- Enable scalar arrays per time point for scatter plots #9327
- Double clicking plots focuses them now in other panels #9333
- Use multi-dimensional scalar values when loading LeRobot dataset #9402
- Infer image/video channel index from LeRobot metadata #9435
- Improve view heuristics for time series plot #9587
🧑🏫 Examples
- Add example for python notebook with partial & columnar updates #8956
- IMU data example #9102
- Add Mast3r_slam Example #9242 (thanks @pablovela5620!)
📚 Docs
- Add link to Snap Store in Getting Started #8972 (thanks @artivis!)
- Document testing in Rerun #8989
- Fix rustdocs for
re_video#9295 - Callbacks: Update APIs, improve docs #9312
- Update
__as reserved entity path in docs #9387 - Update cpp/eigen_opencv README snippets #9463 (thanks @ExpertOfNil!)
- Include field names in Archetype docs #9563
- Unify viewer callbacks into a single
Eventinterface #9739 - Document
send_tablein the Python SDK #9589
🖼 UI improvements
- Improve
redap://connection UX and error messages #9045 - First iteration of a dedicated UI and communication for the Redap server/catalog/collection browser #9018
- Persist servers and allow adding/removing them from the UI #9086
- Show EXIF data for JPEG/TIFF images #9153
- Add entity search to the add/remove entity modal #9120
- Streamline the help view shortcuts with the shortcuts in the menu #9268
- Group open recordings by origin, dataset/appid and examples #9377
- Implement basic UI to display recording properties #9381
- Better distinction and explanation of reserved namespaces in the UI #9390
- Add
TableStorefor table/dataframe entries + basic UI #9437 - Display thumbnail in tables by generating content-based hash for
Blobcomponents #9500 - Do not hide all entities when the search is active but empty #9734
🕸️ Web
- Add selection change and time(line) change callbacks to Jupyter Notebook and JS APIs #9147
🧑💻 Dev-experience
- Run
mypyon the contents ofscripts/#9214 - Fix Bazel build: shader reloading only on in Rerun workspace #9414
📦 Dependencies
🤷 Other
- Identify timelines uniquely by name (ignore type) #9097
- Revert log level to
infofor everything except Python sdk #9231 - Split
TimeType::Time; changing dataloader API #9292 - Remove unreleased attribute 0ec699aef5a08695e337a581ee6a2a1ccd2d01a3
- Remove speculative-links b0ea95e9d09dd14ff70264afb4027d6b33cc14af
- Fix scalars docs 6b7bf5f98527cb9622759a2dbb64e247d55deeca
0.22.1 - Bugfixes - 2025-02-20
A small release addressing bugs and polishing rough edges.
🛠️ Note on 0.20.0 release
An issue with the 0.20.0 release led to incorrect artifacts being published, causing a few minor changes to be missing from those artifacts. The correct version has always been available on crates.io, PyPI, Conda, and other distribution channels, so no action is needed if you installed from these sources.
🤖 Native loading for LeRobot datasets
We're gradually rolling out support for native loading of LeRobot datasets. It’s not fully feature-complete yet, there are tons of variations in these datasets, so it’ll take a bit of time to cover all the edge cases. More improvements and features are planned for the 0.23 release, so expect things to get smoother and more robust soon.
If you run into any issues, let us know! Your feedback helps us iron out bugs and improve the experience faster.
https://github.com/user-attachments/assets/4b6d7e8c-02c6-43c9-be66-dcdbcf782cbd
🔎 Details
🐍 Python API
- Don't use
np.float_since it was removed in numpy 2.0 #9037
🪳 Bug fixes
- Never drop blueprint data from the WS server's message buffer #8977 (thanks @DerpDays!)
- Fix bug leading to swizzled lerobot data in dataloader #9000
- Fix Arrows2D draw order having no effect #9054
- Fix non-final releases creating final-release git tags #9085
🌁 Viewer improvements
- Infer entity paths from LeRobot dataset feature metadata #8981
- Log task descriptions for each LeRobot dataset episode #9028
- Load lerobot dataset on separate IO thread #9027
🧑🏫 Examples
- Improve
image_column_updatespython example #9065
🖼 UI improvements
- Fix link in text log view help text #8963
0.22.0 - Entity filter & improved partial update API - 2025-02-06
The new entity filtering:
https://github.com/user-attachments/assets/75ae114b-a55c-452e-9003-d8f447854d2a
The new notification panel:
Copy any view as screenshot with right-click (now works in web-viewer):
New help texts for all our views:
📖 Release blogpost: https://rerun.io/blog/graphs
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-22
✨ Overview & highlights
Viewer
- 🔎 Added entity filtering/searching
- 🔔 Recent notifications show now in a dedicated panel
- 🖱️ Entity ranges can now be selected with shift + click
- ❓ Improved panel help
- 🖼️ Crisper UI rendering
- 🧊 Faster 3D transforms
APIs
- 🔄 Much easier partial updates of archetypes
- 📊 Greatly improved ease of use of
send_columns - ⏱️ Python notebooks & JS can now control the timeline and panel states (see last section of this notebook)
- 📝 Lots of new snippets for demonstrating partial updates & custom data logging in Python/C++/Rust
The API & related under-the-hood changes pave the way for better support for multiple archetypes on the same entity and components with generic types in future releases. Stay tuned!
⚠️ Breaking changes
Passing raw batches of components is no longer supported. Instead, use the partial update APIs (or in rare cases, explicitly serialize the components).
Check the 🧳 Migration guide for before/after snippets for all languages for this and other smaller breaking changes.
🔎 Details
🪵 Log API
- Tensor shape and dimension names are now separate arrow fields #8376
- Remove deprecated
DisconnectedSpacearchetype & component #8545 - Add
any_valuesandextra_valuessnippets for rust #8718 - Implement gRPC log sink #8709
- Implement gRPC log stream #8730
🌊 C++ API
- Fix compilation for GCC 13.3 (missing
cstdintinclude) #8609 (thanks @plumonito!) - Introduce eager serialization & update/clear APIs in the C++ SDK #8727
- Make all C++ archetypes eager serialized & provide generated update/clear APIs #8779
- C++
columnsmethod for convenientsend_columnscall through archetypes #8828 - Add
with_many_variants for C++ archetype mono fields & port remaining snippets #8836 - Require descriptors to be provided on all log calls in C++ (either explicitly or implicitly via archetype) #8853
- Deprecate C++
TimeColumn::from_sequence_pointsin favor ofTimeColumn::from_sequence#8882 AsComponents::serializeis nowAsComponents::as_batchesand returnsCollection<ComponentBatch>#8884- Make it easy to log custom arrow data in C++ #8880
- Rerun CMake dependency now automatically ensures C++17 or newer #8898
🐍 Python API
- Autogenerated partial updates APIs for Python #8671
- Remove unused
num_instances()method #8702 - Tagged columnar updates: Python #8792
- Include a python API for routing time control commands to the notebook instance #8809
- Python: remove legacy
send_columnsand update everything left #8799 - Deprecate Python's
log_components#8892
🦀 Rust API
- Update MSRV to 1.81 #8529
- Fix
RecordingStream::logimplicitly requiringSized#8587 - Add example for extending the viewer with custom callbacks #8284
EntityPathFiltervariable substitutions are now delegated to (new)ResolvedEntityPathFilter#8543- Specify, test, and fix all broken
AsComponents<>ComponentBatchinteractions from blanket impls #8591 - New types and traits for (co-existing!) eager serialization #8642
- Autogenerate tagging-compliant descriptor methods for all archetypes #8643
- Automatically generate partial update APIs for eager archetypes #8647
- Tagged columnar updates: Rust #8764
- Make
Box/AssetVideo/ViewCoordinates/Asset3Deager serialized in Rust #8785 - Make
Pinholearchetype in Rust eager serialized #8789 - Make
Image&Mesh3Darchetypes in Rust eager serialized #8793 - Make rust
Tensorarchetype eager serialized #8801 - Rust: remove legacy
send_columnsand update everything left #8804 ComponentBatchdoesn't implementAsComponentsanymore #8820- Set default log level in
re_logtowarn#8918
🪳 Bug fixes
- Fix WSL support, update troubleshooting guide #8610
- Handle empty line strips in the viewer #8653
- Fix clicking of links in markdown #8794
- Fix CPU spike caused by hanging connection after socket closure (#8806) #8810 (thanks @goktug97!)
- Make it possible to change the contents of a view multiple times per frame #8854
- Fix playback issues with some h264 videos on native & Safari #8850
- Fix handling null timestamps in the dataframe #8897
🌁 Viewer improvements
- Remove all legacy Chunk iteration APIs #8556
- Implement copy-screenshot-to-clipboard on Web #8607
- Improve transform performance (by caching affine transforms resulting from transform components) #8691
🧑🏫 Examples
- add prompt depth anything example #8888 (thanks @pablovela5620!)
📚 Docs
- Add new
Transform3Dpartial updates snippet for all languages #8690 - doc: Update
annotation-context.rsto use correct API #8708 (thanks @OlivierLDff!)
🖼 UI improvements
- Show the
GraphNodeas a label by default #8542 - Short circuit graph simulation if all nodes are fixed #8549
- Panel with recent notifications #8465
- Fix tooltips being dragged along in graph view #8573
- Restore the time panel help button #8599
- Filter entities in the UI (part 0): Make
CustomContentmore useful #8645 - Filter entities in the UI (part 1): Introduce a filter widget #8652
- Filter entities in the UI (part 2): Introduce entity filtering in the time panel #8654
- Filter entities in the UI (part 3): Move action to a menu in the blueprint panel and keep default blueprint when using heuristics #8672
- Filter entities in the UI (part 4): Add entity filtering in the blueprint tree #8706
- Draw nodes above edges in graph view #8738
- Filter entities in the UI (part 5): Add snapshot tests for the blueprint tree #8728
- Filter entities in the UI (part 6): Refactor
re_blueprint_treeand add more tests #8795 - Improve performance for Blueprint & Streams Panel for many entities #8808
- The empty/full entity icon now reflects presence of component on the current timeline #8839
- Show start of large arrow values instead of just their size #8861
- Implement range selection with shift-click in the blueprint tree #8852
- Filter entities in the UI (part 7): Refactor and optimize
re_time_paneland add more tests #8863 - Clickable URLs in named components /
AnyValues#8864 - Implement range selection with shift-click in the time panel #8870
- Improve look of bar charts slightly #8875
- Improved help view #8947
🕸️ Web
- Add JS timeline control and callback APIs #8673
✨ Other enhancement
📈 Analytics
- Add analytics for wgpu backend and whether the viewer runs in WSL #8612
📦 Dependencies
- Update wgpu to 24.0.0 #8743
🤷 Other
- Introduce snapshot unit tests for
re_component_ui#8546
0.21.0 - Graph view, 3D Grid & UI/UX improvements
📖 Release blogpost: https://rerun.io/blog/graphs
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-21
✨ Overview & highlights
Graph view
We've added two new logging primitives: GraphNodes and GraphEdges that can be used to visualize node-link diagrams. For this, we have implemented a new Graph View that uses force-based layouts to draw graphs.
This video demonstrates the main features of the new graph view:
https://github.com/user-attachments/assets/77db75c9-a8d8-401d-b90d-3daf08baf0ba
You can also have a look at https://github.com/rerun-io/rerun/pull/7500 if you want to learn to more.
UX improvements
This video demonstrates the main UX improvements that went into this release:
https://github.com/user-attachments/assets/bef071b5-0681-41b2-9ef0-1c6a557ff138
3D grid
The 3D view now offers an infinite 3D grid, enabled by default. Further controls and settings are available as usual through the blueprint API and/or the selection panel.
All the nitty gritty details in https://github.com/rerun-io/rerun/pull/8230 and https://github.com/rerun-io/rerun/pull/8234.
Undo/Redo support & many more UI/UX improvements
You can now undo/redo blueprint changes in the viewer! Watch @emilk putting it to action and explains how it works:
https://github.com/user-attachments/assets/a29c099d-35a3-4d32-8946-932b5a184943
Other UX improvements
But that's not the only thing that improved in the viewer:
-
Breadcrumbs show up in the selection menu now
-
Take screenshots of views from context menus
-
Entities can now be dragged from Blueprint & Streams panel into views
Index of code snippets
We now have a new index for all our code snippets.
You can use it to quickly find copy-pastable snippets of code for any Rerun feature you're interested in (API, Archetypes, Components, etc). No special tools required -- all you need is a keyword of interest, and plain old text search.
It's still the early days so it is far from perfect, but we think it can already be quite helpful; feedback welcome. Most of it is auto-generated, so it will never get out of sync!
⚠️ Breaking changes
- Near clip plane for
Spatial2Dviews now defaults to0.1in 3D scene units. - Blueprint: types and fields got renamed from
.*space_view.*/.*SpaceView.*to.*view.*/.*View.*. - 3D transform arrow visualization show up less often by default.
DisconnectedSpacearchetype/component is deprecated in favor of implicit invalid transforms (like zero scale or zero rotation matrix).RotationAxisAnglewith zero rotation axis is no longer treated as identity.
Read our 🧳 migration guide for more detailed information: https://rerun.io/docs/reference/migration/migration-0-21.
🔎 Details
🪵 Log API
🌊 C++ API
- End-to-end tagging: C++ #8316
🐍 Python API
- Never direct users towards using
rr.log_components#8151 - Make it possible to log custom components using
rr.send_columns#8163 - Lint and fix python SDK
(Py)RecordingStreamupcasting issues #8184 - End-to-end tagging: Python #8298
- Rename space view to view everywhere #8396
- Fix broken notebook loading on firefox by compressing the encoded wasm payload #8426
- Add utility to
rr.components.Colorto generate colors from any string (and use it in the air traffic data example) #8458 - Introduce new API to send a dataframe to Rerun #8461
🦀 Rust API
- Update MSRV to 1.80 #8178
- Remove
Loggable::NAME-- Loggables do not have any semantics #8082 - Never direct users towards using
RecordingStream::log_component_batches#8149 - Rust API: be explicit about when we're using the arrow2 crate #8194
- Add
from_gray16forDepthImage#8213 (thanks @fawdlstty!) - Rust: more
impl<AsComponents>helpers #8401
🪳 Bug fixes
- Fix outlines for lines having more perceived aliasing since 0.20 #8317
- Fix handling unnormalized axis for (Pose)RotationAxisAngle #8341
- Fix 2D/3D view artifacts on view's border when using fractional zoom #8369
🌁 Viewer improvements
- World grid part 1/2: add world grid renderer to
re_renderer#8230 - World grid part 2/2: Integrate into Viewer #8234
- Add Undo/Redo support in the viewer #7546
- Space view screenshotting in native viewer #8258
- Remove selection history #8296
- Make the near clipping plane editable in 2D views #8348
- Don't show transform arrows on all entities without any other visualizer #8387
- Do query for default components only once per view #8424
- Improve hovered order in 2D views #8405
- Remove wait-time when opening settings panel #8464
- Deprecate
DisconnectedSpacearchetype/component in favor of implicit invalid transforms #8459 - Improve graphics device capability detection, warn on old devices, early error on unsupported render targets #8476
🧑🏫 Examples
- Add a new "Air Traffic Data" example #5449
- Use video logging api in
detect_and_trackexample #8261 (thanks @oxkitsune!) - Add hloc_glomap example and update manifest #8352 (thanks @pablovela5620!)
- Introduce the Snippet Index #8383
- Implement complete Graph View example #8421
📚 Docs
🖼 UI improvements
- Implement graph components and archetypes #7500
- Add support for Bezier-curve multi (self-)edges #8256
- Implement incremental graph layouts #8308
- Revert label background color to that in 0.19 #8337
- Add selection hierarchy breadcrumbs #8319
- More compact selection panel when multiple items selected #8351
- Make Position2D components editable in selection panel #8357
- Dynamic configuration of graph layout forces through blueprints #8299
- Document legend interaction in the timeseries view help text #8406
- Allow drag-and-dropping multiple containers and views in the blueprint tree #8334
- Improve picking in 2D views #8404
- Make our collapsing triangle thinner for more consistency with our icons #8408
- Entities can be dragged from the blueprint tree and streams tree to an existing view in the viewport #8431
🎨 Renderer improvements
- Update egui to latest, update wgpu to 23.0.0 #8183
✨ Other enhancement
- Improve
rrd print's verbosity modes #8392 - Miscellaneous improvements to archetype reflection #8432
- Migration kernel for the blueprint space-view-related breaking changes #8439
🗣 Refactors
- Add arrow(1)-interface on top of
LoggableandArrowBuffer#8197 re_types_blueprint->re_types::blueprint#8419re_viewer::reflection->re_types::reflection#8420
📦 Dependencies
🧑💻 Dev-experience
- Add
MainThreadTokento ensure file-dialogs only run on the main thread #8467
🤷 Other
- Deprecate
--serve, add--serve-web#8144 - Clean up pass over all superfluous hashing happening on the query path #8207
- Improve performance of time panel #8224
0.20.3 - Web viewer fix
🔎 Details
🪳 Bug fixes
- Fix web viewer feature flags #8295
0.20.2 - Build fix
🔎 Details
🪳 Bug fixes
- Fix a drag-and-drop display regression #8228
📚 Docs
- Add
map_viewto the default features and improve how thenasmfeature is handled and documented #8243
🧑💻 Dev-experience
- Gracefully handle
cargo-metadatafailures in users' environments #8239
0.20.1 - Doc fix
- Fix doc build - run
cargo metadatawith--offline&--no-deps#8168
0.20.0 - Map view & native H.264 video support
https://github.com/user-attachments/assets/553b6d88-143d-4cf9-a4bc-6b620534ab95
📖 Release blogpost: https://rerun.io/blog/maps 🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-20
✨ Overview & highlights
- 🗺️ There is now an map view!
- 🎬 Native viewer now supports H.264 video if ffmpeg is installed.
- 📽️ Videos now load a lot faster use less RAM.
- 📂 Improvements to the existing
Open(Viewer) &log_file(SDK) workflows, and addition of a newImportworkflow.- Blueprints can now easily be re-used across different applications, recordings and SDKs
- The new
Importfeature allows you to drag-and-drop any data into an existing recording, directly in the viewer.
- ☰ Dataframe queries are now streamed, reducing memory usage.
- 💊 Add capsule archetype.
- 📚 Doc improvements
- Arrow schemas are now documented for all types.
- Better structure to the how to section and a few more pages
⚠️ Breaking changes & deprecations
- 🐍 Python 3.8 is being deprecated
- 🔌
connect&servegot deprecated in favor ofconnect_tcp&serve_web - 🎨 In Python, lists of numbers without type information are now assumed to be packed integer color representations, unless the length is exactly 3 or 4 🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-20
🔎 Details
🎬 Video
- Support H.264 video on native via user installed ffmpeg executable #7962
- Make mp4 parsing a lot faster & tremendously lower memory overhead #7860
- Fix playback of HDR AV1 videos in native viewer #7978
- Show all samples/frames in a video in a nice table #8102
- Calculate and show video frame number #8112
- Expose basic information about group of pictures in video data in the selection panel #8043
- Fix some videos having offsetted (incorrect) timestamps #8029
- Fix video backward seeking / stepping back sometimes getting stuck (in the presence of b-frames) #8053
- Make sure videos all end up in different space views #8085
- Fix video on web sometimes not showing last few frames for some videos #8117
- Fix issues with seeking in some H.264 videos on native & web #8111
- Fix view creation heuristics for videos #7869
- Improve video doc page #8007
- Update re_mp4 to fix integer overflow bug #8096
🪵 Log API
- Add
Capsules3Darchetype #7574 (thanks @kpreid!) rr.log_file_from_pathnow defaults to the active app/recording ID #7864- Allow overriding albedo color on
Asset3D#7458 (thanks @EtaLoop!) rr.serve->rr.serve_web,rr.connect->rr.connect_tcp#7906
🌊 C++ API
- C++: Improve error message when finding X11 macro
Unsorted#7855 - Forward
CMAKE_TOOLCHAIN_FILEto arrow build for sdk cross-compilation #7866 (thanks @SunDoge!) - Update the python package to support python 3.13, update C++ arrow to 18.0.0 #7930
🐍 Python API
- Allow passing seconds/nanoseconds to
VideoFrameReferencearchetype #7833 - Officially deprecate support for python 3.8 #7933
- Update the python package to support python 3.13, update C++ arrow to 18.0.0 #7930
- Remove the upper bound constraint on python version #7949
- Enable dataframe streaming across Python FFI #7935
- Fix python SDK's shutdown unsafely dropping cross-FFI resources #8038
- Improve edge-cases and warn on ambiguity for Rgba32 datatype #8054
- Check rerun notebook version on first import #8030
🦀 Rust API
- Allow logging individual components directly (Impl
AsComponentsfor allObjectKind::Component) #7756 (thanks @oxkitsune!) re_query::Caches->re_query::QueryCache#7915
🪳 Bug fixes
- [bugfix] Make sure blueprint gets sent to the notebook view being created #7811
- Fix too short picking ray in pinhole-only scenarios #7899
- Update zune-jpeg to fix crash on bad JPEGs #7952
- Consistent open/import/log_file behaviors in all common scenarios #7966
- ChunkStore: fix row-id computation when removing dangling static chunks #8020
EntityTree: only check for entity deletions when necessary #8103- WebSocket server now indefinitely keeps track of non-data RPC commands #8146
🌁 Viewer improvements
- A Rerun Viewer session now matches 1:1 to a Rerun TCP server #6951 (thanks @petertheprocess!)
- Implement support for in-place drag-n-drop #7880
- Implement
Menu > Importand associated command #7882 - Expose additional information about decoded frames in the viewer #7932
- Update crates, including
rfdfor better file dialogs #7953 - Line strips are no longer a disconnected series of quads #8065
- Show data density graph in collapsed time panel #8137
- Show the root entity "/" in the streams panel #8142
🚀 Performance improvements
- Don't keep around additional CPU copy of loaded mesh files #7824
- Make mp4 parsing a lot faster & tremendously lower memory overhead #7860
- Fix slow receive when using native WebSocket #7875
- Implement support for fully asynchronous
QueryHandles #7964
🧑🏫 Examples
- Fix Rust DNA sample writing to a temporary file #7827
- Add
ml_depth_proexample #7832 (thanks @oxkitsune!) - Add map view to nuscenes python example #8034 (thanks @tfoldi!)
- Add an example to display OpenStreetMap-sourced data on the map view #8044
- Improve NuScenes example with more geo data & blueprint #8130
📚 Docs
- Clarify viewport documentation and reference the type list for view classes #7826
- Finish dataframe reference page #7865
- Docs: static data #7856
- Docs: concepts > recordings #7896
- Docs: "How-to: reuse blueprints across languages" #7886
- Docs: application model part 1: native workflows #7905
- Document arrow datatypes #7986
🖼 UI improvements
- Map View and
GeoPointsarchetype #6561 (thanks @tfoldi!) - Replace the "Options" submenu with a settings screen #8001
- Improve error message style slightly #8092
- Much nicer looking error and warning messages #8127
🧑💻 Dev-experience
📦 Dependencies
- Bump numpy -> 0.23, pyo3 -> 0.22.5, and arrow -> 53.1 #7834
🤷 Other
- Implement safe storage handles #7934
0.19.1 - Web viewer fix
This release fixes an error thrown when the web viewer is closed.
🔎 Details
🕸️ Web
- Fix wasm-bindgen patch #7970
📦 Dependencies
- Add wasm-bindgen version check to CI #7983
0.19.0 - Dataframes & Video support
📖 Release blogpost: https://rerun.io/blog/dataframe
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-19
✨ Overview & highlights
This release introduces two powerful features: a dataframe API (and view), as well as video support.
☰ Dataframe API
We now have an API for querying the contents of an .rrd file. This integrates with popular packages such as Pandas, Polars, and DuckDB.
You can read more in the Dataframe API how-to guide.
We have also added a matching dataframe view inside the Rerun Viewer. Read more here.
🎬 Video
Rerun now supports logging MP4 videos using the new AssetVideo archetype.
This can greatly reduce bandwidth and storage requirements.
While the web viewer supports a variety of codecs, the native viewer supports only the AV1 codec for the moment, but we plan to support H.264 in the near future as well. Read more about our video supports (and its limits) in our video docs.
⚠️ Breaking changes
- 🗾 Blueprint files (.rbl) from previous Rerun versions will no longer load automatically
- 🐧 Linux: Rerun now requires glibc 2.17+
- 🦀 Rust: The minimum supported Rust version is now 1.79
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-19
🔎 Details
📑 Raw changelog: https://github.com/rerun-io/rerun/compare/0.18.2...0.19.0
🪵 Log API
- BGR(A) image format support #7238
- Tensor & depth image value ranges can now be configured, from UI & code #7549
- New planar pixel formats:
Y_U_V24/Y_U_V16/Y_U_V12-_LimitedRange/FullRange#7666 - Add
ShowLabelscomponent, which controls whether instances’ labels are shown #7249 (thanks @kpreid!) - Refactor
MediaTypeguessing #7326
🌊 C++ API
- Add
nullptrcheck when forwarding from component to datatype #7430
🐍 Python API
- Add missing
show_labelsanddraw_orderarguments in Python API #7363 (thanks @kpreid!) - Allow logging to a recording without first calling
rr.init()#7698 - Add support for NumPy arrays to the arrow serializer for string datatypes #7689
🦀 Rust API
- Update MSRV to Rust 1.79 #7563
- Update ndarray to 0.16 and ndarray-rand to 0.15 #7358 (thanks @benliepert!)
- Replace
host_web_viewermethod withWebViewerConfig::host_web_viewer#7553 - Fix Rust's
TimeColumn::new_seconds/new_nanoscreating sequence timelines #7402
🪳 Bug fixes
- Purge the query cache to prevent GC livelocks #7370
- Bug fix: always show latest data in follow-mode #7425
- Fix encoded image being suggested for non-image blobs (like video) #7428
- Chunk store: support for overlapped range queries #7586
- Fix image & video cache creating new entries when selecting data without explicit media type #7590
🌁 Viewer improvements
- The viewer will tail an .rrd that's is being written to #7475
- Native video support for AV1 #7557
- Allow splitting entity path expressions with whitespace #7782
🚀 Performance improvements
- Improve performance for scenes with many entities & transforms #7456
Cachesper recording #7513- Automatic removal of unreachable static chunks #7518
- Invalidate hub-wide caches on deletions and overwrites #7525
- Do not cache static entries in the query-time latest-at cache #7654
- Make sure Arrow
filterandtakekernels early out where it makes sense #7704
🧑🏫 Examples
- Add drone LiDAR example #7336
- Add
instant_splatexample #7751 (thanks @pablovela5620!)
📚 Docs
- Add video reference docs #7533
- Document that Rerun does not support left-handed coords #7690
- Add a How-to guide for the dataframe API #7727
- Docs: move "roadmap" down to "development" #7775
- Add a "Getting started" guide for the dataframe API #7643
- Docs: clean up reference menu #7776
- Updating "Navigating the viewer" #7757
🖼 UI improvements
- Add a hook for views to add additional UI in the tab title bar #7438
- Text fields in the selection panel now span the available width #7487
- Do not deselect on ESC when it was used to close some other UI element #7548
- Add UI for precisely picking an exact sequence time #7673
- Remove the feature flag for plot query clamping #7664
🎨 Renderer improvements
- Introduce image data conversion pipeline, taking over existing YUV conversions #7640
🧑💻 Dev-experience
- Add a command palette action to reset egui's memory (debug build only) #7446
- Add NOLINT block to
lint.py#7720
0.18.2 - Even more bug fixes
- Update
timecrate to 0.3.36, fixing compilation on newer Rust versions #7308
0.18.1 - Bug fixes and performance improvements
🌊 C++ API
- Install
sdk_info.heven ifRERUN_INSTALL_RERUN_Coption isOFF#7246 (thanks @traversaro!)
🐍 Python API
- Fix
VisualizerOverridesserializer and improved error handling #7288
🦀 Rust API
- Add
rerun::external::ndarray#7259 - Handle proper half-size splatting semantics in
from_mins_and_sizes#7291
🪳 Bug fixes
- Fix error when trying to clear non-existent component #7215
- Fix gamma (srgb EOTF) for GLTF via
Asset3Dembedded rgb(a) textures #7251 - Fix
Chunk::component_batch_rawnot checking the bitmap first #7286 - Fix and test all known
HybridResultsissues from 0.18 #7297 - Fix secondary plot components ignoring blueprint defaults #7302
- Fix relayout on tab background click #7283
🚀 Performance improvements
- Speed up data density graph by rendering them more coarsly #7229
- Default
RERUN_CHUNK_MAX_BYTESto 384kiB instead of 4MiB #7263 - Speed up handling of large numbers of transform entities #7300
- Fix memory leak by updating to
re_arrow2 0.17.5#7262
🖼 UI improvements
- Hide time controls if there is only one time point on a timeline #7241
📦 Dependencies
- Correct dependency on
puffinto 0.19.1, preventing a possible build failure #7221 (thanks @kpreid!) - Update
timecrate to 0.3.36, fixing compilation on newer Rust versions #7228
0.18.0 - Ingestion speed and memory footprint
https://github.com/user-attachments/assets/95380a64-df05-4f85-b40a-0c6b8ec8d5cf
- 📖 Release blogpost: https://rerun.io/blog/column-chunks
- 🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-18
✨ Overview & highlights
Rerun 0.18 introduces new column-oriented APIs and internal storage datastructures (Chunk & ChunkStore) that can both simplify logging code as well as improve ingestion speeds and memory overhead by a couple orders of magnitude in many cases (timeseries-heavy workloads in particular).
These improvements come in 3 broad categories:
- a new
sendfamily of APIs, available in all 3 SDKs (Python, C++, Rust), - a new, configurable background compaction mechanism in the datastore,
- new CLI tools to filter, prune and compact RRD files.
Furthermore, we started cleaning up our data schema, leading to various changes in the way represent transforms & images.
New send APIs
Unlike the regular row-oriented log APIs, the new send APIs let you submit data in a columnar form, even if the data extends over multiple timestamps.
This can both greatly simplify logging code and drastically improve performance for some workloads, in particular timeseries, although we have already seen it used for other purposes!
API documentation:
API usage examples:
Python timeseries
Using log() (slow, memory inefficient):
rr.init("rerun_example_scalar", spawn=True)
for step in range(0, 64):
rr.set_time_sequence("step", step)
rr.log("scalar", rr.Scalars(math.sin(step / 10.0)))
Using send() (fast, memory efficient):
rr.init("rerun_example_send_columns", spawn=True)
rr.send_columns(
"scalars",
indexes=[rr.TimeSequenceColumn("step", np.arange(0, 64))],
components=[rr.components.ScalarBatch(np.sin(times / 10.0))],
)
C++ timeseries
Using log() (slow, memory inefficient):
const auto rec = rerun::RecordingStream("rerun_example_scalar");
rec.spawn().exit_on_failure();
for (int step = 0; step < 64; ++step) {
rec.set_time_sequence("step", step);
rec.log("scalar", rerun::Scalar(std::sin(static_cast<double>(step) / 10.0)));
}
Using send() (fast, memory efficient):
const auto rec = rerun::RecordingStream("rerun_example_send_columns");
rec.spawn().exit_on_failure();
std::vector<double> scalar_data(64);
for (size_t i = 0; i < 64; ++i) {
scalar_data[i] = sin(static_cast<double>(i) / 10.0);
}
std::vector<int64_t> times(64);
std::iota(times.begin(), times.end(), 0);
auto time_column = rerun::TimeColumn::from_sequence_points("step", std::move(times));
auto scalar_data_collection =
rerun::Collection<rerun::components::Scalar>(std::move(scalar_data));
rec.send_columns("scalars", time_column, scalar_data_collection);
Rust timeseries
Using log() (slow, memory inefficient):
let rec = rerun::RecordingStreamBuilder::new("rerun_example_scalar").spawn()?;
for step in 0..64 {
rec.set_time_sequence("step", step);
rec.log("scalar", &rerun::Scalars::new((step as f64 / 10.0).sin()))?;
}
Using send() (fast, memory efficient):
let rec = rerun::RecordingStreamBuilder::new("rerun_example_send_columns").spawn()?;
let timeline_values = (0..64).collect::<Vec<_>>();
let scalar_data: Vec<f64> = timeline_values
.iter()
.map(|step| (*step as f64 / 10.0).sin())
.collect();
let timeline_values = TimeColumn::new_sequence("step", timeline_values);
let scalar_data: Vec<Scalar> = scalar_data.into_iter().map(Into::into).collect();
rec.send_columns("scalars", [timeline_values], [&scalar_data as _])?;
Background compaction
The Rerun datastore now continuously compacts data as it comes in, in order find a sweet spot between ingestion speed, query performance and memory overhead.
This is very similar to, and has many parallels with, the micro-batching mechanism running on the SDK side.
You can read more about this in the dedicated documentation entry.
Post-processing of RRD files
To help improve efficiency for completed recordings, Rerun 0.18 introduces some new commands for working with rrd files.
Multiple files can be merged, whole entity paths can be dropped, and chunks can be compacted.
You can read more about it in the new CLI reference manual, but to give a sense of how it works the below example merges all recordings in a folder and runs chunk compaction using the max-rows and max-bytes settings:
rerun rrd compact --max-rows 4096 --max-bytes=1048576 /my/recordings/*.rrd > output.rrd
Overhauled 3D transforms & instancing
As part of improving our arrow schema and in preparation for reading data back in the SDK, we've split up transforms into several parts. This makes it much more performant to log large number of transforms as it allows updating only the parts you're interested in, e.g. logging a translation is now as lightweight as logging a single position.
There are now additionally InstancePoses3D which allow you to do two things:
- all 3D entities: apply a transform to the entity without affecting its children
Mesh3D/Asset3D/Boxes3D/Ellipsoids3D: instantiate objects several times with different poses, known as "instancing"- Support for instancing of other archetypes is coming in the future!
All four tetrahedron meshes on this screen share the same vertices and are instanced using an InstancePoses3D archetype with 4 different translations
⚠️ Breaking changes
.rrdfiles from older versions won't load correctly in Rerun 0.18mesh_material: Materialhas been renamed toalbedo_factor: AlbedoFactor#6841Transform3Dis no longer a single component but split into its constituent parts. From this follow various smaller API changes- Python:
NV12/YUY2are now logged withImage ImageEncodedis deprecated and replaced withEncodedImage(JPEG, PNG, …) andImage(NV12, YUY2, …)DepthImageandSegmentationImageare no longer encoded as a tensors, and expects its shape in[width, height]order
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-18
🔎 Details
🪵 Log API
- Add
Ellipsoids3Darchetype #6853 (thanks @kpreid!) - Dont forward datatype extensions beyond the FFI barrier #6777
- All components are now consistently implemented by a datatype #6823
- Add new
archetypes.ImageEncodedwith PNG and JPEG support #6874 - New transform components:
Translation3D&TransformMat3x3#6866 - Add Scale3D component #6892
- Angle datatype stores now only radians #6916
- New
DepthImagearchetype #6915 - Port
SegmentationImageto the new image archetype style #6928 - Add components for
RotationAxisAngleandRotationQuat#6929 - Introduce
TransformRelationcomponent #6944 - New
LeafTransform3D, replacingOutOfTreeTransform3D#7015 - Remove
Scale3D/Transform3D/TranslationRotationScale3Ddatatypes, removeTransform3Dcomponent #7000 - Rewrite
Imagearchetype #6942 - Use
LeafTranslation(centers),LeafRotationQuatandLeafRotationAxisAngledirectly onBoxes3D/Ellipsoids3D#7029 - Removed now unused
Rotation3Dcomponent & datatype #7030 - Introduce new ImageFormat component #7083
🌊 C++ API
- Fix resetting time destroying recording stream #6914
- Improve usability of
rerun::Collectionby providing free functions forborrow&take_ownership#7055 - Fix crash on shutdown when using global recording stream variables in C++ #7063
- C++ API for
send_columns#7103 - Add numeric SDK version macros to C/C++ #7127
🐍 Python API
- New temporal batch APIs #6587
- Python SDK: Rename
ImageEncodedtoImageEncodedHelper#6882 - Introduce
ImageChromaDownsampled#6883 - Allow logging batches of quaternions from numpy arrays #7038
- Add
__version__and__version_info__to rerun package #7104 - Restore support for the legacy notebook mechanism from 0.16 #7122
🦀 Rust API
- Recommend install rerun-cli with
--locked#6868 - Remove
TensorBuffer::JPEG,DecodedTensor,TensorDecodeCache#6884
🪳 Bug fixes
- Respect 0.0 for start and end boundaries of scalar axis #6887 (thanks @amidabucu!)
- Fix text log/document view icons #6855
- Fix outdated use of view coordinates in
Spaces and Transformsdoc page #6955 - Fix zero length transform axis having an effect bounding box used for heuristics etc #6967
- Disambiguate plot labels with multiple entities ending with the same part #7140
rerun rrd compact: always put blueprints at the start of the recordings #6998- Fix 2D objects in 3D affecting bounding box and thus causing flickering of automatic pinhole plane distance #7176
- Fix a UI issue where a visualiser would have both an override and default set for some component #7206
🌁 Viewer improvements
- Add cyan to yellow colormap #7001 (thanks @rasmusgo!)
- Add optional solid/filled (triangle mesh) rendering to
Boxes3DandEllipsoids#6953 (thanks @kpreid!) - Improve bounding box based heuristics #6791
- Time panel chunkification #6934
- Integrate new data APIs with EntityDb/UI/Blueprint things #6994
- Chunkified text-log view with multi-timeline display #7027
- Make the recordings panel resizable #7180
🚀 Performance improvements
- Optimize large point clouds #6767
- Optimize data clamping in spatial view #6870
- Add
--blueprinttoplot_dashboard_stress#6996 - Add
Transformablessubscriber for improvedTransformContextperf #6997 - Optimize gap detector on dense timelines, like
log_tick#7082 - Re-enable per-series parallelism #7110
- Query: configurable timeline|component eager slicing #7112
- Optimize out unnecessary sorts in line series visualizer #7129
- Implement timeseries query clamping #7133
- Chunks:
- Implement ChunkStore and integrate it everywhere #6570
Chunkconcatenation primitives #6857- Implement on-write
Chunkcompaction #6858 - CLI command for compacting recordings #6860
- CLI command for merging recordings #6862
ChunkStore: implement new component-less indices and APIs #6879- Compaction-aware store events #6940
- New and improved iteration APIs for
Chunks #6989 - New chunkified latest-at APIs and caches #6992
- New chunkified range APIs and caches #6993
- New
Chunk-based time-series views #6995 - Chunkified, deserialization-free Point Cloud visualizers #7011
- Chunkified, (almost)deserialization-free Mesh/Asset visualizers #7016
- Chunkified, deserialization-free LineStrip visualizers #7018
- Chunkified, deserialization-free visualizers for all standard shapes #7020
- Chunkified image visualizers #7023
- Chunkify everything left #7032
- Higher compaction thresholds by default (x4) #7113
🧑🏫 Examples
- Add LeRobot example link #6873 (thanks @02alexander!)
- Add link to chess robot example #6982 (thanks @02alexander!)
- add depth compare example #6885 (thanks @pablovela5620!)
- Add mini NVS solver example #6888 (thanks @pablovela5620!)
- Add link to GLOMAP example #7097 (thanks @02alexander!)
- Add
send_columnsexamples for images, fix rustsend_columnshandling of listarrays #7172
📚 Docs
- New code snippet for Transform3D demonstrating an animated hierarchy #6851
- Implement codegen of doclinks #6850
- Add example for different data per timeline on
Events and Timelinesdoc page #6912 - Add troubleshooting section to pip install issues with outdated pip version #6956
- Clarify in docs when ViewCoordinate is picked up by a 3D view #7034
- CLI manual #7149
🖼 UI improvements
- Display compaction information in the recording UI #6859
- Use markdown for the view help widget #6878
- Improve navigation between entity and data results in the selection panel #6871
- Add support for visible time range to the dataframe view #6869
- Make clamped component data distinguishable in the "latest-at" table #6894
- Scroll dataframe view to focused item #6908
- Add an explicit "mode" view property to the dataframe view #6927
- Introduce a "Selectable Toggle" widget and use it for the 3D view's camera kind #7064
- Improve entity stats when hovered #7074
- Update the UI colors to use our (blueish) ramp instead of pure grays #7075
- Query editor for the dataframe view #7071
- Better ui for
Blobs, especially those representing images #7128 - Add button for copying and saving images #7156
🕸️ Web
✨ Other enhancement
- Support decoding multiplexed RRD streams #7091
- Query-time clears (latest-at only) #6586
- Introduce
ChunkStore::drop_entity_path#6588 - Implement
Chunk::cell#6875 - Implement
Chunk::iter_indices#6877 - Drop, rather than clear, removed blueprint entities #7120
- Implement support for
RangeQueryOptions::include_extended_bounds#7132
🧑💻 Dev-experience
- Introduce
Chunkcomponent-level helpers andUnitChunk#6990 - Vastly improved support for deserialized iteration #7024
- Improved CLI: support wildcard inputs for all relevant
rerun rrdsubcommands #7060 - Improved CLI: explicit CLI flags for compaction settings #7061
- Improved CLI: stdin streaming support #7092
- Improved CLI: stdout streaming support #7094
- Improved CLI: implement
rerun rrd filter#7095 - Add support for
rerun rrd filter --drop-entity#7185
🗣 Refactors
- Forward Rust (de-)serialization of transparent datatypes #6793
- CLI refactor: introduce
rerun rrd <compare|print|compact>subscommand #6861 - Remove legacy query engine and promises #7033
- Implement
RangeQueryOptionsdirectly withinRangeQuery#7131
📦 Dependencies
- Update to glam 0.28 & replace
macawwith forkre_math#6867
🤷 Other
- Fix linkchecker: proper allow-list of stackoverflow.com #6838
- Don't lint comments inside
[metadata]frontmatter #6903 - Add basic checklist to test different 3D transform types & transform hierarchy propagation #6968
0.17.0 - More Blueprint features and better notebooks - 2024-07-08
https://github.com/rerun-io/rerun/assets/49431240/1c75b816-7e3e-4882-9ee6-ba124c00d73c
📖 Release blogpost: https://rerun.io/blog/blueprint-overrides
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-17
✨ Overview & highlights
- 🟦 Blueprint component override & defaults, and visualizer override for all views
- Component defaults: Configure default component value for an entire view, used when no values are logged to the data store (using
rr.log()). - Component overrides: Specify a value to use regardless of the data-store & default values and use specified value instead. Can be set per view per entity.
- Visualizer overrides: Specify a visualizer to use for a given entity in a given view. Previously only available for scalar data in timeseries views, now available for all view kinds.
- All three are available from the (fully revamped) UI and the Python blueprint APIs.
- Everything that was editable per entity in a view now uses component overrides (e.g. camera plane distance, transform axis lengths, etc.)
- Tip: Tooltips for each component in the UI include a link to the docs now!
- Component defaults: Configure default component value for an entire view, used when no values are logged to the data store (using
- 🕸️ Improved notebook & website embedding support
- Now you can stream data from the notebook cell to the embedded viewer.
- Much improved support for having multiple viewers on the same web page.
- More configuration options have been added to control the visibility of the Menu bar, time controls, etc.
- Note: Use
pip install "rerun-sdk[notebook]"to include the better notebook support. This includes the newrerun-notebookpackage, which is used internally by [rerun-sdk].
- 🧑🏫 New Examples
- 🛠️ Improved the logging API with many new and updated archetypes and components (see migration guide)
- 🖼️
TensorViewis now fully configurable from blueprint code - 🎛️ Revamped selection panel UI
- 🚚 Much work is being done under-the-hood to migrate our data-store to "chunks" (aka units of batched data). More on this in the next release!
- SDKs are already using chunks to transport data to the viewer, performance characteristics may have changed but should be largely the same for the moment.
⚠️ Breaking changes
HalfSizes2Dhas been renamed toHalfSize2DHalfSizes3Dhas been renamed toHalfSize3D.rrdfiles from older versions won't load in Rerun 0.17
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-17
🔎 Details
🪵 Log API
- Introduce chunks and use them on the client side:
- Remove unused scalar scattering component #6471
- Introduce
ImagePlaneDistanceComponent #6505 - Introduce new archetype for
Axes3D#6510 - Expose
Colormapcomponent forDepthImage, depth image colormap now used outside of reprojection #6549 TimeSeriesAggregationcan now be set perSeriesLine(and as blueprint default per View) #6558- Expose
FillRatiocomponent to configureDepthImageback-projection radius scaling #6566 - Expose image opacity component #6635
- Make draw order editable & solve 2D flickering issues, add draw order to arrow2d archetype #6644
- Remove
Axes3Darchetype and addaxis_lengthtoTransform3D#6676 - Expose UI point radii to logging & blueprint, remove old default radius settings in favor of blueprint default components #6678
- Rename
HalfSizes2D/3DtoHalfSize2D/3D#6768
🌊 C++ API
- Add docs on how to install C++ SDK with conda-forge packages #6381 (thanks @traversaro!)
🐍 Python API
- Make barchart legend settable via blueprint #6514
- Expose tensor slice selection to blueprint #6590
- Use literal unions in Python enum codegen #6408
- Allow hiding top panel via blueprint #6409
- Improve the visibility of Python public APIs to type checkers #6462
- Expose
Interactivecomponent #6542 - Python components now implement the
ComponentBatchLikeinterface #6543 - Allow streaming to the viewer from the cell where it's created #6640
- Introduce new Python API for setting overrides #6650
- Publish
rerun_notebookin CI #6641
🦀 Rust API
- All components implement the
Defaulttrait now in Rust #6458 - Codegen
DerefMut&Dereffor all trivial components #6470
🪳 Bug fixes
- Allow removing blueprint entries even when they are invisible #6503
- Fix wrong depth projection value on picking when depth meter was edited #6551
- Always enable OpenGL fallback backend, fix
--renderer=glonly working together withWGPU_BACKENDenv-var #6582 - Improve container selection panel UI #6711
- Fix annotation context labels not showing in views #6742
- Quiet the 'not a mono-batch' log spam when selecting keypoint with a batch class-id #6359
- Fix incorrect label placement for 3D arrows with origins #6779
- Don't pass RRD paths to other data-loaders #6617
🌁 Viewer improvements
- Introduce a mechanism for blueprint-provided defaults #6537
- Allow resetting view property components from GUI for all generically implemented property UI #6417
- Don't log "SDK client connected" messages until after we have confirmed it's a client #6456
- Background color settings uses new generic UI now #6480
- TimeSeries y-range is now tightly synced with plot view & uses new generic UI #6485
- Remove option to enable/disable depth projection from UI #6550
- Expose tensor colormap/gamma/filter/scaling to blueprint #6585
- Handle static text messages in TextLogView gracefully, handle overrides #6712
- Multiple instances of points/arrows/boxes with single label display label now at the center #6741
🧑🏫 Examples
- Add the OCR example #6560 (thanks @andreasnaoum!)
- Add the Vista example #6664 (thanks @roym899!)
- Add the Stereo Vision SLAM example #6669 (thanks @02alexander!)
- Add 2D neural field notebook example #6775 (thanks @roym899!)
- Update the nuScenes example to use blueprint overrides and defaults #6783
- Update the plots example to use blueprint overrides #6781
📚 Docs
- Add links to our docs in component tooltips #6482
- Show the first line of the docs when hovering a component name #6609
- Improve docs for components #6621
- Add a "Visualizers and Overrides" concept page #6679
- Better document limited effect of
DepthMeter&FillRatioin 2D views #6745 - Update troubleshooting guide with graphics driver updating advice #6756
- Update Pixi link to their new website #6688 (thanks @esteve!)
- Use "N-dimensional" instead of "rank-N" in docstrings and error messages #6797
🖼 UI improvements
- Update the UI for time series view properties using list item #6390
- Fix welcome screen header jumping during load #6389
- Add support for exact width to
PropertyContent#6325 - Migrate to
list_time2: - Improve the colormap drop down menu #6401
- Reduce height of top and bottom panels #6397
- Allow hiding all TimePanel/BlueprintPanel/SelectionPanel #6407
- Remove the ability to display multiple tensors in a single space view #6392
- Smooth scrolling in 2D space views #6422
- Improve welcome screen for small screens #6421
- Use egui's
UiStackto implement full span widgets #6491 - Use
list_itemfor the component list inInstancePath::data_ui#6309 - Allow editing visual bounds from UI #6492
- Allow manually setting full span scopes #6509
- Make object hover & selection colors brighter and more pronounced #6596
- Show outline around hovered/selected tiles in viewport #6597
- Unified visualizer & override UI, enabled on all entities #6599
- Introduce visualizer blueprint query stack UI #6605
- Reorganize Selection Panel #6637
- Rewrite the
ui.large_collapsing_headerintore_ui::SectionCollapsingHeaderusingre_ui::ListItem#6657 - Move entity filter "edit" button to a section header icon #6662
- Add help to several sections in the Selection Panel #6668
- Introduce
ButtonContentand use it in the selection panel #6720
🕸️ Web
- Allow overriding app blueprint from web #6419
- Add fullscreen mode to web viewer #6461
- Fix rerun-web canvas size #6511
- JS: Make LogChannel public #6529
- New notebook API #6573
- Add width/height properties to web viewer #6636
- Do not read query in embedded web viewer #6515
🗣 Refactors
- Generic view property building, applied to
TimeSeriesView'sPlotLegend#6400 - Extracted several
re_viewerparts into standalone crates:re_viewport_blueprint#6405,re_context_menu#6428,re_blueprint_tree#6427, andre_selection_panel#6431
📦 Dependencies
- Update to egui 0.28.1 #6752, #6785
- Update ewebsock to 0.6.0 #6394
- Update to
wgpu 0.20, fixing crashes with some Linux setups #6171
0.16.1 - Bug fix - 2024-05-29
- Don't log warnings when unknown clients connect over TCP #6368
- Fix not being able to set time series' Y axis ranges from the UI #6384
- Fix error when logging segmentation image #6449
- Fix broken example source links in Viewer example list #6451
0.16.0 - First configurable views - 2024-05-16
https://github.com/rerun-io/rerun/assets/3312232/475468bd-e012-4837-b2b4-b47fa9791e2c
✨ Overview & highlights
- 🟦 Customize views in code: We started exposing some view properties in the blueprint!
- 📋 Included are:
- Visible time ranges
- check this new how-to guide & example that demonstrates this with plots
- Time Series legend & y-axis configuration
- 2D & 3D View background color
- 2D View bounds
- Visible time ranges
- 📚 learn more on the new view blueprint doc pages
- 🚀 …more to come in the future!
- 📋 Included are:
- 🕰️ Deprecated
timelessin favor of newstaticlogging- Except for the name change, they behave similarly in most use cases. Unlike with timeless, static data…
- …can't be mixed with non-static data on the same component.
- …will override previous static data and not keep old data in memory.
- Check out our migration guide.
- Except for the name change, they behave similarly in most use cases. Unlike with timeless, static data…
- 🖼️ 2D View's pan & zoom got redone, it's now a free canvas without any scroll bar
- 🤖 Added an example to use Rerun with ROS2.
As always there's a lot going on under the hood:
- 🚚 We streamlined our development processes & CI and examples.
- 🕸️ Our web page is about to switch from React to Svelte, making it a lot snappier!
- 💿 Instance key removal in 0.15.0 opened the door to major simplifications in our data store, this will make it easier for us to improve performance and implement data streaming.
- 🤗 We're making it easier to work with HuggingFace's Gradio API. Stay tuned! Most things for this already landed in this release and we'll soon build more direct support on top.
🔎 Details
🪵 Log API
- Sunset
MeshProperties, introduceTriangleIndicesand friends #6169 - Add a new javascript API for submitting an RRD that is stored directly as bytes #6189
- Keep Rerun viewer from dying on ctrl-c by setting
sidon unix systems #6260 - Add a new CLI option / spawn options to hide the welcome screen #6262
- Make sure all log messages are sent when using
.serve()#6335
🌊 C++ API
- Static-aware C & C++ SDKs #5537
- Support shared library building on Windows #6053 (thanks @traversaro!)
🐍 Python API
- Static-aware Python SDK #5536
- Make rerun-py use an embedded rerun-cli executable #5996
- Convert Python examples to proper packages #5966
- Configurable background color from Python code (POC for space view properties from code) #6068
- Codegen for space view Python blueprint classes #6100
- Allow setting view visibility from blueprint API #6108
- Expose
PlotLegendandScalarAxis(axis_y) properties onTimeSeriesViewblueprint #6114 - Change background of 2D space views from code and/or UI #6116
- Set visual 2D bounds from code #6127
- Make visual time range on views a view property that can be set from Python code #6164
- Introduce new mechanism to incrementally drain from a memory_recording #6187
- Work around some issues where recording streams leaking context when used with generators #6240
- Introduce a new BinaryStreamSink that allows reading a stream of encoded bytes #6242
- Improve new time_ranges property Python API & add snippet for time series view, explaining all its options #6221
- Fix possible hang when using torch.multiprocessing #6271
- Add code examples & screenshots for all blueprint view types #6304
- Set a minimum version of pillow in
rerun_py/pyproject.toml#6327 - Respect the
RERUN_STRICTenvironment variable if not specified inrr.init#6341
🦀 Rust API
- Static-aware Rust SDK #5540
- Remove need for tokio runtime for supporting
serve#6043 - Add
TextDocument::from_markdownconstructor #6109 - Document all public item in
re_types#6146 - Fix crash on
i32overflow during arrow serialization #6285 - Revamped
TimeInt#5534
🪳 Bug fixes
- Fix silently interpreting zero time range as latest-at query #6172
- Fix not being able to click suggestions in space origin selection dropdown #6200
- Fix bug in origin selection UI #6199
- Fix out-of-bounds crash in origin selection popup #6202
- Fix rare crash #6251
- Fix visual glitch when extending the time panel #6255
- Don't automatically fall back to automatic port if web socket port is already in use, only recommend using 0 instead #6296
🌁 Viewer improvements
- Request attention when Rerun Viewer is sent new recording in background #5780
- New data APIs 11: port all range-only views (plots, logs…) #5992
- New data APIs 12: port all spatial views #5993
- New data APIs 14: port everything that used to be uncached #6035
- Make visible time range UI aware of latest-at &
QueryRange#6176 - Visible time ranges are now specified per timeline, not per timeline type #6204
- Send TCP protocol header to ignore non-rerun clients #6253 (thanks @gurry!)
🚀 Performance improvements
- New data APIs 4: cached latest-at mono helpers everywhere #5606
- New data APIs 5: port data UIs to new APIs #5633
- New data APIs 9: cached range queries #5755
- New data APIs 16: introduce non-cacheable components #6037
- Remove instance keys and explicit splatting everywhere #6104
🧑🏫 Examples
- Update depth-guided stable diffusion example to diffusers 0.27.2 #5985 (thanks @roym899!)
- Add ROS 2 bridge example #6163 (thanks @roym899!)
- Add DROID dataset example #6149 (thanks @02alexander!)
- New example and tutorial showing how to create a live scrolling plot #6314
- Update the example in configure-viewer-through-code.md to use subclasses of
SpaceView#6092 (thanks @m-decoster!)
📚 Docs
- Update Python readme and add
py-wheelcommand #5912 - Update Python API links to getting-started and tutorial #5923 (thanks @Mxbonn!)
- Fix various links in Rust, Python and toml files #5986
- Improve type index pages, codegen now knows about doc categories #5978
- Generate doc pages for blueprint views #6121
- Clarify docs on GH release install & C++ source build, remove redundant rerun_cpp_sdk artifact #6144
- Documentation for archetype and views references each other #6319
🖼 UI improvements
- Update
egui_commonmark#5864 - Update UI for static components #6101
- Allow any pan/zoom in 2D spatial views #6089
ListItem2.0 (part 1): introduce content-genericListItemandLabelContentlegacy back-port #6161ListItem2.0 (part 2): introducePropertyContentfor two-column, property-like list items #6174ListItem2.0 (part 3):PropertyContentcolumn auto-sizing #6182ListItem2.0 (part 4): only allocate space for property action buttons when needed #6183ListItem2.0 (part 5): deploy to the Visualizers and Overrides UIs #6184ListItem2.0 (part 6): split full-span range management to a dedicated module #6211- Add button to equalize the size of the children of a container #6194
- Use thousands separators when formatting seconds #6212
- Add space view icons to various context menus #6235
- Migrate all full-span widgets to
re_ui::full_span#6248 - Improve error message when using an under-powered GPU #6252
- Improve the default UI when the welcome screen is hidden #6287
- Improve UI of various components in the selection panel #6297
🕸️ Web
- Rewrite
re_ws_commsto work withoutasync&tokioruntime #6005 - Fix: Preserve history state #6302
- Make it possible to open http-streamed RRDs in follow mode via JS API #6326
📈 Analytics
- Transmit url analytics correctly for rerun.io domains #6322
- Keep track of the RRD protocol version and display it where relevant #6324
🧑💻 Dev-experience
- New data APIs 6: cached archetype queries #5673
- Remove justfile & fully replace remaining commands with Pixi #5892
- Replace requirements-docs.txt with a Python doc Pixi environment #5909
- Update to Rust 1.76 #5908
- Remove all dev/ci requirements.txt and fully replace with Pixi #5939
- Markdown linter #6181
🗣 Refactors
re_web_viewer_serverno longer needs tokio, split out sync code path #6030- Replace hyper with tiny_http to serve http files for
servefunctionality #6042 - New data APIs 13: sunset legacy cache crate #5994
- New data APIs 15: one query crate to rule them all #6036
ListItem2.0 (part 0):re_ui_examplerefactor #6148- Fix:
re_sdkno longer depends onrustls#6210 - Reduce number of unwrap calls and make clippy warning for it opt-out per crate #6311 (thanks @Artxiom!)
📦 Dependencies
- Wgpu update (0.19.3 -> 0.19.4) #6044
🤷 Other
- Static data 1: static-aware datastore, caches and queries #5535
- New data APIs 0:
ClampedZipiterator machinery #5573 - New data APIs 1: uncached latest-at queries #5574
- New data APIs 2: cached latest-at queries #5581
- New data APIs 3: Send/Sync/'static
Component, once and for all #5605 - New data APIs 7:
RangeZipiterator machinery #5679 - New data APIs 8: uncached range queries #5687
- New data APIs 10: stats and debug tools for new caches #5990
- Validate the blueprint schema when we try to activate a blueprint sent from SDK #6283
0.15.1 - Bug fix for notebooks - 2024-04-11
- Fix timeout in notebooks by making the
app_urlcorrectly point toapp.rerun.io#5877 - CMake: Allow to call
find_package(rerun_sdk)two or more times #5886 (thanks @traversaro!)
0.15.0 - Blueprints from Python - 2024-04-09
The biggest news is the ability to create a blueprint via the Python logging API. Check out our associated blog post for more information.
import rerun.blueprint as rrb
blueprint = rrb.Blueprint(
rrb.Vertical(
rrb.Spatial3DView(name="3D", origin="/"),
rrb.Horizontal(
rrb.TextDocumentView(name="README", origin="/description"),
rrb.Spatial2DView(name="Camera", origin="/camera/image"),
rrb.TimeSeriesView(origin="/plot"),
),
row_shares=[3, 2],
)
rrb.BlueprintPanel(expanded=True),
rrb.SelectionPanel(expanded=False),
rrb.TimePanel(expanded=False),
)
The blueprint can then be sent to the Viewer with
rr.send_blueprint(blueprint)
Or stored to a file, and then later opened in the viewer:
blueprint.save("my_nice_dashboard.rbl")
In this case, the results looks something like this:
Blueprints are currently only supported in the Python API, with C++ and Rust support coming later.
✨ Overview & highlights
- 🟦 Configure the layout and content of space views from Python (docs)
- 🖧 More powerful and flexible data loaders (docs)
- 🖵 Improved UI for managing recordings and applications
- 💾 Save and load blueprint files in the viewer
- 🎨 Configurable background color for 3D Space Views #5443
- 💪 Linux ARM64 support #5489 #5503 #5511
- 🖼️ Show examples in the welcome page
- 🖱️ Improve context-menu when right-clicking items in the blueprint panel and streams tree
- ❌ Remove
InstanceKeyfrom our logging APIs #5395 (migration guide) - ❌ Remove groups from blueprints panel #5326
🔎 Details
🪵 Log API
- Replace
MarkerShapewith code-generatedenumtype #5336 - Key-less data model 1: scrap
InstanceKeyfrom public logging APIs #5395 - Remove the check for
WrongNumberOfInstances#5399 - Control panel expanded state via blueprint APIs #5484
- Remove deprecated
TimeSeriesScalar#5604 - Customizable data loaders #5327 #5328 #5330 #5337 #5351 #5355 #5379 #5361 #5388
🌊 C++ API
- Fix Arrow libraries from download & build not being found in some cases #5366
- CMake: Add
RERUN_INSTALL_RERUN_Coption to disable installation ofrerun_clibrary #5374 (thanks @traversaro!) - CMake: Fix
installnot finding externalarrowfor dynamic linking #5375 (thanks @traversaro!) - Make
pinhole.hpprobust againstmin/maxpreprocessor macros (typically fromwindows.h) #5432 - Build C++ SDK for Linux ARM64 #5489
- Generate fewer
.cppfiles: Inline forward serialization of transparent components to their respective datatypes #5544 - Fix
RERUN_C_BUILD_ARTIFACTpath value ifCARGO_BUILD_TARGETenv variable is set #5547 (thanks @traversaro!)
🐍 Python API
- All Python components that wrap a
boolnow implement__bool__#5400 - Add the remaining space views and name them consistently #5498
- Add option to include blueprint in an
.rrdwhen calling.save(…)#5572 - Allow naming space view containers #5626
🦀 Rust API
🪳 Bug fixes
- Sort text log space view on currently selected timeline #5348
- Fix parents of queried paths getting visualized, fix 2D objects not showing at all in 3D if their camera parent is not included #5424
- Fix: allow creating 3D space views for pinhole-only 3D scenes #5563
- Fix depth cloud bounding boxes for depth cloud visualizations with transforms #5578
- Fix image view not handling images with extra leading dimensions of size
1#5579 - Fix web viewer crash on invalid url parameter #5631
- Be consistent in how items are removed from selection #5643
- Fix layout issue on welcome screen for narrow window, triggering debug assertion #5650
- Fix broken 2D space view heuristics in Python Notebooks #5674
- Avoid a hang on Linux by always create the renderer, even when we have no store_view #5724
- Fix crash/freeze when zooming out too far in a plot #5737
- Fix
draw_ordernot working #5794
🌁 Viewer improvements
- Remove groups from blueprints panel #5326
- Improved tracking of which space views were generated by a heuristic #5419
- Configurable background color for 3D Space Views #5443
- Save recordings from web viewer #5488
- Support loading
.rblblueprint files #5513 - Tensor space view can now show images #5567
- Entity path query now shows simple statistics and warns if nothing is displayed #5693
- Go back to example page with browser Back-button #5750
- On Web, implement navigating back/forward with mouse buttons #5792
- Support displaying 1D tensors #5837
🧑🏫 Examples
- New
incremental_loggingexample #5462 - New standalone example showing blueprint configuration of some stock #5603
- New example visualizing KISS-ICP #5546 (thanks @02alexander!)
- Remove car example #5576
- Add blueprint to
arkit_scenesexample, leveraging the viewer's ability to re-project 3D->2D #5510 - Add blueprint to
nuscenesexample #5556 - Add blueprint to Face Tracking example #5616
- Add blueprint to Gesture Detection example #5619
- Add blueprint to Human Pose Tracking example #5612
- Add blueprint to Live Camera Edge Detection example #5613
- Add blueprint to LLM Embedding Ner example #5614
- Add blueprint to Objectron example #5617
- Add blueprint to Signed Distance Fields example #5635
- Add blueprint to the RGBD example #5623
- ARFlow Example Page #5320 (thanks @YiqinZhao!)
- Fix controlnet example for current
controlnetpackage version and add blueprint #5634 - Fix RRT-Star example not showing up on website or rerun.io/viewer #5628
- Fix not logging 3D gesture z component correctly in Gesture Detection example #5630 (thanks @andreasnaoum!)
- Updated READMEs for examples: LLM Embedding-Based Named Entity Recognition, nuScenes, Objectron, Open Photogrammetry Format, Raw Mesh #5653 (thanks @andreasnaoum!)
- Updated READMEs for the examples - Batch 1 #5620 (thanks @andreasnaoum!)
📚 Docs
- Docs: improve discoverability of image compression #5675
- Improve getting started doc section #5689
- Update web viewer links #5738
- Update docs with guides and tutorials for blueprint #5641
- Update README and description of
arkit_scenesexample #5711 (thanks @BirgerMoell!) - Improve readme of
depth_guided_stable_diffusionexample #5593 (thanks @BirgerMoell!)
🖼 UI improvements
- New timezone option: seconds since unix epoch #5450 (thanks @murgeljm!)
- Always enable entity path filter editor #5331
- Add icons for entities and components, and use them everywhere #5318
- Add support for context menu for viewport tab title and selected container's children list #5321
- Fix
ListItemindentation so icons are properly aligned #5340 - Blueprint tree always starts at the origin now, "projected" paths are called out explicitly #5342
- Merge example page into welcome screen #5329
ListItem's collapsing triangle is now styled consistently with the rest of the item #5354- Add helpers to enable stable and controllable collapsed state in hierarchical lists #5362
- Different icon for empty entity paths #5338
- Merge quick start guides #5378
- Update welcome screen panel illustrations #5394
- More context menu in blueprint and streams tree:
- Automatically expand and scroll the blueprint tree when focusing on an item #5482
- Save blueprint to file #5491
- Add new design guidelines for title casing etc #5501
- Automatically expand and scroll the streams tree when focusing on an item #5494
- Reduce the height of the tab bars and side panel titles #5609
- Support toggling item visibility on touch screens #5624
- Select active recording if nothing else is selected #5627
- Enable selecting data sources and blueprints and recordings in them #5646
- Warn user when a software rasterizer is used #5655
- Improve spacing and alignment of menus #5680
- Simplify Welcome Screen and use card-based layout for examples #5699
- Make selection history global instead of per recordings #5739
- Improve formatting of numbers on plot Y axis #5753
- Show all loaded applications in recordings panel #5766
- Wider selection panel by default #5777
- Tighter UI for tensor, annotation-context, view coordinates, recording #5782
- Always show welcome screen, but sometimes fade it in #5787
🕸️ Web
- Support loading multiple recordings and/or blueprints in web-viewer #5548
- Build release
.wasmwith debug symbols #5708
🧑💻 Dev-experience
- Build wheels for Linux ARM64 #5511
📦 Dependencies
🤷 Other
- Build CLI for Linux ARM64 #5503
- Allow hiding/showing entity subtrees under shown/hidden parent tree #5508
- Introduce basic support for
$originsubstitution inEntityPathFilter#5517 - Introduce
rr.notebook_show()to simplify notebook experience #5715 - Also remove nested inclusions when removing a subtree #5720
- Prevent gratuitous blueprint saves by not garbage collecting when the blueprint hasn't changed #5793
- Refactor
SelectionusingIndexMapand make it more encapsulated #5569
0.14.1 - C++ build artifact fix - 2024-02-29
This release is identical to 0.14.0 and merely fixes an issue in the build artifacts for C++: 0.14.0 only contained binaries for Linux x64, this release has the full set for Linux x64, Windows x64, Mac x64 & Mac Arm64.
0.14.0 - "Unlimited" point clouds & lines, quality of life improvements, bugfixes - 2024-02-28
https://github.com/rerun-io/rerun/assets/1220815/beb50081-2dff-4535-b133-4dc4a5a24be0
✨ Overview & highlights
Originally, we planned to do only a bugfix release, but we got an unexpected amount of goodies amassed already. We're still ramping up for programmable blueprints (soon!), but meanwhile enjoy these improvements in 0.14!
- 📈 Limits for number of points & lines per space view lifted.
- 🖱️ Added context menu (right-click) actions for items on the Blueprint panel. (Only getting started on this, more actions in future releases!)
- 🚀 Speed improvements for scenes with many transforms and large point clouds.
- 🔺 Built-in STL mesh support.
- 🎥 First-person camera.
- 🐛 Fixes regressions in Space View spawn heuristics from 0.13, and many more bugfixes.
- 🧑🏫 Two new examples: Gesture Recognition & RRT* Pathfinding
🔎 Details
🪵 Log API
- Add helpers for perspective cameras #5238
- Fix
spawnstarting the Viewer even if logging is disabled #5284
🐍 Python API
- Add missing Python docs for
disable_timeline&reset_time#5269 - Fix missing error message when passing
from_parent+ Rerun transform type torerun.Transform3D#5270
🦀 Rust API
- Fix using
reruncrate as a dependency on CI #5170
🪳 Bug fixes
- Enforce the rule: heuristics should never add a new view that would be completely covered by an existing view #5164
- Remove log spam when quickly resizing the Viewer #5189
- Fix incorrect minimum supported Rust version mentioned in docs and examples #5195
- Less restrictive visualizability constraints of 2D entities, improved space view generation heuristics #5188
- Fix ugly UI for some Arrow data #5235
- Fix missing redraw upon resetting blueprint #5262
- Fix non-deterministic redundancy check for space view spawning heuristic #5266
- Fix resetting vertical axis when using non-uniform zoom on Time Series #5287
🌁 Viewer improvements
- Clear all blueprints in RAM and on disk when clicking "Reset Viewer" #5199
- Improve the orbit eye to always maintain an up-axis #5193
- Focus on current bounding-box when resetting camera-eye on a 3D space view (double click it) #5209
- Add STL mesh support #5244
- Add first person 3D eye-camera #5249
🚀 Performance improvements
- More robust handling of maximum texture size for non-color data, slight perf improvements for large point clouds #5229
- Cached transforms & disconnected spaces for faster scenes with many transforms #5221
- Optimized cpu time for 3D point clouds (once again!) #5273
- Only compute store/caching stats when the memory panel is opened #5274
- Increase the max WebSocket frame limit for the native client #5282
🧑🏫 Examples
- Add Gesture Recognition example #5241 (thanks @andreasnaoum!)
- Add example visualizing RRT* #5214 (thanks @02alexander!)
📚 Docs
- Fix broken link in the installing-viewer documentation #5236 (thanks @BirgerMoell!)
🖼 UI improvements
- Context Menu 1: Basic scaffolding and simple actions #5163
- Context menu 2: add support for multiple selection #5205
- Context menu 3: add "Move to new container" context menu action #5210
- Context menu 4: add "Clone space view" action #5265
- Context menu 5: refactor into multiple files #5289
- Clickable path parts in selection-panel #5220
- Don't show the blueprint section when selecting recordings #5245
- Use the same icon for recordings everywhere #5246
🎨 Renderer improvements
- Lift point cloud size limitations #5192
- Lift line vertex/strip count limitations #5207
- Fix banding artifacts of 3D space view's skybox #5279
📦 Dependencies
- Bump maturin to 1.14.0 #5197
- Update
tungsteniteto remove RUSTSEC warning #5200 - Lock the web-sys version to 0.3.67 #5211
0.13.0 - Fast time series, improved layout editing & UI overrides - 2024-02-12
✨ Overview & highlights
This release focuses on scalar time series -- both from a performance and UI perspectives. Check out our associated blog post for more information.
-
📈 Rerun can now visualize many time series in the kHz range in real-time:
- The new query cache optimizes data access, improving query performance by 20-50x
- Sub-pixel aggregation prevents unnecessary overdraw when rendering plots, improving rendering time by 30-120x
- Points, lines, arrows and boxes all benefit from query caching too to a lesser extent, yielding 2-5x performance improvements
-
🖼 UI overrides:
- The new
Scalar,SeriesLine&SeriesPointarchetypes allow for customizing plots both at logging and visualization time - Customize marker shapes, marker sizes, etc from code or directly through the UI
- Specify axis labels, lock axes, etc from code or directly through the UI
- The new
-
🌁 Viewer:
- The number of compute threads can now be controlled using the
--threads/-jflag - Added support YUY2-encoded images (thanks @oxkitsune!)
- Space views can now be drag-and-dropped directly from the blueprint tree
- Scenes with 100+ entities are now up to 5x faster.
- The number of compute threads can now be controlled using the
-
🚚 New Space View and Container creation workflow:
- When selected, containers have a children list in the Selection Panel, where new Space Views and Containers may be added.
- New modal dialog to add Space Views and Containers.
- The same dialog is also available from the
+button of the Blueprint tree UI. - The Space View's origin can now be edited in the Selection Panel.
- The container hierarchy can now be cleaned up with the new
Simplify Hierarchybutton in the Selection Panel for containers.
-
🦀 The Rust SDK now exposes an optional integration with the
mintcrate -
🕸️ The web UI SDK now supports loading multiple
.rrdURLs -
🔺 The web viewer now renders using WebGPU by default (when available), leading to lower memory usage on Chrome. You can override this behavior using
?renderer=webgl/?renderer=webgpuurl parameter, or restart with WebGL/WebGPU respectively from the options menu.
As well as a lot of miscellaneous bug fixes and usability improvements: see details below.
Check out our migration guide.
🔎 Details
🪵 Log API
- Mark TimeSeriesScalar as deprecated in all SDKs and documentation #5102
🌊 C++ API
- Document that in C++ PinholeProjection::from_mat3x3 is column major #4843
- Include LICENSE files into C++ SDK Assets #4870 (thanks @rgolovanov!)
- Fix C++ Arrow build flag forwarding #4921 (thanks @rgolovanov!)
🦀 Rust API
- Add integration with the
mintcrate #4753
🐍 Python API
- Fix support for compressing mono images by respecting mode to determine depth #4847
🪳 Bug fixes
- External loader: don't do process IO on compute thread-pool #4942
- Fix a Visible Time Range UI issue where the summary string would display the wrong data range #5034
- Clear empty containers after tile drag-and-drop #5044
- Allow for very large meshes & plots by always picking the largest available GPU buffer size #5053
- Fix forever repaint of big scenes #5071
- Fix
RERUN_FLUSH_NUM_BYTESand data size estimations #5086 - Make
rectangle_fs.wgslcompile on chrome despite angle/mesa bug (#3931) #5074
🌁 Viewer improvements
- Introduce Scalar, SeriesLine, and SeriesPoint archetypes with their own visualizers #4875
- Support modifying the plot style by introducing a generic framework for overriding components #4914
- Introduce a new blueprint archetype for AxisY configuration in a plot #5028
- Improve the selection/hover behavior for plots #5096
- Click a spatial space view background to select the space view itself #4796
- Double-clicking an entity in the blueprint & time panels focuses the 3D camera on it #4799
- When loading a .ply file, warn about ignored properties #4934
- Make it easier to position 3D eye-camera center #4943
- Include tessellation and rendering in CPU time shown in top bar #4951
- Allow selection of entities directly in the plot space view #4959
- Texture support for raw
Mesh3Dlogging #4894
🚀 Performance improvements
- Add
--threads/-jto control number of compute threads #5021 - Introduce the query cache:
- Primary caching 3: bare-bone latest-at caching #4659
- Primary caching 4: runtime toggle support #4680
- Primary caching 5: 2D & 3D point clouds #4681
- Primary caching 6: TextLogs & TimeSeries #4698
- Primary caching 7: Always expose the data time in query responses #4711
- Primary caching 8: implement latest-at data-time cache entry deduplication #4712
- Primary caching 9: timeless latest-at support #4721
- Primary caching 10: latest-at cache invalidation #4726
- Primary caching 11: cache stats and integration with memory panel #4773
- Primary caching 12: bare-bone range support #4784
- Primary caching 13: stats & memory panel integration for range queries #4785
- Primary caching 14: don't bake
LatestAt(T-1)results into low-level range queries #4793 - Primary caching 15: range read performance optimization #4800
- Primary caching 16: context-free range semantics #4851
- Primary caching 17: timeless range #4852
- Primary caching 18: range invalidation (ENABLED BY DEFAULT 🎊) #4853
- Primary caching 19 (final): make cache globals non-static #4856
- Integrate query caching with more primitives:
- Configurable dynamic plot aggregation based on zoom-level #4865
- Improved automatic view creation heuristic, major speedup for scenes with many entities #4874
- Optimize point clouds #4932
🧑🏫 Examples
- Update all examples that use
TimeSeriesScalarto useScalarinstead #5042
📚 Docs
- Improve documentation of the
Cleararchetype #4760 DisconnectedSpacenow only applies to spatial space views #4935- Fill gaps in image encoding documentation, fix how Python documents union variants #4988
🖼 UI improvements
- Improve timeseries Space Views:
- Introduce a new component for MarkerShape and use it in SeriesPoint #5004
- Introduce a new StrokeWidth component and use it for SeriesLine #5025
- Break up plot charts when there's a
Clear#4957 - Only show the LegacyVisualizer if a user logs with TimeSeriesScalar archetype #5023
- Fix lagging time cursor when panning a time series plot #4972
- New Space View and Container creation workflow:
- Use the "Add space view/container" modal for the
+button of the blueprint tree #5012 - Add support for removing container children from the selection panel #4930
- Add support for full span highlighting to modal and use it in the "Add space view or container" modal #4822
- Remove the "+" icon from the "Add SV/Container" modal and close on click #4927
- New empty space view defaults to uncollapsed in blueprint tree #4982
- Do not allow adding Horizontal/Vertical containers inside of containers with the same type #5091
- Use the "Add space view/container" modal for the
- Selection improvements:
- Add support for drag-and-drop in blueprint tree #4910
- Add support for editing a space view's space origin #4848
- Add Help and Discord to command palette #4752
- Syntax highlighting of entity paths and instance paths #4803
- Update container (and a couple other) icons #4814
- Make space view names optional and subdue placeholder view label in the UI #4682
- Show download sizes of in the example page #4841
- Style container's label as unnamed #4975
- Fix space view cloning to also copy entity properties (visible time range, etc.) #4978
- Improve how the root container is displayed and handled in the blueprint tree #4989
- Improve the UI for the entity query #5022
- Don't show the Blueprint header when on the welcome screen #5046
- Move Visible Time Range higher in the Selection Panel #5036
- Clean up time range UI #5089
- Improve preview UI for Component data #5093
- Paint closest labels on top of labels further away #5124
🕸️ Web
- Web: Support multiple
.rrdURLs #4740 - Unify
web_viewer/index.htmlandindex_bundled.html#4720 - Allow forcing WebGPU/WebGL on the web player, new command line argument to force graphics backend #4981
🎨 Renderer improvements
- Update to wgpu 0.19 and latest
eguitrunk #4885 - Support YUY2-encoded images #4877 (thanks @oxkitsune!)
🧑💻 Dev-experience
- Default to DEBUG log level in debug builds #4749
- New debug option to show an actual timeline for the Blueprint #4609
- Primary cache: basic debug tools via command palette #4948
🗣 Refactors
- Migrate from
egui_Tile::TileIdto proper blueprint IDs inViewportBlueprintAPI #4900
📦 Dependencies
- Remove
egui_plotas dependency fromre_sdk#5099 - Update to egui 0.25 and winit 0.29 #4732
- Prune dependencies from
rerunandre_sdk#4824 - Relax pyarrow dependency to
>=14.0.2#5054 - Update egui_tiles to 0.7.2 #5107
🤷 Other
🤷 Other
- Add
rerun --serveand improve--help#4834 rerun print: print just summary, unless given--verbose#5079
0.12.1 - Data loader bug fixes - 2024-01-17
🌊 C++ API
- Fix CMake trying to pick up test folders outside of the Rerun project/zip #4770 (thanks @KevinGliewe!)
- Document that
Mat3x3andMat4x4constructors are column major #4842
🦀 Rust API
🪳 Bug fixes
- Fix external data loader plugins on Windows #4840
- Reduce latency when loading data from external loaders #4797
- Always point to versioned manifest when building a versioned binary #4781
🧑💻 Dev-experience
- External loaders: remove warnings on duplicated binary on
$PATH#4833
🤷 Other
🤷 Other
- Include
Cargo.lockinrerun-clicrate #4750 - Replace
attydependency withstd::io::IsTerminal#4790 (thanks @kpreid!)
0.12.0 - Data Loaders, Container-editing, Python-3.12 - 2024-01-09
✨ Overview & highlights
- 🌁 The Rerun Viewer now supports a plugin system for creating arbitrary external data loaders.
- 🕸️ More built-in examples are now available in the viewer.
- 🐍 The Python SDK now works with Python-3.12.
- 📘 Blueprint containers can now be selected and modified.
- 🚀 In the native viewer, space views are now evaluated in parallel for improved performance.
- 🧑🏫 Support and guide for sharing a recording across multiple processes.
- 📁 Entity-paths allowed characters and escaping are now more file-like #4476:
- There is no need for " quotes around path parts, instead we now use \ to escape special characters.
- You need to escape any character that isn't alphabetical, numeric, ., -, or _.
🔎 Details
🌊 C++ API
- Exposing
recording_idin C and C++ SDKs #4384 - All C++ preprocessor macros start now with RR_ (instead of a mix of RR_ and RERUN_) #4371
- C++ & Python API: add helpers for constructing an entity path #4595
🐍 Python API
- Add
--stdout/-oto our CLI helper library #4544 - C++ & Python API: add helpers for constructing an entity path #4595
- Python SDK: introduce deferred garbage collection queue #4583
- Add support for Python 3.12 #4146
🦀 Rust API
- Exposing
recording_idin Rust SDK #4383 - Add
--stdout/-oto our CLI helper library #4544 - Document how to construct an entity path for the Rust logging API #4584
🪳 Bug fixes
- Bugfix: show labels on segmentation images with trivial dimensions #4368
- Datastore: don't eagerly sort in bucket split routine on ingestion path #4417
- Resolve spurious blueprint panel group collapsing #4548
- Fix rectangle that indicates the zoomed pixel area on hover being one pixel to small #4590
- Fix wrong RowId order of logged data #4658
- Make scroll-to-zoom a lot more responsive in 3D views #4668
- Fix heuristic object properties being broken in some cases / fix DepthMeter being ignored sometimes #4679
🌁 Viewer improvements
- Make Viewer contexts's render context reference non-mutable #4430
- The Rerun Viewer can now consume from stdin:
- Support for custom DataLoaders:
DataLoaders 0: utility for hierarchicalEntityPathfrom file path #4516DataLoaders 1: introduce, and migrate to,DataLoaders #4517DataLoaders 2: add text-basedDataLoader(.txt,.md) #4518DataLoaders 3: add 3D point cloudDataLoader(.ply) #4519DataLoaders 4: add generic folderDataLoader#4520DataLoaders 5: add support for external binaryDataLoaders (PATH) #4521DataLoaders 6: first-class support forIncompatible#4565DataLoaders 7: support for customDataLoaders #4566
- 3D->2D & 2D->3D selection visualizations stick now around on selection #4587
- The Viewer now supports segmentation images logged natively as floats #4585
- Fix incorrect bounding box calculation for camera view parts #4640
🚀 Performance improvements
🧑🏫 Examples
- Add nuScenes-based lidar examples #4407 (thanks @roym899!)
- Nightly builds #4505
- Add LLM token classification example #4541 (thanks @roym899!)
📚 Docs
- Shared recordings 3: add how-to guide #4385
- Document our crate organization in ARCHITECTURE.md #4458
🖼 UI improvements
- Plot legend visibility and position control (part 1): route
EntityPropertiestoSpaceViewClassmethods #4363 - Plot legend visibility and position control (part 2): minor UI spacing improvement #4364
- Reset accumulated bounding box when resetting camera #4369
- Plot legend visibility and position control (part 3): legend UI added for both timeseries and bar charts space views #4365
- Improve component data table UI in the selection panel #4370
- Add optional color component to BarChart archetype #4372
- Resolve unexpected view-partitioning by only bucket images when creating a new 2D view #4361
- Restore
egui_plotauto-bounds state after dragging the time cursor in timeseries space views #4270 - Make Space View containers selectable and editable #4403
- Improve selection and hover behavior of viewport's tabs #4424
- Improve the Selection Panel UI for components when a single item is selected #4416
- Show connection status in top bar #4443
- Add the possibility to add empty space views of all registered types #4467
- Add experimental Dataframe Space View #4468
- Show e2e latency in metric UI in top panel #4502
- Show leading slash when formatting entity paths #4537
- Improve entity size stats: include whole subtree #4542
- Add support for modal Windows to
re_uiand use it for the Space View entity picker #4577 - Show entity path parts (entity "folder" names) unescaped in UI #4603
- Improve Rerun Menu with link to Rerun Discord #4661
- Introduce container icons and update space views and UI icons #4663
- Initial support for manually adding container and space view in the hierarchy #4616
- Change modal position to a fixed vertical distance from the top of the window #4700
🕸️ Web
- Load examples manifest via HTTP #4391
- Remove builds and usage of
demo.rerun.io#4418 - Open all links in a new tab #4582
🎨 Renderer improvements
- Log wgpu adapter on web #4414
- Interior mutability for re_renderer's static resource pools (RenderPipeline/Shader/Layouts/etc.) #4421
- Make draw data creation no longer require a mutable re_renderer context #4422
- Move re_renderer examples to its own crate in order to make workspace level examples less confusing #4472
- Improved wgpu error handling, no more crashes through wgpu validation errors #4509
- Expose
wgpuprofiling scopes to puffin #4581 - Improve shading with two lights instead of one #4648
🧑💻 Dev-experience
- Fix not tracking wgsl file changes for web build #4374
- Auto format all the things #4373
- Refactor naming of
SpaceViewClassand changedTextSpaceViewname to "Text Log" #4386 - Local-first wheel publishing #4454
- Remove backtraces on error when running
rerunbinary #4746
🗣 Refactors
- Selection state is now fully double buffered and has interior mutability #4387
- Time control is now behind a RwLock, making recording config access non-mutable everywhere #4389
- Enable (selected) new cargo clippy lints #4404
- Add lint for builder pattern functions and deref impls to be marked
#[inline]#4435 - Pass viewer context always non-mutable #4438
- RenderContext usage cleanup #4446
- Integrate re_tensor_ops crate into re_space_view_tensor #4450
- Use TOML for example readme front-matter #4553
- Rename
StoreDbtoEntityDb,re_data_store->re_entity_db#4670 - Rename
re_arrow_storetore_data_store#4672
📦 Dependencies
🤷 Other
🤷 Other
- Use
:instead of.as the entity:component separator in paths #4471 - File-like entity paths #4476
- Make the new container blueprints the default behavior #4642
0.11.0 - C++ improvements & better Visible History - 2023-11-28
https://github.com/rerun-io/rerun/assets/1220815/9099b81d-626f-4974-87d7-0e974361a9f0
✨ Overview & highlights
- 🌊 C++ SDK improvements
- Reference docs are live!
- 2x-5x faster logging
- CMake install support and other CMake setup improvements
- Support for custom components & archetypes
- Zero copy logging for images, various API improvements
- 📈 Visual History -> Visual Time Range
- Time series plots can now limit its query to a range
- Much more powerful UI, allowing query ranges relative to time cursor
- 🕸️ The Viewer can now be easily embedded in your web apps via our npm package
- 🐍 ⚠️ Legacy Python API now removed, check the migration guide if you're not using
rr.logyet - 🦀 The new
StoreSubscribertrait allows to be notified of all changes in the datastore. This can be used to build custom indices and trigger systems, and serves as a foundation for upcoming performance improvements. Check out our example for more information.
⚠️ Known issues on Visual Time Range:
- Time cursor sometimes stops scrolling correctly on plot window
- Still doesn't work with transforms
Special thanks to @dvad & @dangush for contributing!
🔎 Details
🌊 C++ SDK
- Support std::chrono types for
set_timeonrerun::RecordingStream#4134 - Improve rerun_cpp readme & CMakeLists.txt #4126
- Replace the many parameters of
rerun::spawn/rerun::RecordingStream::spawnwith astruct#4149 - Make on TextLogLevel PascalCase (instead of SCREAMING CASE) to avoid clashes with preprocessor defines #4152
- Reduce rerun_c library size (by depending on fewer unnecessary crates) #4147
- Fix unnecessary includes in code generated headers #4132
- Doxygen documentation & many doc improvements #4191
- Rename
rerun::ComponentBatchtorerun::Collection(and related constructs) #4236 - Use
rerun::Collectionalmost everywhere we'd usestd::vectorbefore #4247 - Significantly improve C++ logging performance by using C FFI instead of Arrow IPC #4273
- Further improve C++ logging for many individual log calls by introducing a component type registry #4296
- All C++ datatypes & components now implement a new Loggable trait #4305
- Add C++ Custom Component example #4309
- Expose Rerun source/include dir in CMakeLists.txt (
RERUN_CPP_SOURCE_DIR) #4313 - Support cmake install #4326
- Export TensorBuffer & TensorDimension to Rerun namespace #4331
- C++ SDK sanity checks now header/source version against rerun_c binary version #4330
- Allow creating Image/Tensor/DepthImage/SegmentationImage directly from shape & pointer #4345
🐍 Python SDK
- Python: remove legacy APIs #4037
- Remove deprecated
rerun_demopackage #4293 - Python: don't catch
KeyboardInterruptandSystemExit#4333 (thanks @Dvad!)
🪳 Bug fixes
- Fix line & points (& depth clouds points) radii being unaffected by scale & projection via Pinhole #4199
- Fix inaccessible entities being incorrectly added to space view #4226
- Silence spammy blueprint warnings and validate blueprint on load #4303
- Fix markdown heading size #4178
🌁 Viewer improvements
- Add command to copy direct link to fully qualified URL #4165
- Implement recording/last-modified-at aware garbage collection #4183
🖼 UI improvements
- Improve Visible History to support more general time queries #4123
- Add support for Visible History to time series space views #4179
- Make Visible History UI more ergonomic and show inherited values #4222
- Display Visible History on timeline when the mouse hovers the UI #4259
- Improve the Selection Panel with better title, context, and Space View key properties #4324
🕸️ Web
- Put web viewer on
npm#4003 - Auto-switch port when getting AddrInUse error #4314 (thanks @dangush!)
- Generate per-PR web apps #4341
🧑💻 Dev-experience
- Simple logging benchmarks for C++ & Rust #4181
- New debug option to show the blueprint in the streams view #4189
- Use Pixi over setup scripts on CI + local dev #4302
- Run deploy docs jobs serially #4232
- fix Windows test config on main #4242
🗣 Refactors
StoreView->StoreSubscriber#4234DataStoreintroduceStoreEvents #4203DataStoreintroduceStoreViews #4205
0.10.1 - 2023-11-02
✨ Overview & highlights
This is a small release primarily to tie up some loose ends for our C++ SDK.
🌊 C++ SDK
- Avoid possible link/symbol errors but defaulting all OSes to static linking of Arrow #4101
- Fix compilation errors with C++20 #4098
- Improve C++ SDK perf 5x by respecting CMAKE_BUILD_TYPE and enabling mimalloc #4094
- Reduce amount of cmake log from building & downloading libArrow #4103
🧑💻 Dev-experience
0.10.0 - C++ SDK - 2023-10-30
Rerun is an easy-to-use visualization toolbox for computer vision and robotics.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli --locked - Online demo: https://app.rerun.io/version/0.10.0/
Release blog post: https://rerun.io/blog/cpp-sdk
✨ Overview & highlights
-
The C++ SDK is finally here!
#include <rerun.hpp> int main() { const auto rec = rerun::RecordingStream("rerun_example_points3d_simple"); rec.spawn().exit_on_failure(); rec.log("points", rerun::Points3D({{0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}})); } -
Add an integrated getting-started guide into the Viewer splash screen
-
Add a new and improved
spawnmethod in the Rust SDK -
We now publish pre-built binaries for each release at https://github.com/rerun-io/rerun/releases
🔎 Details
🌊 C++ SDK
- Has all the features of the Python and C++ SDK:s
🐍 Python SDK
- Add
RERUN_STRICTenvironment variable #3861 - Fix potential deadlock when saving to file after logging at the end of a Python program #3920
- Warn if no resolution provided to Pinhole #3923
- Python: remove unconditional sleep on
spawn#4010 - Support
pathlib.Pathforrr.save#4036 - Add
disable_timelinefunction #4068 - Support fast install of the Rerun Viewer with
cargo binstall rerun-clithanks tocargo binstall
🦀 Rust SDK
- Introduce
re_types_core#3878 - Fix crash when using
RecordingStream::set_thread_localon macOS #3929 - Add improved
spawnfunction #3996 #4031 - Redesign
clapintegration #3997 #4040 RecordingStream: introduceconnect_opts#4042- Add
disable_timelinefunction #4068
🪳 Bug fixes
- Fix grayscale images being too dark #3999
- Prevent badly sized tensors from crashing the Viewer #4005
- Fix selection history right-click menu not working #3819
🌁 Viewer improvements
- Replace
--strictflag withRERUN_PANIC_ON_WARNenv-var #3872 - Support NV12-encoded images #3541 (thanks @zrezke!)
🧑🏫 Examples
--max-framesupport for tracking examples #3835
📚 Docs
- Synchronize code examples and their screenshots #3954
- Improve docs for
TextDocumentexample #4008 - Fix typos in documentation and code comments #4061 (thanks @omahs!)
🖼 UI improvements
- Add basic support for in-app "Quick Start" guides #3813 #3912
- Add copy-button to markdown code blocks #3882
- Add warning in the Quick Start guides about Safari breaking Copy to Clipboard #3898
🎨 Renderer improvements
- Add easy way to dump out final wgsl shader #3947
🧑💻 Dev-experience
- Approve all workflow runs for a specific contributor PR #3876
- Make codegen I/O-free and agnostic to output location #3888
- Configure pytest to fail on warnings #3903
- Improve
taplooutput on failure #3909 - Automatically synchronize build.rerun.io & release assets #3945
- New helper script to run fast lints and pre-push hook that runs it #3949
- CI: Rerun CLI as a release asset #3959
- Add script to generate RRD vs. screenshots comparisons #3946
- Add a new build Environment option for CondaBuild to improve conda-built artifacts #4015
- Lock Python in CI to 3.11 #4033
- Changed
spawn()and thererunscript to call intorerun_bindings(12x startup time improvement) #4053
0.9.1 - Bug fixes and performance improvements - 2023-10-12
Rerun is an easy-to-use visualization toolbox for computer vision and robotics.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli - Online demo: https://app.rerun.io/version/0.9.1/
✨ Overview & highlights
- A bunch of bug fixes
- Fix big performance regression when hovering images
- The Rerun Viewer should now be visible to the system accessibility system
🐍 Python SDK
- Added support for PyTorch array to
Boxes2D'sarrayconvenience argument #3719 - Fix default stroke width handling in
log_line_strip_Xdandlog_obbs#3720 - Warn/raise when passing incompatible objects to
log#3727 - Refactor
rerun.AnyValuesto handleNoneinput more gracefully #3725 - Default
DisconnectedSpacesboolean totruein Python #3760
🦀 Rust SDK
- Fix return type of
entity_path!()andentity_path_vec!()on empty input #3734 (thanks @kpreid!) - Export
RecordingStreamError#3777
🪳 Bug fixes
- Fix bug when joining cleared optional components #3726
- Update
winitto 0.28.7 to fix UI glitch on macOS Sonoma #3763 - Show 1D-tensors as bar charts #3769
- Fix loading of
.objmesh files #3772 - Fix crash when loading huge image #3775
- Fix performance regression when viewing images and tensors #3767
🌁 Viewer improvements
- Turn on
AccessKitaccessibility integration #3732 - Display space views using
ViewCoordinatesfrom closest ancestor #3748 - Improve 3D view bounds handling of camera frustums #3749 #3815 #3811
- Improve heuristics around 2D vs 3D space-view creation #3822
🚀 Performance improvements
- Optimize gathering of point cloud colors #3730
🧑🏫 Examples
- Fix open photogrammetry example not working on Windows #3705
📚 Docs
- Document that entity-path
rerun/is reserved #3747
🖼 UI improvements
- Show all entities/components in the Streams UI, even if empty for the selected timeline #3779
🧑💻 Dev-experience
- Less automatic
build.rsshenanigans #3814
🗣 Refactors
- Refactor our
build.rsfiles #3789
📦 Dependencies
0.9.0 - New logging API - 2023-10-05
Rerun is an easy-to-use visualization toolbox for computer vision and robotics.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli - Online demo: https://app.rerun.io/version/0.9.0/
✨ Overview & highlights
Rerun 0.9.0 is a big release, that introduces a brand new logging API. This API is code-generated from a common definition, meaning the Python and Rust SDKs are very similar now. This will let us more easily extend and improve the API going forward. It is also the basis for our C++ API, which is coming in Rerun 0.10.0.
Read the migration guide for details!
Other highlights:
- 🏃♀️ Large point clouds are up to 3x faster now
- 📚 Markdown view support
- 🔗 with easy to use in-viewer entity & component links
- 📺 New startup screen
- 🐛 Lots and lots of bugfixes
- 👷♀️ Internally we have now way more automated testing for the new API surfaces
- ✨ drag & drop for images & meshes (even on web!), time display in local time (thanks @jparismorgan!), .obj mesh support, default enabled memory limit, new how-to guide for custom data… and many more smaller features!
Some select details
🐍 Python SDK
- Handle older Numpy versions / py 3.8 in
VecNDextensions #2896 - Add default value for
infoargument ofClassDescription#3017 - Run all Python doc examples in CI #3172
- Create objects for delegating components #3303
- Allow any string as an entity path #3443
- Check if another process is already listening on the port before trying to spawn #3501
- Force kw-args on more Python functions #3515
- Deprecate all of the legacy
log_prefixed APIs. #3564 - Introduce AnyValues as an alternative to extension_components #3561
🦀 Rust SDK
- Introduce versioned
EntityPath& refactor mesh/tensor caching #3230 - Make
FileSinkactually flush its data when asked to #3525 TextLogintegrations with native loggers #3522
🪳 Bug fixes
- Fix bug in size estimation of array buffers #2991
- Fix the Streams UI when the recording is empty #3027
- Clamp time panel height to avoid visual glitches #3169
- Allow user to edit colormap for depth images #3241
- Fix lurking bug in datastore bucket sorting routines #3281
- Fix row ordering flakiness when using clear APIs #3288
- Fix incorrect propagation of field's nullability into its inner list #3352
- Fix post-GC purging of streams view time histogram #3364
- Fix color grayscale colormap not being even #3391
- Fix depth point cloud not taking transformation at its path into account #3514
- Fix infinite recursion when putting a container inside a Viewer tab #3534
- Fix failing to preview small images #3520
🌁 Viewer improvements
- Open image and mesh files with drag-drop and File->Open #3116
- Support loading images and meshes on web #3131
- Add
rerun resetcommand #3145 - Show picking position when hovering something in the spatial view #3227
- Rethink view selection & filtering + make all views opt-in #3323
- Markdown support in
TextDocument#3343 - Click
recording://entity/pathlinks in markdown #3442 - Allow showing image shaped tensors in the tensor view #3583
- Add option to display timestamps in the local system timezone #3530 (thanks @jparismorgan!)
- Add obj mesh support to Viewer #3670
🚀 Performance improvements
- Pass through strings using arrow2::Buffers #2931
- Introduce codegen optimizations for primitives and fixed-sized-arrays #2970
- Optimize big point clouds by ~20% #3108
- A nice speed up of 3D points clouds by ~69% #3114
- Improve performance for many entities #3078
- Turn on garbage-collection (
--memory-limit) by default #3161 - Optimize out unnecessary joins when querying archetypes #3377
🧑🏫 Examples
- Add "rerun_example_" prefix to all our user-visible app-ids #3112
- Add paper visualizations to examples #3020 (thanks @roym899!)
- API examples overhaul & roundtrip tests #3204
- Generate manifest for examples page in Viewer #3332
- Fix
transform3d_simpleand reenable roundtrip test #3401 - Update import path for HuggingFace's
randn_tensor#3506 (thanks @hu-po!) - Add ControlNet example #3568 (thanks @roym899!)
📚 Docs
- Fix outdated links in docs #2854
- Add how-to guide for clearing entities #3211
- Support
\examplein codegen #3378 - Docs codegen #3445
- Generate component/datatype docs #3535
- Update the Python API docs site for the new APIs #3565
- Add a how-to guide for using Rerun with custom data #3634
🖼 UI improvements
- Migrate to custom checkbox/radio_value UI #2851
- Remove expansion effect from time panel toolbar #2863
- Remove expansion effect from the large collapsing headers #2864
- Change the styling and behavior of hyperlinks #2872
- Improve space view tab design #2879
- Improve drag tab UI #2893
- Normalize various text string in UI #2902
- Add (debug-only) style panel #2914
- Add clip rect in panels and use them for large collapsing headers #2936
- Add Recordings section to the left panel #2938
- New triangle collapse arrow for large collapsible header #2920
- Add support for tree to
ListItem#2968 - Add hierarchical display in recordings panel #2971
- Add support to close a recording #2972
- Show RAM use and data rate when hovering an entity in stream view #2997
- Don't select the spaceview when maximizing it #2988
- Add delete buttons in the Recordings UI #2976
- Introduce a welcome screen when no recording is loaded #2982
- Remove the limitation to a single dropped file #3030
- Uniform icon, pointer, and tooltip for external links #3026
- Improve styling of demo header #3022
- Implement "Open file" dialog on Web #3068
- Show Welcome Screen after closing recording even with
--skip-welcome-screen#3035 - Fix the 3D space view's tooltip help text #3132
- Use
ListItemin blueprint tree UI #3118 - Use
ListItemin Stream Tree UI #3153 - Limit the size of component tooltips with
UiVerbosity::Reduced#3171 - Smaller AnnotationContext tooltip #3217
- Add Examples page to the Welcome Screen #3191
Welcome Pagerefresh #3219- Show currently loading recordings in Recordings menu #3307
- Update to latest egui + use new Image API #3311
- Hide stream view and selection view in welcome app #3333
- Tighter UI for Pinhole and when hovering images #3579
- Improve viewport tile behavior #3295
- Show color map preview for depth point clouds as well #3373
🕸️ Web
- Move example description to README frontmatter #3201
- Fix instantiateStreaming usage on web #3209
- Web-Viewer: Don't auto-connect to
wss://hostnamewhen an?url=is missing #3345
📈 Analytics
- Recreate the analytics state directory if necessary before creating pipeline #2878
- Update resolved analytics URL #3101
- Use
ehttpinre_analytics#3155 - Web analytics #3166
- Keep track of how files are sourced for analytics and UI #3371
🧑💻 Dev-experience
- Make
cargo codegenwork irrelevant of CWD #2913 scripts/highlight_issues.py: print issues with no comments #2939- Use
prettypleaseto improve formatting of generated Rust code #2949 - Enable debug symbols in build scripts (
build.rs) in dev mode #2962 - Update egui via a
[patch]#2969 - Track file sizes #3037
- Fix docs previews #3066
- Name the rayon threads #3060
- Improve size tracking table #3117
- Remove
setup-rustfrom toml lint job #3143 - Render demo manifest #3151
- Fix update PR body script #3181
- Update CI
actions/checkout@v4#3208 - Update all uses of
actions/checkoutto use explicitref#3322 - Make 'Print datastore' viable with real world data #3452
- Update workflows to support fork PRs #3544
🗣 Refactors
- Remove legacy
re_components#3440
📦 Dependencies
- Update clang-format #2942
- Rust 1.72 + format
let-else(!) #3102 - Update to egui 0.23 #3523
- Update to wgpu 0.17 #2980
🤷 Other
🤷 Other
- Always protect at least one value on the timeline when running GC #3357
0.8.2 - Bug fixes - 2023-09-05
🪳 Bug fixes
- Fix quadratic slowdown when ingesting data with uniform time #3088
- Normalize quaternions #3094
- Improve error message in common
re_renderercrash #3070 - Fix crash when trying to render too many line segments #3093
- Handle serde-field that fails to deserialize #3130
- GC the blueprints before saving while preserving the current state #3148
🧑🏫 Examples
- Make
custom_space_viewexample more verbose #3123
🖼 UI improvements
- Change the "slow-down-camera" modifier to Alt on non-Mac #3051 (thanks @h3mosphere!)
🎨 Renderer improvements
- Warn if using software rasterizer (lavapipe or llvmpipe) #3134
📦 Dependencies
- Update webpki: https://rustsec.org/advisories/RUSTSEC-2023-0052 #3176
0.8.1 - Bug fixes - 2023-08-17
🐍 Python SDK
- Add a warning category and stacklevel to Rerun warnings.warn calls #2985
🪳 Bug fixes
- Fix always redrawing in the presence of a 3D space view #2900
- Fix unable to set camera spinning until camera has moved #2990
🌁 Viewer improvements
- Allow changing plot aspect ratio with scroll + cmd/ctrl + alt #2742
- Automatically select user timeline if no timeline was explicitly selected yet #2986
🧑🏫 Examples
- Add
Helixtodemo.rerun.io#2930
📈 Analytics
- Make sure
re_analyticsnever log higher than atdebuglevel #3014
0.8.0 - Infrastructure investments and more transform improvements - 2023-07-27
Rerun is an easy-to-use visualization toolbox for computer vision and robotics.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli - Online demo: https://demo.rerun.io/version/0.8.0/
✨ Overview & highlights
log_pinholeis now easier to use in simple cases and supports non-RDF camera coordinates. #2614- You only need to set focal length and optional principal point instead of setting the full 3x3 matrix.
- There is also a new argument:
camera_xyzfor setting the coordinate system. The default is RDF (the old default). This affects the visible camera frustum, how rays are projected when hovering a 2D image, and how depth clouds are projected.
- The visualizer can now show coordinate arrows for all affine transforms within the view. #2577
- Linestrips and oriented bounding boxes can now be logged via batch APIs in python.
- Rust users that build their own Viewer applications can now add fully custom Space Views. Find more information here.
- New optional
flush_timeoutspecifies how long Rerun will wait if a TCP stream is disconnected during a flush. #2821- In Rust,
RecordingStream::connectnow requiresflush_timeoutspecified as anOption<Duration>.- To keep default behavior, this can be specified using the
rerun::default_flush_time()helper.
- To keep default behavior, this can be specified using the
- In Python
flush_init_secis now an optional argument torr.connect()
- In Rust,
- In Rust, the
RecordingStreamnow offers a stateful time API, similar to the Python APIs. #2506- You can now call
set_time_sequence,set_time_seconds, andset_time_nanosdirectly on theRecordingStream, which will set the time for all subsequent logs using that stream. - This can be used as an alternative to the previous
MsgSender::with_timeAPIs.
- You can now call
- The Rerun SDK now defaults to 8ms long microbatches instead of 50ms. This makes the default behavior more suitable
for use-cases like real-time video feeds. #2220
- Check out the microbatching docs for more information on fine-tuning the micro-batching behavior.
- The web viewer now incremental loads
.rrdfiles when streaming over HTTP. #2412
Ongoing refactors
- There have been a number of significant internal changes going on during this release with little visible impact.
This work will land across future releases, but is highlighted here since much of it is visible through the
changelog.
- The layout of the Viewer is now controlled by a Blueprint datastore. In the future this will allow for direct API
control of the layout and configuration of the Viewer. A very early prototype of this functionality is available
via the
rerun.experimentalmodule in Python. - An entirely new code-generation framework has been brought online for Rust, Python and C++. This will eventually enable new object-centric APIs with a more scalable, consistent, and ergonomic experience.
- Bringup of C++ support is now underway and will eventually become our third officially supported SDK language.
- The layout of the Viewer is now controlled by a Blueprint datastore. In the future this will allow for direct API
control of the layout and configuration of the Viewer. A very early prototype of this functionality is available
via the
Known regressions
- Due to the Blueprint storage migration, blueprint persistence on web is currently broken. Will be resolved in: #2579
🔎 Details
🐍 Python SDK
- Clean up warnings printed when
rr.inithasn't been called #2209 - Normalize Python typing syntax to 3.8+ #2361
- Simpler, sturdier stateful time tracking in both SDKs #2506
- Fix not taking np.array for single colors #2569
- Add a basic pyright config #2610
- Improve
log_pinholeand support non-RDF pinholes #2614 - Expose batch APIs for linestrips #2822
- Expose batch APIs for oriented bounding boxes #2823
🦀 Rust SDK
- Add example for adding custom Space Views #2328
- Simpler, sturdier stateful time tracking in both SDKs #2506
- Automagic flush when
take()ing aMemorySinkStorage#2632 - Logging SDK: Log warnings if user data is dropped #2630
- Add support for
RecordingStream::serve#2815
🌁 Viewer improvements
- Better handle scroll-to-zoom in 3D views #1764
- Add command to screenshot the application #2293
- Show layout in blueprint tree view #2465
- Double-click to select entity #2504
- Add Rerun.io link/text in top bar #2540
- New auto-layout of space views #2558
- Add 'Dump datastore' command to palette #2564
- Support any
dtypefor depth images #2602 - Change "Save Selection" command to Cmd+Alt+S #2631
- Consistent transform visualization for all entities with transforms #2577
- Improve
log_pinholeand support non-RDF pinholes #2614
🚀 Performance improvements
- Flush the batches every 8ms instead of 50 ms #2220
- Replace
imagecrate jpeg decoder with zune-jpeg #2376 - Stream
.rrdfiles when loading via http #2412
🪳 Bug fixes
- Fix deadlock when misusing the Caches #2318
- Fix unstable order/flickering of "shown in" space view list on selection #2327
- Fix transforms not applied to connections from transform context #2407
- Fix texture clamping and color gradient selection being displayed incorrectly #2394
- Fix projected ray length #2482
- Tweak the depth bias multiplier for WebGL #2491
- Clip image zoom rectangle #2505
- Fix missing feature flags for benchmarks #2515
run_all.pyscript fixes #2519- Update egui_tiles with fix for drag-and-drop-panic #2555
- Convert objectron proto.py back to using typing.List #2559
- Exclude from
objectron/proto/objectron/proto.pyfromjust py-format#2562 - Fix pinhole visualization not working with camera extrinsics & intrinsics on the same path #2568
- Fix: always auto-layout spaceviews until the user intervenes #2583
- Fix freeze/crash when logging large times #2588
- Update egui_tiles to fix crash #2598
- Fix clicking object with single instance (of every component) selecting instance instead of entity #2573
- Cleanup internal data-structures when process has been forked #2676
- Fix shutdown race-condition by introducing a flush_timeout before dropping data #2821
- Fix ui-scale based point/line sizes incorrectly scaled when zooming based on horizontal dimension #2805
- Fix visibility toggle for maximized Space Views #2806
- Fix loading file via CLI #2807
- Fix disconnected space APIs in Python SDK #2832
- Avoid unwrap when generating authkey #2804
🧑🏫 Examples
- Add example template #2392
- Show hidden url search param in
app.rerun.io#2455 - Minimal example of running an intel realsense depth sensor live #2541
- Add a simple example to display Open Photogrammetry Format datasets #2512
- Move
examples/api_demo->tests/test_api#2585
📚 Docs
- Docs: link to
rr.saveand suggestreruninstead ofpython -m rerun#2586 - Update docs about transforms #2496
- Fixup remaining usages of log_rigid3 in docs #2831
🎨 Renderer improvements
- Expose type erased draw data that can be consumed directly #2300
- Use less
mutwhen usingRenderContext#2312
🧑💻 Dev-experience
- Better error messages in build.rs #2173
- Recommend sccache in CONTRIBUTING.md #2245
- introduce
re_tracing#2283 - lint: standardize formatting of let-else-return statements #2297
- Centralized build tools in
re_build_tools#2331 - Lint for explicit quotes #2332
- Added example screenshot instructions in
just upload --help#2454 - Added support for puling image from an URL to
upload_image.py#2462 setup_dev.shnow installs pngcrush #2470- Added docs/code-examples to the directories checked by py-lint and py-format #2476
- Link to demo in PR + check checkboxes #2543
- Add script to find external issues we haven't commented on #2532
- Move CI-related scripts to its own folder #2561
- Render PR description as template #2563
- Add basic testing automation against all version of Python using nox #2536
- Run clippy on public API too #2596
- Bump all
py-lint-related package versions #2600 - Crates publishing script #2604
- Fix Rust docs deploy #2615
- Add support for .gitignore to scripts/lint.py #2666
🗣 Refactors
- Refactor space-view dependencies:
- Move spatial space view to its own crate #2286
- Separate crate for bar chart space view #2322
- Separate crate for time series space view #2324
- Separate crate for tensor space view #2334
- Separate viewport related files out to a new re_viewport crate #2251
- Remove timepanel dependency from viewport #2256
- New trait system for SpaceViews:
- Initial Space View trait & port of text space views to the new Space View trait system #2281
- Extend/iterate on SpaceViewClass framework with SceneContext & port SpatialSpaceView scene parts #2304
- Finalize move of SpatialSpaceView to SpaceViewClass trait framework #2311
- Typename cleanup in SpaceViewClass framework #2321
- Automatic fallback for unrecognized Space View Class, start removing old ViewCategory #2357
- Rename ScenePart -> ViewPartSystem + related renamings #2674
- Dynamically registered space view (part/context) systems #2688
- Viewer's command queue is now a channel, allowing to queue commands without mutable access #2339
- Break up app.rs into parts #2303
- Break out
re_log_types::component_typesasre_components#2258 - Introduce StoreHub and rename Recording->Store #2301
- Move StoreHub out of the Viewer during Update #2330
- Expand CommandSender to support SystemCommand #2344
- Use
caminocrate for UTF8 paths inre_types_builder#2637 - Separate 2D & 3D spaceview classes, removal of
ViewCategory,SpaceViewClassdriven spawn heuristics #2716 - Move object property heuristics to heuristics.rs #2764
📦 Dependencies
📘 Blueprint changes
- Drive blueprints off of a DataStore #2010
- Split SpaceView -> SpaceViewState + SpaceViewBlueprint #2188
- Split the Blueprint into AppBlueprint and ViewportBlueprint #2358
- Swap the naming of Viewport and ViewportBlueprint #2595
- Basic persistence for blueprints #2578
🏭 New codegen framework
- Codegen/IDL 1: add more build tools #2362
- Codegen/IDL 2: introduce
re_types_builder#2363 - Codegen/IDL 3: introduce
re_types#2369 - Codegen/IDL 4: definitions for a
Points2Darchetype #2370 - Codegen/IDL 5: auto-generated Python code for
Points2D#2374 - Codegen/IDL 7: handwritten Python tests and extensions for
Points2D#2410 - Codegen/IDL 6: auto-generated Rust code for
Points2D#2375 - Codegen/IDL 8: handwritten Rust tests and extensions for
Points2D#2432 - Codegen'd Rust/Arrow 1: upgrading to actual
TokenStreams #2484 - Codegen'd Rust/Arrow 2: matching legacy definitions #2485
- Codegen'd Rust/Arrow 3: misc fixes & improvements #2487
- Codegen'd Rust/Arrow 4: out-of-sync definitions CI detection #2545
- Codegen'd Rust/Arrow 5: doc, definitions and regression tests for combinatorial affixes #2546
- Codegen'd Rust/Arrow 6: serialization #2549
- Codegen'd Rust/Arrow 7: deserialization #2554
- Codegen'd Rust/Arrow 8: carry extension metadata across transparency layers #2570
- Codegen'd Rust/Arrow 9: Rust backport! #2571
- End-to-end cross-language roundtrip tests for our archetypes #2601
- Automatically derive
DebugandClonein Rust backend #2613 - Generating (de)serialization code for dense unions in Rust backend #2626
- Fix
FixedSizeListdeserialization edge-case + trivial optimizations #2673 - Make
Datatype&Componentboth inherit fromLoggable#2677 - Roundtrip-able
Transform3Ds #2669 - Don't inline recursive datatypes in Rust backend #2760
- Automatically derive
tuple_structattr and trivialFromimpls where possible #2772 - Introduce roundtrip-able
Points3Darchetype (py + rs) #2774 - Add
fmt::Debugimplementations to various types. #2784 (thanks @kpreid!) - Isolate testing types in Rust backend #2810
- Fix out-of-sync codegen hash #2567
- Python backport: add
log_any()#2581 - Integrate unit examples into codegen stack #2590
- Disable codegen on Windows #2592
- Python codegen: big cleaning and paving the way towards transforms #2603
- Automatically assume Arrow transparency for components #2608
- Fix wrong path being
rerun_if_changed()incompute_dir_hash#2612 - Support transparency at the semantic layer #2611
- Don't use builtin
requiredanymore, introducenullableinstead #2619 - Rust codegen: generate proper docstrings #2668
- Support nullable Arrow unions using virtual union arms #2708
- Introduce support for querying Archetypes #2743
- Introduce legacy shims and migrate DataCell to re_types::Component #2752
🌊 Starting work on C++
- Seed of C and C++ SDKs #2594
- Move C++ SDK to own folder #2624
- C++ codegen #2678
- C++ codegen for reporting Arrow data type for structs #2756
- Don't inline recursive datatypes in C++ backend #2765
- C++ codegen to_arrow_data_type for unions #2766
- C++ codegen Arrow serialize non-union components/datatypes without nested Rerun types #2820
- C++ codegen of structs and unions #2707
- Fix cpp formatter differences #2773
🤷 Other
🤷 Other
- test_api: set different app_id based on what test is run #2599
- Introduce
rerun compareto check whether 2 rrd files are functionally equivalent #2597 - Remove
files.excludein vscode settings #2621 - Support feature-gated Rust attributes #2813
0.7.0 - improved transforms, better color mapping, bug & doc fixes - 2023-06-16
✨ Overview & highlights
While we're working on significant updates around interfaces and customizability, here's a smaller release packed with useful improvements 🎉
- Much more powerful transformation logging
- any affine transforms works now!
- supports many more formats and shows them in the Viewer as-is
- Better color mapping range detection for images and tensors
- Many small improvements to samples & documentation
🔎 Details
🐍 Python SDK
- Improved 3D transform ingestion & affine transform support #2102
- Normalize Python typing syntax to 3.8+ #2361
- Enforce
from __future__ import annotationsin Python files #2377 - Add
jpeg_qualityparameter tolog_image#2418
🦀 Rust SDK
- Improved 3D transform ingestion & affine transform support #2102
impl Copy for Arrow3D. #2239 (thanks @kpreid!)
🪳 Bug fixes
- Stable image order, fixing flickering #2191
- Fix double clicking objects no longer focusing the camera on them #2227
- Fix off-by-half pixel error in textured rectangle shader #2294
- Update wgpu-hal to 0.16.1 to fix mobile Safari #2296
- Fix some browsers failing due to 8k texture requirement, pick always highest available now #2409
- Fix visibility toggles for time series not working #2444
🌁 Viewer improvements
- Time panel now always talks about "events" instead of "messages" #2247
- Automatically determine image/tensor color mapping & need for sRGB decoding #2342
🚀 Performance improvements
- Optimization: avoid a memory allocation when padding RGB u8 to RGBA #2345
🧑🏫 Examples
- Example of how to embed the Rerun Viewer inside your own GUI (+ ergonomic improvements) #2250
- Objectron Rust example: install
protocfor the user #2280 - Remove weird-looking argument parsing in examples #2398
- Fix
tracking_hf example: put scaled thing under its own root entity #2419 - Clean up our examples #2424
- New face detection example based on MediaPipe #2360
- Update web examples #2420
- Update titles and tags for examples with real data #2416
📚 Docs
- Merge
rerun-docsrepository into this monorepo #2284 - Add manifest + readmes to examples #2309
- Fix and clean up BUILD.md #2319
- Link to
/examplesin PR description #2320 - Make examples setup a separate page #2323
- Add
site_urltomkdocs.yml#2326 - Add
log_clearedto the common index #2400 - Use forked
mkdocs-redirects#2404 - Add support for classes to generated Python common API index #2401
- Added support for creating multi-resolution stacks with upload_image.py #2411
- Document annotation context in manual #2453
🕸️ Web
- Update
wasm-bindgento 0.2.87 #2406 - When loading on web, match style and show a progress indicator while Wasm is loading #2421
📈 Analytics
- Add crash retriever script #2168
🧑💻 Dev-experience
- Image uploader script #2164
- Replace
wasm-bindgen-cliwith librarywasm-bindgen-cli-support#2257 - Fix manual release/dispatch workflows #2230
- Add instructions on how to fix weird
gsutilcrash #2278 - Link to preview of latest commit in PR body #2287
- CI: Retry
linkinator#2299 - Remove long dead code Python unit test #2356
- Added gcloud project name to
upload_image.py#2381 - Fix typo in
run_all.py#2441 - Small changelog improvements #2442
- Minor fixes/improvements of
upload_image.py#2449 - Improve changelog generator #2447
🗣 Refactors
- Centralize freestanding store helpers #2153
📦 Dependencies
0.6.0 - 3D in 2D and SDK batching - 2023-05-26
✨ Overview & highlights
- You can now show 3D objects in 2D views connected by Pinhole transforms #2008
- You can quickly view images and meshes with
rerun mesh.obj image.png#2060 - The correct to install the
rerunbinary is now withcargo install rerun-cli#2183 native_vieweris now an opt-in feature of thererunlibrary, leading to faster compilation times #2064- Experimental WebGPU support #1965
- SDK log calls are now batched on the wire, saving CPU time and bandwidth
🔎 Details
🐍 Python SDK
- ⚠️ BREAKING: You must now call
rr.initif you want logging to work. - ⚠️ BREAKING:
set_enabledhas been removed. In order to disable logging at runtime, callset_global_data_recording(None). See also the doc section on this topic. log_mesh_file: accept either path or bytes #2098- Add
draw_orderto 2D primitives #2138 - Add
rr.version()#2084 - Add an experimental text-box component and logtype #2011
- Fix a race condition for notebooks #2073
- Redesign multi-recording & multi-threading #2061
- More robust wait for exit condition during
.serve()#1939 - SDK batching/revamp 3: sunset
PythonSession#1985
🦀 Rust SDK
- ⚠️ BREAKING:
set_enabledhas been removed. In order to disable logging at runtime, create a no-op recording viaRecordingStream::disabled(). See also the doc section on this topic. - ⚠️ BREAKING:
Sessionhas been replaced byRecordingStream#1983 - ⚠️ BREAKING:
native_vieweris now an opt-in feature of thererunlibrary #2064 - Rust SDK: bring back support for implicit splats #2059
- Introduce a 2D
DrawOrdercomponent #2056 - Add
Tensor::from_image_fileandTensor::from_image_bytes#2097 - Redesign multi-recording & multi-threading #2061
🌁 Viewer improvements
- Support projecting 3D entities in 2D views #2008
- Set Rerun Viewer native app icon using eframe #1976
- Use
altkey again for rolling camera in 3D views #2066 - Show tensors shaped [H, W, 1, 1] as images (and more!) #2075
- Show meshes and images with
rerun foo.obj bar.png#2060 - Don't persist blueprints for unknown apps #2165
🪳 Bug fixes
- Fix hover/select highlights when picking single points in a scene with multiple point clouds #1942
- Fix crash for missing class ids causing zero sized texture #1947
- Handle leaking of prerelease into alpha version #1953
- Fix incorrect memory usage stats for destroyed on-creation-mapped buffers #1963
- Fix: don't starve web-socket decoding task #1977
- When hovering a 3D view in the presence of images, fix previously incorrect depth shown in 2D view #2009
- Fix: use the Mac icon on Mac #2023
- SDK batching/revamp 2.2: homegrown Arrow size estimation routines #2002
- Fix twice as wide alpha-to-coverage edge on circles, leading to artifacts #2053
- Bugfix: allow hovered items to be clicked to set selection #2057
- Detect, warn and gracefully handle corrupt cells in
lookup_arrow#2055 - Fix failing dependency install of mesh_to_sdf #2081
- Stop playback when we reach the end of the data #2085
tornado>6.1 doesn't work with recentjupyter#2092- Premultiply alpha of RGBA u8 images #2095
- Fix premature pausing when reaching end of still-streaming stream #2106
- 2D layering fixes #2080
- Fix depth precision issues on WebGL due to different NDC space #2123
- Fix flushing race in new multi-recording SDK #2125
- Web viewer: catch and show panic messages that happens at startup #2157
- Don't early-exit on non-pinhole transforms when looking up cameras #2194
- Mitigate depth offset precision issues on web #2187
- Fix colormaps #2204
- Fix annotation images sometimes drawn in the background #1933
- Fix hovering depth clouds #1943
- Fix incorrect 2D camera for scenes with negative 2D coordinates #2051
- Fix web depth/projection regression, causing incorrect rendering on all 3D scenes #2170
🚀 Performance improvements
- SDK batching/revamp 1: impl
DataTableBatcher#1980 - Upgrade arrow2/convert and use native buffers for the tensor u8 types #1375
- Use the same RRD encoding for the SDK comms as for everything else #2065
- Optimize GLTF/GLB texture loading in debug builds #2096
- Premultiply the alpha on the GPU #2190
- Switch compression algorithm from zstd to lz4 #2112
- Support RRD streams with and without compression. Turn off for SDK comms #2219
🧑🏫 Examples
- Join threads at end of multi-threading example #1934
- Add argument parsing to the rerun_demo #1925
- Use zipfile Python library instead of
unzipcommand in arkitscene #1936 - Fix backslashes in arkitscene rigid transformation path #1938
- Fix mp_pose example 2D points having incorrectly interpreted depth #2034
- SDK batching/revamp 2.1:
clockexample for Rust #2000 - Add
scripts/run_all.py#2046 - Check
examples/python/requirements.txtin CI #2063 - Fix glb mesh data set downloads #2100
- Add more examples to https://app.rerun.io/ #2062
🖼 UI improvements
- Update egui to latest and wgpu to 0.16 #1958
- Add keyboard shortcut for "Follow", and stop following on "Restart" #1986 (thanks @h3mosphere!)
- Improve UI for keypoint and class-ids of annotations contexts #2071
- improvements to memory measurements and reporting #2069
- Switch from
egui_docktoegui_tiles#2082 - Allow horizontal scrolling in blueprint panel #2114
- Nicer (& fixed up) help texts for space views #2070
- Allow dragging time cursor in plots #2115
🕸️ Web
- Set the GC limit to 2.5GB on web #1944
- Better crash reports on Web, plus WebGPU support detection #1975
- Work around https://github.com/sebcrozet/instant/issues/49 #2094
- Update
wasm-bindgento 0.2.86 #2161
🎨 Renderer improvements
- Full (experimental) WebGPU support #1965
- Depth offset for lines & points #2052
- Update to wgpu 0.16.1 #2205
🚜 Refactors
- Replace complex uses of
query_entity_with_primarywithquery_latest_single#2137 - Make selection state independent of blueprint #2035
- Remove unused MeshSourceData #2036
- Move selection state into an independent crate, re_viewer_context #2037
- Move item-ui to separate module, move AppOptions to re_viewer_context #2040
- Move
Cachestore_viewer_ctxand make it generic #2043 - Move time control to re_viewer_context #2045
- Move
ViewerContext&ComponentUiRegistrytoviewer_context#2047 - Move data UI to new
re_data_uicrate #2048 - Use instant for
Time::now()#2090 - Move from
instant->web_time#2093 - "namespace" flag parameters for linestrip & point cloud shader flags #2033
✨ Other enhancement
- Update minimum supported Rust version to
1.69.0#1935 - Allow users to select the bind address (ip) to use with
--bind#2159
🧑💻 Dev-experience
- Suggest users open an issue on crash, and other fixes #1993
- Lint error names in
map_err#1948 - New dispatch-only workflow for running the lint-job #1950
- Move clippy_wasm/clippy.toml to under scripts #1949
- Fix run-wasm crash on trying to wait for server #1959
- Introduce new reusable workflow jobs and cleanup manual trigger #1954
- Use new CI workflows on pull-request #1955
- Try making pull-request workflows non-concurrent #1970
- Another attempt to make jobs non-concurrent on a per-PR basis #1974
- If there's a
{{ pr-build-summary }}in the PR description, update it. #1971 - Run the cube notebook on PR #1972
- Add ability to manually run a web build to upload to an adhoc name #1966
- Limit ipython to 8.12 in the Jupyter example #2001
- New manual job to publish a release based on pre-built wheels #2025
- Use the correct Rust analyzer settings #2028
- New helper for sticking Serde-encodable data into Arrow #2004
- Fix
taplo-clifailing to install #2068 run_all.py: add--fast,--separate, and--close#2054- Remove
Clipboard::set_text#2078 - run_all.py: print output on sequential run failure #2079
- Use the american spelling of "gray" #2099
- Make sure
rerun/rerun_py/re_viewerbuild info is updated on each build #2087 - Fix setup scripts for Mac M1/MacPort configuration #2169 (thanks @abey79!)
- Better error messages in
build.rs#2173 cargo install rerun-cli#2183- Fix
cargo test#2199 - Fix run all for new rust-cli target & add rerun-web alias for quick running of the web player #2203
🤷 Other
🤷 Other
- Fix secret in dispatch_lint.yml 4848f98f2605a3caf9b7695273e0871efa2d44c8
- Only maintain a single manual-dispatch job for testing workflows 98f7de3b52b0fea6abe364f9d0ce0bd4c459caf1
- Add other build parametrizations to manual_dispatch.yml dbdf275eaf17220d14811dc34b69b6a76e948e73
- Use proper if gates on the manual_dispatch.yml jobs 9ad62011678caaed04260ba160763e24e64a7402
- Add ability to save cache to manual_dispatch.yml 5c61b37a1bc40f1a223c370b3b69b08654aada47
- Standard case of inputs 2729c71f1ba9f7cdbe64adc3c610caf9464324e4
- Add manual step for packaging to 'manual_dispatch.yml' a3178e6143c068175b477cb236f2ba2477e083ea
- New workflow_dispatch for building wheels for a PR 3bc2cb73ece98f914254221ce0ea129015834f59
- Rename build_wheels_for_pr.yml -> manual_build_wheels_for_pr.yml 778c4d363b3814aeb777d07bfa63f081bc1dac32
- New manual workflow for running benches 840a127e3a74c3520a27c0b19eb1d3d9a7255b07
- New manual workflow for adhoc web builds 01080d6509e94fd2e2d3c4ff05beb0970ebe0b6e
- Fix name of on_push_main.yml bf5f63344663b3ebfc74f847db696a749b3e716c
- Fix usage of long commit in generate_prerelease_pip_index.py 579ce91556d6dd3cb9e6bd46971a7b6db6e42cdd
- Jobs with duplicated instances still need separate concurrency keys based on platform 0ad19980be99cb2f669d38c2f1410a38206cbe74
- New manual CI job for creating a release fb2d41af5ec089f6c7583629eda3fb332e420488
- Version check needs to run in bash 6feca463d21ea03538889df08064b6974edb1fd2
- Update changelog with 0.5.1 release notes 40fc2fd7d61689100dc40bfe59e4ddfbcc819c7d
RecordingStream: automaticlog_ticktimeline #2072- Add support for
f16tensors #1449 - Make
RecordingIda string #2088 - Update to latest
egui_tiles#2091 - Make every
RecordingIdtyped and preclude the existence of 'Defaults' #2110 - Add unit test of
re_smart_channelis_connected#2119 BeingRecordingMsg->SetRecordingInfo#2149- Update egui and eframe #2184
- Update to egui 0.22 #2195
- Simpler SIGINT handling #2198
cargo update#2196- Replace
ctrlccrate withtokio#2207 - Comment indicating blueprints aren't available in 0.6 b6c05776ab48e759370d6fed645ffd0ea68ec8c0
0.5.1 - Patch Release - 2023-05-01
✨ Overview & highlights
This Release fixes a few small bugs on top of the v0.5.0 release.
🔎 Details
- Bump hyper version due to RUSTSEC-2023-0034 #1951
- Round to nearest color_index when doing color mapping #1969
- Use an sRGB-correct gray gradient when displaying grayscale images #2014
- Don't use console.error #1984
- Fix failure to save files when split table contains no data #2007
0.5.0 - Jupyter MVP, GPU-based picking & colormapping, new datastore! - 2023-04-20
https://user-images.githubusercontent.com/2910679/233411525-1ceb2790-7f18-400a-ba48-f7e5b3400922.mp4
✨ Overview & highlights
This new release adds MVP support for embedding Rerun in Jupyter notebooks, and brings significant performance improvements across all layers of the stack.
- Rerun can now be embedded in Jupyter notebooks
- Tested with Jupyter Notebook Classic, Jupyter Lab, VSCode & Google Colab; checkout our How-to guide
- Try it out live on Google Colab
- All colormapping tasks are now done directly on the GPU
- This yields very significant performance improvements for colormapping heavy workload (e.g. segmentation)
- Try it out in our new
segment_anythingexample that shows off the latest models from Meta AI
- GPU picking & hovering now works with all of our primitives, including meshes & depth clouds
- This fixes all the shortcomings of the previous CPU-based system
- Rerun's automatic backprojection of depth textures ("depth clouds") is now feature complete
- Try it out in our updated
nyudexample
- Our datastore has been completely revamped to more closely match our latest data model
- This yields very significant performance improvements for workloads with many events
- Checkout this post for a detailed walkthrough of the changes
🔎 Details
🐍 Python SDK
- Document that we also accept colors in 0-1 floats #1740
- Don't initialize an SDK session if we are only going to be launching the app #1768
- Allow torch tensors for
log_rigid3#1769 - Always send
recording_idas part ofLogMsg#1778 - New
reset_timeAPI #1826 #1854 - Always flush when we remove a sink #1830
- More robust wait for exit condition during .serve() #1939
🪳 Bug fixes
- Fix broken outlines (hover/select effect) for lines #1724
- Fix logged obb being displayed with half of the requested size #1749 (thanks @BenjaminDev!)
- Fix
log_obbusage #1761 - Always create the
log_timetimeline #1763 - Fix undo/redo selection shortcut/action changing selection history without changing selection #1765
- Fix various crashes #1780
- Fix crash when trying to do picking on depth clouds d94ca3dd35e73e1984ccb969d0c7abd0d3e0faa9
- CI: fix benchmarks #1799
- CI: fix
cargo deny#1806 - Fix "too many points" crash #1822
- Allow re-use of
RowIds if no conflict is possible #1832 - Reduce memory used by staging belts on Web #1836
- Test and handle all tensor dtypes as images #1840
- Fix the Python build when running without
web_viewerenabled #1856 - Error instead of
expectinsidemsg_encode#1857 - Fix shutdown race condition in
re_sdk_commsclient #1861 - Fix broken instance picking in presence of images #1876
- Make sure JPEGs are always decoded #1884
- Fix crash when saving store to file #1909
- Don't clean up
LogDbs that only contain aBeginRecordingMsg#1914 - Fix picking entities with image + another object (or label) twice #1908
- Fix double clicking camera no longer focusing on said camera #1911
- Fix annotation images sometimes drawn in the background #1933
- Use
zipfilePython library instead ofunzipcommand inarkitscenedemo #1936 - Fix backslashes in
arkitscenerigid transformation path #1938 - Fix hover/select highlights when picking single points in a scene with multiple point clouds #1942
- Fix hovering depth clouds #1943
🚀 Performance improvements
- batching 4: retire
MsgBundle+ batching support in transport layer #1679 - Optimize the depth-cloud shader when
depth=0#1729 arrow2_convertprimitive (de)serialization benchmarks #1742arrow2estimated_bytes_sizebenchmarks #1743arrow2erased refcounted clones benchmarks #1745- benchmarks for common vector ops across
smallvec/tinyvec/std #1747 - Columnar
TimePoints in data tables and during transport #1767 - Compile with
panic = "abort"#1813 - Process 2D points per entities like 3D points #1820
- re_query: use latest data types (
DataRow/DataCell) #1828 - Depth cloud textures are now cached frame-to-frame #1913
🧑🏫 Examples
- Add new
ARKitScenesexample #1538 (thanks @pablovela5620!) - New example code for Facebook research's
segment-anything#1788 - Add
minimal_optionsexample for Rust SDK #1773 (thanks @h3mosphere!) - Remove manual depth projection from
carandnyudexamples #1869 - Always spawn instead of fork in multiprocessing example #1922
- Add
--num-framesarg to canny (webcam) example #1923 - Add argument parsing to
rerun_demo#1925 - Join threads at end of
multithreadingexample #1934
📚 Docs
- Add
typing_extensionstorequirements-doc.txt#1786 - Fix typos in notebook readme #1852
- Update docs related to notebook #1915
🖼 UI improvements
- Hover rays for tracked 3D cameras #1751
- Collapse space-view by default if there is only one child #1762
- Option to show scene bounding box #1770
- Assign default colors to class-ids when annotation context is missing #1783
- Add Restart command and keyboard shortcut for moving time to start of timeline #1802 (thanks @h3mosphere!)
- New option to disable persistent storage #1825
- Show previews of colormaps when selecting them #1846
- Smooth out scroll wheel input for camera zooming #1920
🤷 Other Viewer improvements
- Change
EntityPathHashto be 64 bit #1723 - Central
GpuReadbackhandling for re_viewer, experimental space view screenshots #1717 - Readback depth from GPU picking #1752
- Use GPU picking for points, streamline/share picking code some more #1814
- Use GPU picking for line(like) primitives, fix
interactiveflags #1829 - Use GPU colormapping when showing images in the GUI #1865
🕸️ Web
- Make CI publish
latesttagged web-viewer toapp.rerun.io#1725 - Implement
re_tuid::Tuid::random()on web #1796 - Refactor the relationship between the assorted web / websocket servers #1844
- Notebooks: make
presentation_idconsistent and use data-attribute for rrd #1881 - 2.5GB before GC kick in on web #1944
🎨 Renderer improvements
- GPU based picking with points #1721
- improved renderer label handling #1731
- Improved readback data handling #1734
- GPU based mesh picking #1737
- Improve dealing with raw buffers for texture read/write #1744
- GPU colormapping, first step #1835
- GPU tensor colormapping #1841
- GPU picking for depth clouds #1849
- Implement bilinear filtering of textures #1850 #1859 #1860
- Refactor: remove
GpuTexture2DHandle::invalid#1866 - Fix filtering artifact for non-color images #1886
- Refactor: Add helper functions to
GpuTexture2DHandle#1900
🛢 Datastore improvements
- Datastore: revamp bench suite #1733
- Datastore revamp 1: new indexing model & core datastructures #1727
- Datastore revamp 2: serialization & formatting #1735
- Datastore revamp 3: efficient incremental stats #1739
- Datastore revamp 4: sunset
MsgId#1785 - Datastore revamp 5:
DataStore::to_data_tables()#1791 - Datastore revamp 6: sunset
LogMsgstorage + save store to disk #1795 - Datastore revamp 7: garbage collection #1801
- Incremental metadata registry stats #1833
🗣 Merged RFCs
- RFC: datastore state of the union & end-to-end batching #1610
🧑💻 Dev-experience
- Post-release cleanup #1726
- Remove unnecessary dependencies #1711 (thanks @vsuryamurthy!)
- Use copilot markers in PR template #1784
- re_format: barebone support for custom formatting #1776
- Refactor: Add new helper crate
re_log_encoding#1772 setup_web.shsupports pacman package manager #1797 (thanks @urholaukkarinen!)- Add
rerun --strict: crash if any warning or error is logged #1812 - End-to-end testing of Python logging -> store ingestion #1817
- Fix e2e test on CI: Don't try to re-build
rerun-sdk#1821 - Install the rerun-sdk in CI using
--no-indexand split out Linux wheel build to run first #1838 - Remove more unused dependencies #1863
- Improve end-to-end testing slightly #1862
- Turn off benchmarks comment in each PR #1872
- Fix double-negation in
scripts/run_python_e2e_test.py#1896 - Improve PR template with better comment, and no copilot by default #1901
- Optimize
generate_changelog.py#1912
🤷 Other
- Fix videos for GitHub in
CHANGELOG.mdaf7d3b192157f942e35f64d3561a9a8dbcc18bfa - Don't run 3rd party bench suites on CI #1787
- Remove
TensorTrait#1819 - Disable wheel tests for
x86_64-apple-darwin#1853 - Update
enumflags2to non-yanked version #1874 - Collect extra egui features into the main
Cargo.toml#1926 just rs-run-allb14087b40bd805c95f030a4c7d3fb7a0482e13f4just py-run-all-{native|web|rrd}#1927
0.4.0 - Outlines, web viewer and performance improvements - 2023-03-28
https://user-images.githubusercontent.com/1220815/228241887-03b311e2-80e9-4541-9281-6d334a15ab04.mp4
✨ Overview & highlights
- Add support for mesh vertex colors #1671
- Lower memory use #1535
- Improve garbage collection #1560
- Improve the web viewer #1596 #1594 #1682 #1716 …
- Nice outlines when hovering/selecting
- Add an example of forever-streaming a web-camera image to Rerun #1502
- Fix crash-on-save on some versions of Linux #1402
- And a lot of other bug fixes
- Many performance improvements
We now host an experimental and unpolished web-viewer at https://app.rerun.io/ for anyone to try out!
🔎 Details
🐍 Python SDK
- Expose all Rerun enums and types to main module scope #1598
- Make
log_pointmore forgiving and update docstring #1663 - Add support for mesh vertex colors #1671
🦀 Rust SDK
- ⚠️
Session::newhas been replaced withSessionBuilder#1528 - ⚠️
session.spawn(…)->rerun::native_viewer::spawn(session, …)#1507 - ⚠️
session.show()->rerun::native_viewer::show(session)#1507 - ⚠️
session.serve(…)->rerun::serve_web_viewer(session, …);#1507 - ⚠️
rerun::global_sessionis now hidden behind theglobal_sessionfeature flag #1507 - Add support for mesh vertex colors #1671
🪳 Bug fixes
- datastore: disable compaction (fixes 2x memory issue) #1535
- Fix garbage collection #1560
- Avoid using undefined extern "C" on Windows #1577
- Fix crash on decoding old .rrd files #1579
- datastore: stabilize dataframe sorts #1549
- Stop using infinities in wgsl shaders #1594
- Workaround for alpha to coverage state leaking on (Web)GL renderer #1596
- Use a patched
wasm-bindgen-cliwith fix for 2GiB bug #1605 - Misc: make example in
log_pinholerunnable #1609 (thanks @Sjouks!) - Early-out on zero-sized space-views to prevent crashes #1623
- Print our own callstack on panics #1622
- Handle ctrl+c to gracefully shutdown the server(s) #1613
- Fix crash on serve exit, second attempt #1633
- Fix wrong remove-tooltip for entities and groups #1637
- Fix requiring focus for shutdown via ctrl+c when starting Viewer from command line #1646
- Fix eye spin after eye reset #1652
- Fix crash on negative radii by instead warning #1654
- Fix crash when trying to listen on a taken TCP port #1650
- Don't show 2D labels in 3D space views. #1641
- Fix Z fighting with improved depth offset math #1661
- Whether a spatial view is 2D or 3D is now reevaluated over time unless picked explicitly #1660
- Update wgpu to v0.15.3, fixing meshes on Windows Chrome #1682
- Fix a bug in the image hover code, causing the wrong RGBA values to be printed #1690
- Fix a bug that caused points to be render too large #1690
- Fix web crash on missing uniform buffer padding #1699
- Fix
memory_usageexample relying on implicit recursive features #1709 - Track changed state in nav mode combo box #1703
- Fix crash-on-save by switching file-picker dialog to
xdg-portal#1402 - Change roll-shortcut from ALT to SHIFT #1715
- Fix CpuWriteGpuReadBelt producing unaligned gpu buffer offsets #1716
- Fix arrows requiring a radius to be visible #1720
🚀 Performance improvements
- Add re_arrow_store profile scopes #1546
- datastore: early exit missing components at table level #1554
- datastore: track bucket count in store stats & mem panel #1555
- LogDb: don't split on index bucket size #1558
- Introduce a simpler cache dedicated to just decode JPEGs #1550
- Implement outlines for points 2D/3D/depth & use them for select & hover in Viewer #1568
- Simplify ImageCache #1551
- New time panel density graph #1557
- Refactor the Arrow Mesh3D type to use zero-copy Buffers #1691
- Remove the redundant costly transform check during categorization #1695
- batching 3:
DataRow&DataTable+ no bundles outside of transport #1673
🧑🏫 Examples
📚 Docs
- Link to the Python SDK build instructions in
rerun_py/README.md#1565
🖼 UI improvements
- Fix combining outline mask for selection & hover #1552
- Implement outlines for rectangles & use them for select & hover of image primitives in Viewer #1559
- Show log messages in egui toast notifications #1603
- Adapt UI for smaller screens #1608
- Nicer toast notifications #1621
- Don't hover things in 2D/3D views if we are dragging something #1643
- Allow rolling 3D camera with primary mouse button + alt modifier #1659
- Name space views after the space and indicate duplicate names #1653
- Add banner about mobile browsers being unsupported #1674
- Improve UI for tensors and color map selection #1683
- Only show the mobile OS warning banner on web #1685
- Improve the depth backprojection feature #1690
- Swap overlay order of selection & hover outlines #1705
- Turn on depth cloud backprojection by default #1710
- Add radius boost for depth clouds on outline #1713
🤷 Other Viewer improvements
- Fix web feature name in error messages #1521
- Use outlines for mesh selections instead of highlight colors #1540
- Implement outlines for line renderer & use them for select & hover of "line-like" primitives in Viewer #1553
- Load .rrd file over HTTP #1600
- Revert "Handle ctrl+c to gracefully shutdown the server(s)" #1632
- More eager GC, and remove
--fast-mathoptimization for Wasm #1656 - Detect failure to install GUI log callback #1655
- Warn when most of the RAM has been used up by Rerun #1651
- Apply color maps to all types of depth tensors #1686
- Size boosted outlines for points & lines, color & size tweaking #1667
- Default point radius to 1.5 UI points #1706
- When streaming an rrd from http: play it, don't follow it #1707
🕸️ Web
- Use
logas our log backend instead oftracing#1590 - Turn on allocation tracker at run-time and for web #1591
- Set correct MIME types in re_web_viewer_server #1602
- Upload web viewer to a bucket #1606
- Use hostname for default websocket address #1664
- Upload the colmap rrd file to gcloud #1666
- Show a warning by default on mobile browsers #1670
- Add analytics to the hosted index.html #1675
- Always upload latest prerelease to a dedicated prefix #1676
- Allow url param override on app.rerun.io #1678
- Show the git commit in the about section in pre-release builds #1677
- Update the web icon #1688
🎨 Renderer improvements
- Outlines via masking & postprocessing in
re_renderer#1532 - Add missing profiling scopes in
re_renderer#1567 - Don't call
wgpu::Device::pollon the web #1626 - Merge final outline render into composite step in order to fix blending #1629
- renderer: fix the groupby logic in mesh instancing #1657
- Fix outlines being offset diagonally by about half a pixel #1668
- Gpu readback belt for fast & easy data readback from gpu #1687
- Make CpuWriteGpuReadBelt texture copies easier/less error prone #1689
✨ Other enhancement
- datastore: split out formatting & sanity checks in their own modules #1625
- Add
rerun --save: stream incoming log stream to an rrd file #1662 - batching 1: introduce
DataCell& retireComponentBundle#1634 - Data store batching 2: split out component traits #1636
📈 Analytics
- Analytics: don't spam warning when there is an HTTP connection problem #1564
- Analytics: Rename "location" to "file_line" in the "crash-panic" event #1575
🗣 Merged RFCs
🧑💻 Dev-experience
- Update
rayon#1541 - Fix some
1.68clippy lints #1569 - Remove duplicated 'nix' crate #1479
- Better MsgId format #1566
- Lint vertical spacing in Rust code #1572
- CI: Replace wasm_bindgen_check.sh with actually building the web-viewer #1604
- Add --all-features to Rust Analyzer flags #1624
- Run clippy for Wasm, with own clippy.toml config file #1628
- Update tokio v1.24.1 -> v1.26.0 #1635
- Add a workflow input for running benchmarks manually #1698
- Add missing } to fix Rust workflow #1700
- Fix
lint.py#1719 - Add a script that generates a changelog from recent PRs and their labels #1718
🤷 Other
🤷 Other
- Clean up opencv_canny example slightly b487e550dcb87225858dc6f76b791a25e938e75e
- Lint fixes 9901e7c6735356b1970ddabc926bc5378d82e057
0.3.1 - Remove potentially sensitive analytics - 2023-03-13
Remove potentially sensitive analytics, including path to Rerun source code on panics, and Rerun branch name when building from source #1563
0.3.0 - 2023-03-07
✨ Overview & highlights
After a successful launch a couple of weeks ago, we're back with our second release! With a few exceptions this release focuses on internal refactors & improving our processes. However, we think you'll enjoy these goodies that made it in nonetheless!
https://user-images.githubusercontent.com/2910679/222510504-23871b8c-0bef-49c2-bbd2-37baab4247e8.mp4
You can now generate point clouds directly from depth textures and choose a wide variety of color maps. Check out this video on how to use it. This is a lot faster and more convenient than doing so manually in your own code Some caveats: Picking is not yet working and visible history may behave differently (related to #723)
Other highlights:
- Viewer
- SDK
- Python packages now work with Ubuntu-20.04 #1334
- u8 segmentation stay u8 now (they converted to u16 before) #1376
- 2D Line strips can now be logged directly #1430
- Add a
strictmode to the Python SDK where misuses of the API result in exceptions being raised.#1477 - Fix disabling Python API through
initnot working #1517
- General
- We build now with fewer build dependencies (there is however still more work to do!).
Notably, we previously used a version of the
timecrate which had a security issue (CVE-2020-26235), thanks @mpizenberg for helping out! - Print more information & troubleshooting info on crash
- We build now with fewer build dependencies (there is however still more work to do!).
Notably, we previously used a version of the
Meanwhile, we did a bunch of improvements to our manual. If you had trouble running Rerun so far, check our updated troubleshooting page (and as always, please open an issue if something doesn't work).
⚠️ BREAKING: old .rrd files no longer load ⚠️
🔎 Details
New features
- Generate point clouds directly from depth textures
- Python SDK: Add strict mode #1477
- OS independent Zoom factor & serialization thereof #1448
- Labels for 3D objects have now a color can now be selected & hovered #1438
- Add 2D support for linestrips #1430
- Add signal handler on *nix with troubleshooting and stacktrace #1340
- Point users to our troubleshooting page on panic #1338
Performance
- Speed up conversions for color arrays in Python #1454
- Speed up fixed-sized array iteration #1050
- Speed up tensor handling by padding data through more directly
- Add option to show performance metrics in the UI in release builds too #1444
- Faster stable diffusion sample #1364
- SDK: stream to disk with
savefeature #1405 re_rendererhas now a direct CPU->GPU copy mechanism
Small improvements & bugfixes
- UI
re_renderer- Heuristic for camera frustum length is now based on scene size #1433
- Fix Python type signature for tensor names #1443
- Don't convert u8 segmentation images to u16 #1376
- Docs (excluding the manual)
- Improve the docs of
connectandserve#1450 - Update log_mesh and log_meshes docs. #1286
- Add guidelines for adding dependencies in a PR #1431
- Add a few more sections to
CODE_STYLE.md#1365 - Fixup for some doc links #1314
- Document undocumented environment variables on help page. #1335
- Link to SDK operating modes doc in both SDK #1330
- Improve the docs of
- More information in
--version#1388 - Remove already broken
showmethod from Python SDK #1429 - Analytics
- Versioned log streams #1420
- Fix path issues when running debug Viewer within workspace #1341
- Detailed errors for re_renderer
include_file!#1339 - Limit logging in web-viewer to
warnin order to workaround a crash issue (and reduce log spam) 1514 - Fix disabling API through
initnot working #1517
CI, testing & build improvements
- Reduce build dependencies
- Use different artifact names for wasm/js in debug builds #1428
- Separate Mac wheels & trigger wheel build from UI #1499
- Add spell checking to CI #1492
- Repo size
- Python
- Testing
- Add a test of memory use when logging a lot of big images #1372
- Switch ci_docker to a container based on ubuntu 20.04 #1334
- Release handling
- Switch release action to ncipollo #1489
- Fix our continuous pre-releases #1458
- Delete the prerelease before creating the new one #1485
- Set prerelease to true even for version-tagged CI job #1504
- Let the release job take care of creating the tag #1501
- Use
cargo update -winstead ofcargo checkwhen prepping prerelease #1500 - Use prerelease tag instead of latest and update pointer on prerelease #1481
- Include date in pre-release version #1472
- Switch pre-release action to ncipollo/release-action #1466
- Disallow some methods and types via Clippy#1411
Other non-user-facing refactors
- Fix: don't create a dummy LogDb when opening the Rerun Menu #1440
re_rendererDraw Phasesin preparation of executingRendererseveral times on different targets #1419- Simplify bind group allocation call by passing pool collection object. #1459
- Interior mutable buffer/texture/bindgroup pools #1374
- Rename all instances of
frame_maintenancetobegin_frame#1360 - Texture & buffer call now wgpu's
destroyon removal from pool #1359 - Arrow buffers as (optional) first-class citizen #1482
- Log static re_renderer resource generation #1464
- Internal log_text_entry_internal to break circular deps #1488
- Delete ClassicTensor and cleanup #1456
- Fix re_renderer file watcher watching the same file several times #1463
- Analytics
- Introduce
DeserializableComponenttrait and high-levelquery_latest#1417
0.2.0 - 2023-02-14
First public release!





