Skip to content

Latest commit

 

History

History
3022 lines (2539 loc) · 233 KB

CHANGELOG.md

File metadata and controls

3022 lines (2539 loc) · 233 KB

Rerun changelog

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: http://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: http://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 ShowLabels component, which controls whether instances’ labels are shown #7249 (thanks @kpreid!)
  • Refactor MediaType guessing #7326

🌊 C++ API

  • Add nullptr check when forwarding from component to datatype #7430

🐍 Python API

  • Add missing show_labels and draw_order arguments 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_viewer method with WebViewerConfig::host_web_viewer #7553
  • Fix Rust's TimeColumn::new_seconds/new_nanos creating 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
  • Caches per 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 filter and take kernels early out where it makes sense #7704

🧑‍🏫 Examples

📚 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 time crate to 0.3.36, fixing compilation on newer Rust versions #7308

0.18.1 - Bug fixes and performance improvements

🌊 C++ API

  • Install sdk_info.h even if RERUN_INSTALL_RERUN_C option is OFF #7246 (thanks @traversaro!)

🐍 Python API

  • Fix VisualizerOverrides serializer 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 Asset3D embedded rgb(a) textures #7251
  • Fix Chunk::component_batch_raw not checking the bitmap first #7286
  • Fix and test all known HybridResults issues 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_BYTES to 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 puffin to 0.19.1, preventing a possible build failure #7221 (thanks @kpreid!)
  • Update time crate to 0.3.36, fixing compilation on newer Rust versions #7228

0.18.0 - Ingestion speed and memory footprint

0.18.Release.hero.mp4

✨ 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 send family 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.Scalar(math.sin(step / 10.0)))

Using send() (fast, memory efficient):

rr.init("rerun_example_send_columns", spawn=True)

rr.send_columns(
    "scalars",
    times=[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::Scalar::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!

instancing in action All four tetrahedron meshes on this screen share the same vertices and are instanced using an InstancePoses3D archetype with 4 different translations

⚠️ Breaking changes

  • .rrd files from older versions won't load correctly in Rerun 0.18
  • mesh_material: Material has been renamed to albedo_factor: AlbedoFactor #6841
  • Transform3D is no longer a single component but split into its constituent parts. From this follow various smaller API changes
  • Python: NV12/YUY2 are now logged with Image
  • ImageEncoded is deprecated and replaced with EncodedImage (JPEG, PNG, …) and Image (NV12, YUY2, …)
  • DepthImage and SegmentationImage are no longer encoded as a tensors, and expects its shape in [width, height] order

🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-18

🔎 Details

🪵 Log API

  • Add Ellipsoids3D archetype #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.ImageEncoded with PNG and JPEG support #6874
  • New transform components: Translation3D & TransformMat3x3 #6866
  • Add Scale3D component #6892
  • Angle datatype stores now only radians #6916
  • New DepthImage archetype #6915
  • Port SegmentationImage to the new image archetype style #6928
  • Add components for RotationAxisAngle and RotationQuat #6929
  • Introduce TransformRelation component #6944
  • New LeafTransform3D, replacing OutOfTreeTransform3D #7015
  • Remove Scale3D/Transform3D/TranslationRotationScale3D datatypes, remove Transform3D component #7000
  • Rewrite Image archetype #6942
  • Use LeafTranslation (centers), LeafRotationQuat and LeafRotationAxisAngle directly on Boxes3D/Ellipsoids3D #7029
  • Removed now unused Rotation3D component & datatype #7030
  • Introduce new ImageFormat component #7083

🌊 C++ API

  • Fix resetting time destroying recording stream #6914
  • Improve usability of rerun::Collection by providing free functions for borrow & 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 ImageEncoded to ImageEncodedHelper #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 Transforms doc 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 Boxes3D and Ellipsoids #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 --blueprint to plot_dashboard_stress #6996
  • Add Transformables subscriber for improved TransformContext perf #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
    • Chunk concatenation primitives #6857
    • Implement on-write Chunk compaction #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

📚 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 Timelines doc 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 greys #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

  • Add missing props to React package #6895
  • Fix multi rrd on app.rerun.io #6972

✨ 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 Chunk component-level helpers and UnitChunk #6990
  • Vastly improved support for deserialized iteration #7024
  • Improved CLI: support wildcard inputs for all relevant rerun rrd subcommands #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 RangeQueryOptions directly within RangeQuery #7131

📦 Dependencies

  • Update to glam 0.28 & replace macaw with fork re_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

Export-1720079627846_compressed.mp4

📖 Release blogpost: https://rerun.io/blog/blueprint-overrides

🧳 Migration guide: http://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!
  • 🕸️ 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 new rerun-notebook package, which is used internally by [rerun-sdk].
  • 🧑‍🏫 New Examples
  • 🛠️ Improved the logging API with many new and updated archetypes and components (see migration guide)
  • 🖼️ TensorView is 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

  • HalfSizes2D has been renamed to HalfSize2D
  • HalfSizes3D has been renamed to HalfSize3D
  • .rrd files from older versions won't load in Rerun 0.17

🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-17

🔎 Details

🪵 Log API

  • Introduce chunks and use them on the client side:
    • Part 0: improved arrow chunk formatters #6437
    • Part 1: introduce Chunk and its suffle/sort routines #6438
    • Part 2: introduce TransportChunk #6439
    • Part 3: micro-batching #6440
    • Part 4: integrations #6441
  • Remove unused scalar scattering component #6471
  • Introduce ImagePlaneDistance Component #6505
  • Introduce new archetype for Axes3D #6510
  • Expose Colormap component for DepthImage, depth image colormap now used outside of reprojection #6549
  • TimeSeriesAggregation can now be set per SeriesLine (and as blueprint default per View) #6558
  • Expose FillRatio component to configure DepthImage back-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 Axes3D archetype and add axis_length to Transform3D #6676
  • Expose UI point radii to logging & blueprint, remove old default radius settings in favor of blueprint default components #6678
  • Rename HalfSizes2D/3D to HalfSize2D/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 Interactive component #6542
  • Python components now implement the ComponentBatchLike interface #6543
  • Allow streaming to the viewer from the cell where it's created #6640
  • Introduce new Python API for setting overrides #6650
  • Publish rerun_notebook in CI #6641

🦀 Rust API

  • All components implement the Default trait now in Rust #6458
  • Codegen DerefMut & Deref for 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=gl only working together with WGPU_BACKEND env-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 & FillRatio in 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:
    • Part 1: ensure background is painted on rounded pixels #6376
    • Part 2: convert all use of legacy list time to list_item2 #6377
    • Part 3: rename list_item2 to list_item #6378
  • 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 UiStack to implement full span widgets #6491
  • Use list_item for the component list in InstancePath::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_header into re_ui::SectionCollapsingHeader using re_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 ButtonContent and 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's PlotLegend #6400
  • Extracted several re_viewer parts into standalone crates: re_viewport_blueprint #6405, re_context_menu #6428, re_blueprint_tree#6427, and re_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

Release.0.16.mp4

✨ Overview & highlights

  • 🟦 Customize views in code: We started exposing some view properties in the blueprint!
    • 📋 Included are:
      • Visible time ranges
      • Time Series legend & y-axis configuration
      • 2D & 3D View background color
      • 2D View bounds
    • 📚 learn more on the new view blueprint doc pages
    • 🚀 …more to come in the future!
  • 🕰️ Deprecated timeless in favor of new static logging
    • 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.
  • 🖼️ 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, introduce TriangleIndices and 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 sid on 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

🐍 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 PlotLegend and ScalarAxis (axis_y) properties on TimeSeriesView blueprint #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_STRICT environment variable if not specified in rr.init #6341

🦀 Rust API

  • Static-aware Rust SDK #5540
  • Remove need for tokio runtime for supporting serve #6043
  • Add TextDocument::from_markdown constructor #6109
  • Document all public item in re_types #6146
  • Fix crash on i32 overflow 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-wheel command #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-generic ListItem and LabelContent legacy back-port #6161
  • ListItem 2.0 (part 2): introduce PropertyContent for two-column, property-like list items #6174
  • ListItem 2.0 (part 3): PropertyContent column auto-sizing #6182
  • ListItem 2.0 (part 4): only allocate space for property action buttons when needed #6183
  • ListItem 2.0 (part 5): deploy to the Visualizers and Overrides UIs #6184
  • ListItem 2.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_comms to work without async & tokio runtime #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_server no longer needs tokio, split out sync code path #6030
  • Replace hyper with tiny_http to serve http files for serve functionality #6042
  • New data APIs 13: sunset legacy cache crate #5994
  • New data APIs 15: one query crate to rule them all #6036
  • ListItem 2.0 (part 0): re_ui_example refactor #6148
  • Fix: re_sdk no longer depends on rustls #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: ClampedZip iterator 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: RangeZip iterator 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_url correctly point to app.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 InstanceKey from our logging APIs #5395 (migration guide)
  • ❌ Remove groups from blueprints panel #5326

🔎 Details

🪵 Log API

  • Replace MarkerShape with code-generated enum type #5336
  • Key-less data model 1: scrap InstanceKey from 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_C option to disable installation of rerun_c library #5374 (thanks @traversaro!)
  • CMake: Fix install not finding external arrow for dynamic linking #5375 (thanks @traversaro!)
  • Make pinhole.hpp robust against min/max preprocessor macros (typically from windows.h) #5432
  • Build C++ SDK for Linux ARM64 #5489
  • Generate fewer .cpp files: Inline forward serialization of transparent components to their respective datatypes #5544
  • Fix RERUN_C_BUILD_ARTIFACT path value if CARGO_BUILD_TARGET env variable is set #5547 (thanks @traversaro!)

🐍 Python API

  • All Python components that wrap a bool now implement __bool__ #5400
  • Add the remaining space views and name them consistently #5498
  • Add option to include blueprint in an .rrd when 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_order not 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 .rbl blueprint 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_logging example #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_scenes example, leveraging the viewer's ability to re-project 3D->2D #5510
  • Add blueprint to nuscenes example #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 controlnet package 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_scenes example #5711 (thanks @BirgerMoell!)
  • Improve readme of depth_guided_stable_diffusion example #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 ListItem indentation 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:
    • Refactor #5392
    • Add support to show/hide DataResults #5397
    • Add support for removing DataResult from a space view #5407
    • Create a new space view with selected entities #5411
    • Add context menu to streams tree #5422
    • Add "Expand/Collapse all" actions #5433
    • Cleanup #5456
  • 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 .wasm with debug symbols #5708

🧑‍💻 Dev-experience

  • Build wheels for Linux ARM64 #5511

📦 Dependencies

  • Update wgpu to 0.19.3 #5409
  • Update h2 to 0.3.26 to address RUSTSEC-2024-0332 #5775

🤷‍ Other

  • Build CLI for Linux ARM64 #5503
  • Allow hiding/showing entity subtrees under shown/hidden parent tree #5508
  • Introduce basic support for $origin substitution in EntityPathFilter #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 Selection using IndexMap and 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

0.14.release.video.final.mp4

✨ 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 spawn starting 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 to rerun.Transform3D #5270

🦀 Rust API

  • Fix using rerun crate 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

📚 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 tungstenite to 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 & SeriesPoint archetypes 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
  • 🌁 Viewer:

    • The number of compute threads can now be controlled using the --threads/-j flag
    • 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.
  • 🚚 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 Hierarchy button in the Selection Panel for containers.
  • 🦀 The Rust SDK now exposes an optional integration with the mint crate

  • 🕸️ The web UI SDK now supports loading multiple .rrd URLs

  • 🔺 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=webgpu url 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 mint crate #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_BYTES and data size estimations #5086
  • Make rectangle_fs.wgsl compile 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 Mesh3D logging #4894

🚀 Performance improvements

  • Add --threads / -j to 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:
    • Cached 2D & 3D box clouds #5000
    • Cached 2D & 3D line clouds #5083
    • Cached 2D & 3D arrow clouds #5088
  • 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 TimeSeriesScalar to use Scalar instead #5042

📚 Docs

  • Improve documentation of the Clear archetype #4760
  • DisconnectedSpace now 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
  • Selection improvements:
    • Click a recording to select it #4761
    • Press the escape key to clear the current selection #5103
    • Clear selection when clicking blank space in the Blueprint View #4831
    • Selecting/hovering components now highlights their parent entity #4748
  • 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 .rrd URLs #4740
  • Unify web_viewer/index.html and index_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 egui trunk #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::TileId to proper blueprint IDs in ViewportBlueprint API #4900

📦 Dependencies

  • Remove egui_plot as dependency from re_sdk #5099
  • Update to egui 0.25 and winit 0.29 #4732
  • Prune dependencies from rerun and re_sdk #4824
  • Relax pyarrow dependency to >=14.0.2 #5054
  • Update egui_tiles to 0.7.2 #5107

🤷 Other

🤷 Other

  • Add rerun --serve and 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 Mat3x3 and Mat4x4 constructors are column major #4842

🦀 Rust API

  • Fix entity_path_vec! and entity_path! depending on ToString being in scope #4766 (thanks @kpreid!)

🪳 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.lock in rerun-cli crate #4750
  • Replace atty dependency with std::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_id in 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/-o to 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_id in Rust SDK #4383
  • Add --stdout/-o to 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:
    • Standard input/output support 1: stream RRD data from stdin #4511
    • Standard input/output support 2: Rust SDK stdout impl/examples/docs #4512
    • Standard input/output support 3: Python SDK stdout impl/examples/docs #4513
    • Standard input/output support 4: C++ SDK stdout impl/examples/docs #4514
  • Support for custom DataLoaders:
    • DataLoaders 0: utility for hierarchical EntityPath from file path #4516
    • DataLoaders 1: introduce, and migrate to, DataLoaders #4517
    • DataLoaders 2: add text-based DataLoader (.txt, .md) #4518
    • DataLoaders 3: add 3D point cloud DataLoader (.ply) #4519
    • DataLoaders 4: add generic folder DataLoader #4520
    • DataLoaders 5: add support for external binary DataLoaders (PATH) #4521
    • DataLoaders 6: first-class support for Incompatible #4565
    • DataLoaders 7: support for custom DataLoaders #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

  • Parallelize Space View system evaluation #4460
  • Limit server memory #4636

🧑‍🏫 Examples

📚 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 EntityProperties to SpaceViewClass methods #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_plot auto-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_ui and 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 wgpu profiling 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 SpaceViewClass and changed TextSpaceView name to "Text Log" #4386
  • Local-first wheel publishing #4454
  • Remove backtraces on error when running rerun binary #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 StoreDb to EntityDb, re_data_store -> re_entity_db #4670
  • Rename re_arrow_store to re_data_store #4672

📦 Dependencies

  • Update egui and wgpu #4111
  • Update Rust to 1.76.0 #4390

🤷 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

visible.time.range.mp4

✨ 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.log yet
  • 🦀 The new StoreSubscriber trait 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:

Special thanks to @dvad & @dangush for contributing!

🔎 Details

🌊 C++ SDK

  • Support std::chrono types for set_time on rerun::RecordingStream #4134
  • Improve rerun_cpp readme & CMakeLists.txt #4126
  • Replace the many parameters of rerun::spawn / rerun::RecordingStream::spawn with a struct #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::ComponentBatch to rerun::Collection (and related constructs) #4236
  • Use rerun::Collection almost everywhere we'd use std::vector before #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_demo package #4293
  • Python: don't catch KeyboardInterrupt and SystemExit #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 #4234
  • DataStore introduce StoreEvents #4203
  • DataStore introduce StoreViews #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

  • C++ Windows CI #4110
  • Add macOS C++ CI, add Linux C++20 CI #4120

0.10.0 - C++ SDK - 2023-10-30

Rerun is an easy-to-use visualization toolbox for computer vision and robotics.

Release blog post: https://www.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 spawn method in the Rust SDK

  • Add support for NV12-encoded images #3541 (thanks @zrezke!)

  • 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_STRICT environment 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.Path for rr.save #4036
  • Add disable_timeline function #4068
  • Support fast install of the Rerun Viewer with cargo binstall rerun-cli thanks to cargo binstall

🦀 Rust SDK

  • Introduce re_types_core #3878
  • Fix crash when using RecordingStream::set_thread_local on macOS #3929
  • Add improved spawn function #3996 #4031
  • Redesign clap integration #3997 #4040
  • RecordingStream: introduce connect_opts #4042
  • Add disable_timeline function #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 --strict flag with RERUN_PANIC_ON_WARN env-var #3872
  • Support NV12-encoded images #3541 (thanks @zrezke!)

🧑‍🏫 Examples

  • --max-frame support for tracking examples #3835

📚 Docs

  • Synchronize code examples and their screenshots #3954
  • Improve docs for TextDocument example #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 taplo output 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 the rerun script to call into rerun_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.

✨ 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's array convenience argument #3719
  • Fix default stroke width handling in log_line_strip_Xd and log_obbs #3720
  • Warn/raise when passing incompatible objects to log #3727
  • Refactor rerun.AnyValues to handle None input more gracefully #3725
  • Default DisconnectedSpaces boolean to true in Python #3760

🦀 Rust SDK

  • Fix return type of entity_path!() and entity_path_vec!() on empty input #3734 (thanks @kpreid!)
  • Export RecordingStreamError #3777

🪳 Bug fixes

  • Fix bug when joining cleared optional components #3726
  • Update winit to 0.28.7 to fix UI glitch on macOS Sonoma #3763
  • Show 1D-tensors as bar charts #3769
  • Fix loading of .obj mesh files #3772
  • Fix crash when loading huge image #3775
  • Fix performance regression when viewing images and tensors #3767

🌁 Viewer improvements

  • Turn on AccessKit accessibility integration #3732
  • Display space views using ViewCoordinates from 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.rs shenanigans #3814

🗣 Refactors

  • Refactor our build.rs files #3789

📦 Dependencies

  • Update ewebsock to 0.4.0 #3729
  • Update winit to 0.28.7 #3763

0.9.0 - New logging API - 2023-10-05

Rerun is an easy-to-use visualization toolbox for computer vision and robotics.

✨ 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!

0.9.0 Welcome Screen

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 VecND extensions #2896
  • Add default value for info argument of ClassDescription #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 FileSink actually flush its data when asked to #3525
  • TextLog integrations 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 reset command #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/path links 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_simple and 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 \example in 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 ListItem in blueprint tree UI #3118
  • Use ListItem in 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 Page refresh #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://hostname when an ?url= is missing #3345

📈 Analytics

  • Recreate the analytics state directory if necessary before creating pipeline #2878
  • Update resolved analytics URL #3101
  • Use ehttp in re_analytics #3155
  • Web analytics #3166
  • Keep track of how files are sourced for analytics and UI #3371

🧑‍💻 Dev-experience

  • Make cargo codegen work irrelevant of CWD #2913
  • scripts/highlight_issues.py: print issues with no comments #2939
  • Use prettyplease to 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-rust from 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/checkout to use explicit ref #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_renderer crash #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_view example 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

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 Helix to demo.rerun.io #2930

📈 Analytics

  • Make sure re_analytics never log higher than at debug level #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.

✨ Overview & highlights

  • log_pinhole is 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_xyz for 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.
    • See: log_linestrips_2d, log_linestrips_3d, #2822 and log_obbs #2823
  • Rust users that build their own Viewer applications can now add fully custom Space Views. Find more information here.
  • New optional flush_timeout specifies how long Rerun will wait if a TCP stream is disconnected during a flush. #2821
    • In Rust, RecordingStream::connect now requires flush_timeout specified as an Option<Duration>.
      • To keep default behavior, this can be specified using the rerun::default_flush_time() helper.
    • In Python flush_init_sec is now an optional argument to rr.connect()
  • In Rust, the RecordingStream now offers a stateful time API, similar to the Python APIs. #2506
    • You can now call set_time_sequence, set_time_seconds, and set_time_nanos directly on the RecordingStream, which will set the time for all subsequent logs using that stream.
    • This can be used as an alternative to the previous MsgSender::with_time APIs.
  • 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
  • The web viewer now incremental loads .rrd files when streaming over HTTP. #2412

Open Photogrammetry Preview

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.experimental module 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.

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.init hasn'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_pinhole and 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 a MemorySinkStorage #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 dtype for depth images #2602
  • Change "Save Selection" command to Cmd+Alt+S #2631
  • Consistent transform visualization for all entities with transforms #2577
  • Improve log_pinhole and support non-RDF pinholes #2614

🚀 Performance improvements

  • Flush the batches every 8ms instead of 50 ms #2220
  • Replace image crate jpeg decoder with zune-jpeg #2376
  • Stream .rrd files 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.py script 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.py from just 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.save and suggest rerun instead of python -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 mut when using RenderContext #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.sh now 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_types as re_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 camino crate for UTF8 paths in re_types_builder #2637
  • Separate 2D & 3D spaceview classes, removal of ViewCategory, SpaceViewClass driven spawn heuristics #2716
  • Move object property heuristics to heuristics.rs #2764

📦 Dependencies

  • Version rand & friends at workspace level #2508
  • Update to PyO3 0.19 #2350
  • Pin half to 2.2.1 #2587

📘 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 Points2D archetype #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 Debug and Clone in Rust backend #2613
  • Generating (de)serialization code for dense unions in Rust backend #2626
  • Fix FixedSizeList deserialization edge-case + trivial optimizations #2673
  • Make Datatype & Component both inherit from Loggable #2677
  • Roundtrip-able Transform3Ds #2669
  • Don't inline recursive datatypes in Rust backend #2760
  • Automatically derive tuple_struct attr and trivial From impls where possible #2772
  • Introduce roundtrip-able Points3D archetype (py + rs) #2774
  • Add fmt::Debug implementations 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() in compute_dir_hash #2612
  • Support transparency at the semantic layer #2611
  • Don't use builtin required anymore, introduce nullable instead #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 compare to check whether 2 rrd files are functionally equivalent #2597
  • Remove files.exclude in 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 annotations in Python files #2377
  • Add jpeg_quality parameter to log_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 protoc for 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-docs repository into this monorepo #2284
  • Add manifest + readmes to examples #2309
  • Fix and clean up BUILD.md #2319
  • Link to /examples in PR description #2320
  • Make examples setup a separate page #2323
  • Add site_url to mkdocs.yml #2326
  • Add log_cleared to 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-bindgen to 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-cli with library wasm-bindgen-cli-support #2257
  • Fix manual release/dispatch workflows #2230
  • Add instructions on how to fix weird gsutil crash #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

  • Update xml-rs v0.8.13 -> v0.8.14 #2425
  • Update pip package requests to 2.31 with bug fix #2426

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 rerun binary is now with cargo install rerun-cli #2183
  • native_viewer is now an opt-in feature of the rerun library, 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.init if you want logging to work.
  • ⚠️ BREAKING: set_enabled has been removed. In order to disable logging at runtime, call set_global_data_recording(None). See also the doc section on this topic.
  • log_mesh_file: accept either path or bytes #2098
  • Add draw_order to 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_enabled has been removed. In order to disable logging at runtime, create a no-op recording via RecordingStream::disabled(). See also the doc section on this topic.
  • ⚠️ BREAKING: Session has been replaced by RecordingStream #1983
  • ⚠️ BREAKING: native_viewer is now an opt-in feature of the rerun library #2064
  • Rust SDK: bring back support for implicit splats #2059
  • Introduce a 2D DrawOrder component #2056
  • Add Tensor::from_image_file and Tensor::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 alt key 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 recent jupyter #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 unzip command 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: clock example for Rust #2000
  • Add scripts/run_all.py #2046
  • Check examples/python/requirements.txt in 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_dock to egui_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

🎨 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_primary with query_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 Caches to re_viewer_ctx and make it generic #2043
  • Move time control to re_viewer_context #2045
  • Move ViewerContext & ComponentUiRegistry to viewer_context #2047
  • Move data UI to new re_data_ui crate #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-cli failing 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_viewer build 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

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

23-04-20_17.08.46.patched.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_anything example 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 nyud example
  • 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_id as part of LogMsg #1778
  • New reset_time API #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_obb usage #1761
  • Always create the log_time timeline #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_viewer enabled #1856
  • Error instead of expect inside msg_encode #1857
  • Fix shutdown race condition in re_sdk_comms client #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 a BeginRecordingMsg #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 zipfile Python library instead of unzip command in arkitscene demo #1936
  • Fix backslashes in arkitscene rigid 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_convert primitive (de)serialization benchmarks #1742
  • arrow2 estimated_bytes_size benchmarks #1743
  • arrow2 erased 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 ARKitScenes example #1538 (thanks @pablovela5620!)
  • New example code for Facebook research's segment-anything #1788
  • Add minimal_options example for Rust SDK #1773 (thanks @h3mosphere!)
  • Remove manual depth projection from car and nyud examples #1869
  • Always spawn instead of fork in multiprocessing example #1922
  • Add --num-frames arg to canny (webcam) example #1923
  • Add argument parsing to rerun_demo #1925
  • Join threads at end of multithreading example #1934

📚 Docs

  • Add typing_extensions to requirements-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 EntityPathHash to be 64 bit #1723
  • Central GpuReadback handling 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 interactive flags #1829
  • Use GPU colormapping when showing images in the GUI #1865

🕸️ Web

  • Make CI publish latest tagged web-viewer to app.rerun.io #1725
  • Implement re_tuid::Tuid::random() on web #1796
  • Refactor the relationship between the assorted web / websocket servers #1844
  • Notebooks: make presentation_id consistent 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 LogMsg storage + 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.sh supports 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-index and 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

0.4.0 - Outlines, web viewer and performance improvements - 2023-03-28

release.0.4.0.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_point more forgiving and update docstring #1663
  • Add support for mesh vertex colors #1671

🦀 Rust SDK

  • ⚠️ Session::new has been replaced with SessionBuilder #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_session is now hidden behind the global_session feature 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-cli with fix for 2GiB bug #1605
  • Misc: make example in log_pinhole runnable #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_usage example 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

  • Very simple example streaming from an opencv camera #1502
  • Initial TurtleBot subscriber demo #1523

📚 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-math optimization 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 log as our log backend instead of tracing #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::poll on 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 & retire ComponentBundle #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

  • RFC: component-datatype conversions #1595
  • RFC: pre-proposal for blueprint store #1582

🧑‍💻 Dev-experience

  • Update rayon #1541
  • Fix some 1.68 clippy 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

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!

23-03-02_18.44.38.patched.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
    • Improved formatting of date-times in plots #1356
    • Labels for 3D objects have now a color can now be selected & hovered #1438
    • Scale factor is saved across sessions and more persistent between screens #1448
    • Showing tensors in the Viewer is now faster
  • 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 strict mode to the Python SDK where misuses of the API result in exceptions being raised.#1477
    • Fix disabling Python API through init not 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 time crate which had a security issue (CVE-2020-26235), thanks @mpizenberg for helping out!
    • Print more information & troubleshooting info on crash

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
    • re_renderer: implement depth cloud renderer #1415
    • Integrate depth clouds into Rerun #1421
    • CPU & GPU color maps #1484
    • Integrate GPU color maps into depth clouds #1486
  • 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
    • Direct conversion to dynamic image from Tensors #1455
    • Convert view_tensor to use the new native Tensors #1439
  • Add option to show performance metrics in the UI in release builds too #1444
  • Faster stable diffusion sample #1364
  • SDK: stream to disk with save feature #1405
  • re_renderer has now a direct CPU->GPU copy mechanism
    • CpuWriteGpuReadBelt for fast frame by frame memory transfers #1382
    • Uniform buffer utility using CpuWriteGpuReadBelt #1400
    • Use CpuWriteGpuReadBelt for mesh data gpu upload #1416

Small improvements & bugfixes

  • UI
    • Add scroll-bars the "Add/Remove entities" window #1445
    • Unify the time formatting between the time panel and the plot #1369
    • Timeline
      • Fix precision issue when zooming in on the timeline #1370
      • Improve the gap-detector #1363
    • Better time axis on plot view #1356
    • Prevent wrap on 'Streams' text #1308
    • Update to eframe 0.21.3 with fix for web text input #1311
  • re_renderer
    • Fix crash due to always expecting Rgba8Unorm backbuffer on Web & Bgra8Unorm on native #1413
    • Allow controlling the graphics backend & power preference through standard wgpu env vars #1332
  • 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 connect and serve #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
  • More information in --version #1388
  • Remove already broken show method from Python SDK #1429
  • Analytics
    • Send analytics events with callstacks on panics and signals #1409
    • Put all analytics to one bucket #1390
    • add event for when we serve the web-viewer .wasm #1379
    • register SDK language and data source #1371
    • Refactor analytics #1368
  • 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 warn in order to workaround a crash issue (and reduce log spam) 1514
  • Fix disabling API through init not working #1517

CI, testing & build improvements

  • Reduce build dependencies
    • Get rid of time 0.1.* dependency #1408
    • Remove unnecessary ordered-float #1461
    • Remove extraneous image features and dependencies #1425
    • Replace reqwest with ureq #1407
    • Remove derive_more dependency #1406
  • 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
    • Always create new orphaned branch for gh-pages #1490
    • GitHub Action to prevent large files #1478
  • Python
    • Remove the Python job path filters #1452
    • Use ruff for our Python lints #1378
    • Use python3 in the jobs that weren't tested in PR #1348
  • 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 -w instead of cargo check when 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_renderer
    • Draw Phases in preparation of executing Renderer several times on different targets #1419
      • Fix mesh creation failing to copy index data. #1473
      • do not silently drop draw phases #1471
    • Simplify bind group allocation call by passing pool collection object. #1459
    • Interior mutable buffer/texture/bindgroup pools #1374
    • Rename all instances of frame_maintenance to begin_frame #1360
    • Texture & buffer call now wgpu's destroy on 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
    • More ergonomic API #1410
    • Streamlining host vs. recorder python/rust versions #1380
    • Fix workspace detection #1437
  • Introduce DeserializableComponent trait and high-level query_latest #1417

Full Changelog

0.2.0 - 2023-02-14

First public release!