diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4bbfe730777e..239af1c67f7b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,26 +1,201 @@
# Rerun changelog
-## Unreleased
-[Commits since latest release](https://github.com/rerun-io/rerun/compare/latest...HEAD)
+## [Unreleased](https://github.com/rerun-io/rerun/compare/latest...HEAD)
+β¦
-* Fixed a bug in the image hover code, causing the wrong RGBA values to be printed π¬ [#1690](https://github.com/rerun-io/rerun/pull/1356)
-* Fixed a bug that caused points to be render too large [#1690](https://github.com/rerun-io/rerun/pull/1690)
+## [0.4.0](https://github.com/rerun-io/rerun/compare/v0.3.1...v0.4.0) - Outlines, web viewer and performance improvements
-## 0.3.1 - Remove potentially sensitive analytics
-[Commits](https://github.com/rerun-io/rerun/compare/v0.3.1...v0.3.0)
+
+
+
+## Overview & Highlights
+* Add support for mesh vertex colors [#1671](https://github.com/rerun-io/rerun/pull/1671)
+* Lower memory use [#1535](https://github.com/rerun-io/rerun/pull/1535)
+* Improve garbage collection [#1560](https://github.com/rerun-io/rerun/pull/1560)
+* Improve the web viewer [#1596](https://github.com/rerun-io/rerun/pull/1596) [#1594](https://github.com/rerun-io/rerun/pull/1594) [#1682](https://github.com/rerun-io/rerun/pull/1682) [#1716](https://github.com/rerun-io/rerun/pull/1716) β¦
+* Nice outlines when hovering/selecting
+* Add an example of forever-streaming a web-camera image to Rerun [#1502](https://github.com/rerun-io/rerun/pull/1502)
+* Fix crash-on-save on some versions of Linux [#1402](https://github.com/rerun-io/rerun/pull/1402)
+* And a lot of other bug fixes
+* Many performance improvements
+
+We now host an experimental and unpolished web-viewer at for anyone to try out!
+
+### In Detail
+
+#### π Python SDK
+- Expose all Rerun enums and types to main module scope [#1598](https://github.com/rerun-io/rerun/pull/1598)
+- Make `log_point` more forgiving and update docstring [#1663](https://github.com/rerun-io/rerun/pull/1663)
+- Add support for mesh vertex colors [#1671](https://github.com/rerun-io/rerun/pull/1671)
+
+#### π¦ Rust SDK
+- Refactor: `re_sdk` no longer depends on `re_viewer` [#1507](https://github.com/rerun-io/rerun/pull/1507)
+- Refactor `re_sdk::Session` [#1528](https://github.com/rerun-io/rerun/pull/1528)
+- Add support for mesh vertex colors [#1671](https://github.com/rerun-io/rerun/pull/1671)
+
+#### πͺ³ Bug Fixes
+- datastore: disable compaction (fixes 2x memory issue) [#1535](https://github.com/rerun-io/rerun/pull/1535)
+- Fix garbage collection [#1560](https://github.com/rerun-io/rerun/pull/1560)
+- Avoid using undefined extern "C" on windows [#1577](https://github.com/rerun-io/rerun/pull/1577)
+- Fix crash on decoding old .rrd files [#1579](https://github.com/rerun-io/rerun/pull/1579)
+- datastore: stabilize dataframe sorts [#1549](https://github.com/rerun-io/rerun/pull/1549)
+- Stop using infinities in wgsl shaders [#1594](https://github.com/rerun-io/rerun/pull/1594)
+- Workaround for alpha to coverage state leaking on (Web)GL renderer [#1596](https://github.com/rerun-io/rerun/pull/1596)
+- Use a patched `wasm-bindgen-cli` with fix for 2GiB bug [#1605](https://github.com/rerun-io/rerun/pull/1605)
+- Misc: make example in `log_pinhole` runable [#1609](https://github.com/rerun-io/rerun/pull/1609) (thanks [@Sjouks](https://github.com/Sjouks)!)
+- Early-out on zero-sized space-views to prevent crashes [#1623](https://github.com/rerun-io/rerun/pull/1623)
+- Print our own callstack on panics [#1622](https://github.com/rerun-io/rerun/pull/1622)
+- Handle ctrl+c to gracefully shutdown the server(s) [#1613](https://github.com/rerun-io/rerun/pull/1613)
+- Fix crash on serve exit, second attempt [#1633](https://github.com/rerun-io/rerun/pull/1633)
+- Fix wrong remove-tooltip for entities and groups [#1637](https://github.com/rerun-io/rerun/pull/1637)
+- Fix requiring requiring focus for shutdown via ctrl+c when starting viewer from command line [#1646](https://github.com/rerun-io/rerun/pull/1646)
+- Fix eye spin after eye reset [#1652](https://github.com/rerun-io/rerun/pull/1652)
+- Fix crash on negative radii by instead warning [#1654](https://github.com/rerun-io/rerun/pull/1654)
+- Fix crash when trying to listen on a taken TCP port [#1650](https://github.com/rerun-io/rerun/pull/1650)
+- Don't show 2D labels in 3D space views. [#1641](https://github.com/rerun-io/rerun/pull/1641)
+- Fix Z fighting with improved depth offset math [#1661](https://github.com/rerun-io/rerun/pull/1661)
+- Whether a spatial view is 2d or 3d is now reevaluated over time unless picked explicitly [#1660](https://github.com/rerun-io/rerun/pull/1660)
+- Update wgpu to v0.15.3, fixing meshes on Windows Chrome [#1682](https://github.com/rerun-io/rerun/pull/1682)
+- Fix a bug in the image hover code, causing the wrong RGBA values to be printed [#1690](https://github.com/rerun-io/rerun/pull/1690)
+- Fix a bug that caused points to be render too large [#1690](https://github.com/rerun-io/rerun/pull/1690)
+- Fix web crash on missing uniform buffer padding [#1699](https://github.com/rerun-io/rerun/pull/1699)
+- Fix `memory_usage` example relying on implicit recursive features [#1709](https://github.com/rerun-io/rerun/pull/1709)
+- Track changed state in nav mode combo box [#1703](https://github.com/rerun-io/rerun/pull/1703)
+- Fix crash-on-save by switching file-picker dialog to `xdg-portal` [#1402](https://github.com/rerun-io/rerun/pull/1402)
+- Change roll-shortcut from ALT to SHIFT [#1715](https://github.com/rerun-io/rerun/pull/1715)
+- Fix CpuWriteGpuReadBelt producing unaligned gpu buffer offsets [#1716](https://github.com/rerun-io/rerun/pull/1716)
+- Fix arrows requiring a radius to be visible [#1720](https://github.com/rerun-io/rerun/pull/1720)
+
+#### π Performance Improvements
+- Add re_arrow_store profile scopes [#1546](https://github.com/rerun-io/rerun/pull/1546)
+- datastore: early exit missing components at table level [#1554](https://github.com/rerun-io/rerun/pull/1554)
+- datastore: track bucket count in store stats & mem panel [#1555](https://github.com/rerun-io/rerun/pull/1555)
+- LogDb: dont split on index bucket size [#1558](https://github.com/rerun-io/rerun/pull/1558)
+- Introduce a simpler cache dedicated to just decode JPEGs [#1550](https://github.com/rerun-io/rerun/pull/1550)
+- Implement outlines for points 2d/3d/depth & use them for select & hover in Viewer [#1568](https://github.com/rerun-io/rerun/pull/1568)
+- Simplify ImageCache [#1551](https://github.com/rerun-io/rerun/pull/1551)
+- New time panel density graph [#1557](https://github.com/rerun-io/rerun/pull/1557)
+- Refactor the Arrow Mesh3D type to use zero-copy Buffers [#1691](https://github.com/rerun-io/rerun/pull/1691)
+- Remove the redundant costly transform check during categorization [#1695](https://github.com/rerun-io/rerun/pull/1695)
+- batching 3: `DataRow` & `DataTable` + no bundles outside of transport [#1673](https://github.com/rerun-io/rerun/pull/1673)
+
+#### π§βπ« Examples
+- Very simple example streaming from an opencv camera [#1502](https://github.com/rerun-io/rerun/pull/1502)
+- Initial TurtleBot subscriber demo [#1523](https://github.com/rerun-io/rerun/pull/1523)
+
+#### π Docs
+- Link to the Python SDK build instructions in `rerun_py/README.md` [#1565](https://github.com/rerun-io/rerun/pull/1565)
+
+#### πΌ UI Improvements
+- Fix combining outline mask for selection & hover [#1552](https://github.com/rerun-io/rerun/pull/1552)
+- Implement outlines for rectangles & use them for select & hover of image primitives in Viewer [#1559](https://github.com/rerun-io/rerun/pull/1559)
+- Show log messages in egui toast notifications [#1603](https://github.com/rerun-io/rerun/pull/1603)
+- Adapt UI for smaller screens [#1608](https://github.com/rerun-io/rerun/pull/1608)
+- Nicer toast notifications [#1621](https://github.com/rerun-io/rerun/pull/1621)
+- Don't hover things in 2D/3D views if we are dragging something [#1643](https://github.com/rerun-io/rerun/pull/1643)
+- Allow rolling 3D camera with primary mouse button + alt modifier [#1659](https://github.com/rerun-io/rerun/pull/1659)
+- Name space views after the space and indicate duplicate names [#1653](https://github.com/rerun-io/rerun/pull/1653)
+- Add banner about mobile browsers being unsupported [#1674](https://github.com/rerun-io/rerun/pull/1674)
+- Improve ui for tensors and color map selection [#1683](https://github.com/rerun-io/rerun/pull/1683)
+- Only show the mobile OS warning banner on web [#1685](https://github.com/rerun-io/rerun/pull/1685)
+- Improve the depth backprojection feature [#1690](https://github.com/rerun-io/rerun/pull/1690)
+- Swap overlay order of selection & hover outlines [#1705](https://github.com/rerun-io/rerun/pull/1705)
+- Turn on depth cloud backprojection by default [#1710](https://github.com/rerun-io/rerun/pull/1710)
+- Add radius boost for depth clouds on outline [#1713](https://github.com/rerun-io/rerun/pull/1713)
+
+#### π€·ββοΈ Other Viewer Improvements
+- Fix web feature name in error messages [#1521](https://github.com/rerun-io/rerun/pull/1521)
+- Use outlines for mesh selections instead of highlight colors [#1540](https://github.com/rerun-io/rerun/pull/1540)
+- Implement outlines for line renderer & use them for select & hover of "line-like" primitives in Viewer [#1553](https://github.com/rerun-io/rerun/pull/1553)
+- Load .rrd file over HTTP [#1600](https://github.com/rerun-io/rerun/pull/1600)
+- Revert "Handle ctrl+c to gracefully shutdown the server(s)" [#1632](https://github.com/rerun-io/rerun/pull/1632)
+- More eager GC, and remove `--fast-math` optimization for wasm [#1656](https://github.com/rerun-io/rerun/pull/1656)
+- Detect failure to install GUI log callback [#1655](https://github.com/rerun-io/rerun/pull/1655)
+- Warn when most of the RAM has been used up by Rerun [#1651](https://github.com/rerun-io/rerun/pull/1651)
+- Apply color maps to all types of depth tensors [#1686](https://github.com/rerun-io/rerun/pull/1686)
+- Size boosted outlines for points & lines, color & size tweaking [#1667](https://github.com/rerun-io/rerun/pull/1667)
+- Default point radius to 1.5 ui points [#1706](https://github.com/rerun-io/rerun/pull/1706)
+- When streaming an rrd from http: play it, don't follow it [#1707](https://github.com/rerun-io/rerun/pull/1707)
+
+#### πΈοΈ Web
+- Use `log` as our log backend instead of `tracing` [#1590](https://github.com/rerun-io/rerun/pull/1590)
+- Turn on allocation tracker at run-time and for web [#1591](https://github.com/rerun-io/rerun/pull/1591)
+- Set correct MIME types in re_web_viewer_server [#1602](https://github.com/rerun-io/rerun/pull/1602)
+- Upload web viewer to a bucket [#1606](https://github.com/rerun-io/rerun/pull/1606)
+- Use hostname for default websocket address [#1664](https://github.com/rerun-io/rerun/pull/1664)
+- Upload the colmap rrd file to gcloud [#1666](https://github.com/rerun-io/rerun/pull/1666)
+- Show a warning by default on mobile browsers [#1670](https://github.com/rerun-io/rerun/pull/1670)
+- Add analytics to the hosted index.html [#1675](https://github.com/rerun-io/rerun/pull/1675)
+- Always upload latest prerelease to a dedicated prefix [#1676](https://github.com/rerun-io/rerun/pull/1676)
+- Allow url param override on app.rerun.io [#1678](https://github.com/rerun-io/rerun/pull/1678)
+- Show the git commit in the about section in pre-release builds [#1677](https://github.com/rerun-io/rerun/pull/1677)
+- Update the web icon [#1688](https://github.com/rerun-io/rerun/pull/1688)
+
+#### π¨ Renderer Improvements
+- Outlines via masking & postprocessing in `re_renderer` [#1532](https://github.com/rerun-io/rerun/pull/1532)
+- Add missing profiling scopes in `re_renderer` [#1567](https://github.com/rerun-io/rerun/pull/1567)
+- Don't call `wgpu::Device::poll` on the web [#1626](https://github.com/rerun-io/rerun/pull/1626)
+- Merge final outline render into composite step in order to fix blending [#1629](https://github.com/rerun-io/rerun/pull/1629)
+- renderer: fix the groupby logic in mesh instancing [#1657](https://github.com/rerun-io/rerun/pull/1657)
+- Fix outlines being offset diagonally by about half a pixel [#1668](https://github.com/rerun-io/rerun/pull/1668)
+- Gpu readback belt for fast & easy data readback from gpu [#1687](https://github.com/rerun-io/rerun/pull/1687)
+- Make CpuWriteGpuReadBelt texture copies easier/less error prone [#1689](https://github.com/rerun-io/rerun/pull/1689)
+
+#### β¨ Other Enhancement
+- datastore: split out formatting & sanity checks in their own modules [#1625](https://github.com/rerun-io/rerun/pull/1625)
+- Add `rerun --save`: stream incoming log stream to an rrd file [#1662](https://github.com/rerun-io/rerun/pull/1662)
+- batching 1: introduce `DataCell` & retire `ComponentBundle` [#1634](https://github.com/rerun-io/rerun/pull/1634)
+- Data store batching 2: split out component traits [#1636](https://github.com/rerun-io/rerun/pull/1636)
+
+#### π Analytics
+- Analytics: don't spam warning when there is an HTTP connection problem [#1564](https://github.com/rerun-io/rerun/pull/1564)
+- Analytics: Rename "location" to "file_line" in the "crash-panic" event [#1575](https://github.com/rerun-io/rerun/pull/1575)
+
+#### π£ Merged RFCs
+- RFC: component-datatype conversions [#1595](https://github.com/rerun-io/rerun/pull/1595)
+- RFC: pre-proposal for blueprint store [#1582](https://github.com/rerun-io/rerun/pull/1582)
+
+#### π§βπ» Dev-experience
+- Update `rayon` [#1541](https://github.com/rerun-io/rerun/pull/1541)
+- Fix some `1.68` clippy lints [#1569](https://github.com/rerun-io/rerun/pull/1569)
+- Remove duplicated 'nix' crate [#1479](https://github.com/rerun-io/rerun/pull/1479)
+- Better MsgId format [#1566](https://github.com/rerun-io/rerun/pull/1566)
+- Lint vertical spacing in Rust code [#1572](https://github.com/rerun-io/rerun/pull/1572)
+- CI: Replace wasm_bindgen_check.sh with actually building the web-viewer [#1604](https://github.com/rerun-io/rerun/pull/1604)
+- Add --all-features to Rust Analyzer flags [#1624](https://github.com/rerun-io/rerun/pull/1624)
+- Run clippy for wasm, with own clippy.toml config file [#1628](https://github.com/rerun-io/rerun/pull/1628)
+- Update tokio v1.24.1 -> v1.26.0 [#1635](https://github.com/rerun-io/rerun/pull/1635)
+- Add a workflow input for running benchmarks manually [#1698](https://github.com/rerun-io/rerun/pull/1698)
+- Add missing } to fix rust workflow [#1700](https://github.com/rerun-io/rerun/pull/1700)
+- Fix `lint.py` [#1719](https://github.com/rerun-io/rerun/pull/1719)
+- Add a script that generates a changelog from recent PRs and their labels [#1718](https://github.com/rerun-io/rerun/pull/1718)
+
+#### π€·ββοΈ Other
+- Clean up opencv_canny example slightly [b487e550dcb87225858dc6f76b791a25e938e75e](https://github.com/rerun-io/rerun/commit/b487e550dcb87225858dc6f76b791a25e938e75e)
+- Lint fixes [9901e7c6735356b1970ddabc926bc5378d82e057](https://github.com/rerun-io/rerun/commit/9901e7c6735356b1970ddabc926bc5378d82e057)
+
+
+## [0.3.1](https://github.com/rerun-io/rerun/compare/v0.3.0...v0.3.1) - Remove potentially sensitive analytics
Remove potentially sensitive analytics, including path to rerun source code on panics, and rerun branch name when building from source [#1563](https://github.com/rerun-io/rerun/pull/1563)
-## 0.3.0
+## [0.3.0](https://github.com/rerun-io/rerun/compare/v0.2.0...v0.3.0)
### Overview & Highlights
After a successful launch a couple of weeks ago, we're back with our second release!
With a few exceptions this release focuses on internal refactors & improving our processes.
However, we think you'll enjoy these goodies that made it in nonetheless!
-https://user-images.githubusercontent.com/2910679/222510504-23871b8c-0bef-49c2-bbd2-37baab4247e8.mp4
+
+
You can now generate point clouds directly from depth textures and choose a wide variety of color maps.
Check out this [video](https://user-images.githubusercontent.com/1220815/223365363-da13585f-3a91-4cb8-a6ef-8a6fadbeb4eb.webm) on how to use it.
diff --git a/Cargo.lock b/Cargo.lock
index d13748b43166..1c295a1473d1 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -124,7 +124,7 @@ checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
[[package]]
name = "api_demo"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"clap 4.1.4",
@@ -1278,7 +1278,7 @@ dependencies = [
[[package]]
name = "dna"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"itertools",
"rand",
@@ -2708,7 +2708,7 @@ dependencies = [
[[package]]
name = "minimal"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"rerun",
]
@@ -3124,7 +3124,7 @@ dependencies = [
[[package]]
name = "objectron"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"clap 4.1.4",
@@ -3722,7 +3722,7 @@ dependencies = [
[[package]]
name = "raw_mesh"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"bytes",
@@ -3762,7 +3762,7 @@ dependencies = [
[[package]]
name = "re_analytics"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"crossbeam",
@@ -3783,7 +3783,7 @@ dependencies = [
[[package]]
name = "re_arrow_store"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"anyhow",
@@ -3808,7 +3808,7 @@ dependencies = [
[[package]]
name = "re_build_build_info"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"glob",
@@ -3817,18 +3817,18 @@ dependencies = [
[[package]]
name = "re_build_info"
-version = "0.3.1"
+version = "0.4.0"
[[package]]
name = "re_build_web_viewer"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"cargo_metadata",
]
[[package]]
name = "re_data_store"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"anyhow",
@@ -3852,14 +3852,14 @@ dependencies = [
[[package]]
name = "re_error"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
]
[[package]]
name = "re_format"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"arrow2",
"comfy-table 6.1.4",
@@ -3867,7 +3867,7 @@ dependencies = [
[[package]]
name = "re_int_histogram"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"criterion",
"insta",
@@ -3878,7 +3878,7 @@ dependencies = [
[[package]]
name = "re_log"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"env_logger",
"js-sys",
@@ -3891,7 +3891,7 @@ dependencies = [
[[package]]
name = "re_log_types"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"anyhow",
@@ -3935,7 +3935,7 @@ dependencies = [
[[package]]
name = "re_memory"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"backtrace",
@@ -3955,7 +3955,7 @@ dependencies = [
[[package]]
name = "re_query"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"arrow2",
@@ -3977,7 +3977,7 @@ dependencies = [
[[package]]
name = "re_renderer"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"anyhow",
@@ -4031,7 +4031,7 @@ dependencies = [
[[package]]
name = "re_sdk"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"arrow2",
@@ -4058,7 +4058,7 @@ dependencies = [
[[package]]
name = "re_sdk_comms"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"anyhow",
@@ -4074,7 +4074,7 @@ dependencies = [
[[package]]
name = "re_smart_channel"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"crossbeam",
"instant",
@@ -4082,7 +4082,7 @@ dependencies = [
[[package]]
name = "re_string_interner"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"nohash-hasher",
@@ -4093,7 +4093,7 @@ dependencies = [
[[package]]
name = "re_tensor_ops"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"bytemuck",
@@ -4105,7 +4105,7 @@ dependencies = [
[[package]]
name = "re_tuid"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"arrow2",
"arrow2_convert",
@@ -4118,7 +4118,7 @@ dependencies = [
[[package]]
name = "re_ui"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"eframe",
"egui",
@@ -4136,7 +4136,7 @@ dependencies = [
[[package]]
name = "re_viewer"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"anyhow",
@@ -4201,7 +4201,7 @@ dependencies = [
[[package]]
name = "re_web_viewer_server"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"cargo_metadata",
@@ -4218,7 +4218,7 @@ dependencies = [
[[package]]
name = "re_ws_comms"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"bincode",
@@ -4289,7 +4289,7 @@ checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157"
[[package]]
name = "rerun"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"anyhow",
"backtrace",
@@ -4325,7 +4325,7 @@ dependencies = [
[[package]]
name = "rerun_py"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"ahash 0.8.2",
"anyhow",
@@ -4432,7 +4432,7 @@ dependencies = [
[[package]]
name = "run_wasm"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"cargo-run-wasm",
"pico-args",
@@ -4975,7 +4975,7 @@ dependencies = [
[[package]]
name = "test_image_memory"
-version = "0.3.1"
+version = "0.4.0"
dependencies = [
"mimalloc",
"re_format",
diff --git a/Cargo.toml b/Cargo.toml
index b70d80928b72..baa3b459875f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,38 +16,38 @@ include = ["../../LICENSE-APACHE", "../../LICENSE-MIT", "**/*.rs", "Cargo.toml"]
license = "MIT OR Apache-2.0"
repository = "https://github.com/rerun-io/rerun"
rust-version = "1.67"
-version = "0.3.1"
+version = "0.4.0"
[workspace.dependencies]
# When using alpha-release, always use exact version, e.g. `version = "=0.x.y-alpha.z"
# This is because we treat alpha-releases as incompatible, but semver doesn't.
# In particular: if we compile rerun 0.3.0-alpha.0 we only want it to use
# re_log_types 0.3.0-alpha.0, NOT 0.3.0-alpha.4 even though it is newer and semver-compatible.
-re_analytics = { path = "crates/re_analytics", version = "0.3.1" }
-re_arrow_store = { path = "crates/re_arrow_store", version = "0.3.1" }
-re_build_build_info = { path = "crates/re_build_build_info", version = "0.3.1" }
-re_build_info = { path = "crates/re_build_info", version = "0.3.1" }
-re_build_web_viewer = { path = "crates/re_build_web_viewer", version = "0.3.1" }
-re_data_store = { path = "crates/re_data_store", version = "0.3.1" }
-re_error = { path = "crates/re_error", version = "0.3.1" }
-re_format = { path = "crates/re_format", version = "0.3.1" }
-re_int_histogram = { path = "crates/re_int_histogram", version = "0.3.1" }
-re_log = { path = "crates/re_log", version = "0.3.1" }
-re_log_types = { path = "crates/re_log_types", version = "0.3.1" }
-re_memory = { path = "crates/re_memory", version = "0.3.1" }
-re_query = { path = "crates/re_query", version = "0.3.1" }
-re_renderer = { path = "crates/re_renderer", version = "0.3.1" }
-re_sdk = { path = "crates/re_sdk", version = "0.3.1" }
-re_sdk_comms = { path = "crates/re_sdk_comms", version = "0.3.1" }
-re_smart_channel = { path = "crates/re_smart_channel", version = "0.3.1" }
-re_string_interner = { path = "crates/re_string_interner", version = "0.3.1" }
-re_tensor_ops = { path = "crates/re_tensor_ops", version = "0.3.1" }
-re_tuid = { path = "crates/re_tuid", version = "0.3.1" }
-re_ui = { path = "crates/re_ui", version = "0.3.1" }
-re_viewer = { path = "crates/re_viewer", version = "0.3.1" }
-re_web_viewer_server = { path = "crates/re_web_viewer_server", version = "0.3.1" }
-re_ws_comms = { path = "crates/re_ws_comms", version = "0.3.1" }
-rerun = { path = "crates/rerun", version = "0.3.1" }
+re_analytics = { path = "crates/re_analytics", version = "0.4.0" }
+re_arrow_store = { path = "crates/re_arrow_store", version = "0.4.0" }
+re_build_build_info = { path = "crates/re_build_build_info", version = "0.4.0" }
+re_build_info = { path = "crates/re_build_info", version = "0.4.0" }
+re_build_web_viewer = { path = "crates/re_build_web_viewer", version = "0.4.0" }
+re_data_store = { path = "crates/re_data_store", version = "0.4.0" }
+re_error = { path = "crates/re_error", version = "0.4.0" }
+re_format = { path = "crates/re_format", version = "0.4.0" }
+re_int_histogram = { path = "crates/re_int_histogram", version = "0.4.0" }
+re_log = { path = "crates/re_log", version = "0.4.0" }
+re_log_types = { path = "crates/re_log_types", version = "0.4.0" }
+re_memory = { path = "crates/re_memory", version = "0.4.0" }
+re_query = { path = "crates/re_query", version = "0.4.0" }
+re_renderer = { path = "crates/re_renderer", version = "0.4.0" }
+re_sdk = { path = "crates/re_sdk", version = "0.4.0" }
+re_sdk_comms = { path = "crates/re_sdk_comms", version = "0.4.0" }
+re_smart_channel = { path = "crates/re_smart_channel", version = "0.4.0" }
+re_string_interner = { path = "crates/re_string_interner", version = "0.4.0" }
+re_tensor_ops = { path = "crates/re_tensor_ops", version = "0.4.0" }
+re_tuid = { path = "crates/re_tuid", version = "0.4.0" }
+re_ui = { path = "crates/re_ui", version = "0.4.0" }
+re_viewer = { path = "crates/re_viewer", version = "0.4.0" }
+re_web_viewer_server = { path = "crates/re_web_viewer_server", version = "0.4.0" }
+re_ws_comms = { path = "crates/re_ws_comms", version = "0.4.0" }
+rerun = { path = "crates/rerun", version = "0.4.0" }
ahash = "0.8"
anyhow = "1.0"
diff --git a/crates/rerun/src/run.rs b/crates/rerun/src/run.rs
index b9dc53fffcf0..06afe4b7f7a0 100644
--- a/crates/rerun/src/run.rs
+++ b/crates/rerun/src/run.rs
@@ -209,7 +209,7 @@ where
io_err.kind() == std::io::ErrorKind::AddrInUse
}) =>
{
- re_log::warn!("{err}. Another Rerun instance is probably running.");
+ re_log::warn!("{err}");
Ok(1)
}
// Unclean failure -- re-raise exception
diff --git a/examples/README.md b/examples/README.md
index c9652bae8860..ce039ccac2e7 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -4,5 +4,5 @@
* [Rust](rust)
> Note: Make sure your SDK version matches the code in the examples.
-For example, if your SDK version is `0.3.1`, check out the matching tag
-for this repository by running `git checkout v0.3.1`.
+For example, if your SDK version is `0.4.0`, check out the matching tag
+for this repository by running `git checkout v0.4.0`.
diff --git a/examples/python/README.md b/examples/python/README.md
index 917985daeff7..7cfc35518eea 100644
--- a/examples/python/README.md
+++ b/examples/python/README.md
@@ -7,8 +7,8 @@ Read more about our examples at Note: Make sure your SDK version matches the code in the examples.
-For example, if your SDK version is `0.3.1`, check out the matching tag
-for this repository by running `git checkout v0.3.1`.
+For example, if your SDK version is `0.4.0`, check out the matching tag
+for this repository by running `git checkout v0.4.0`.
## Dependencies
Each example comes with its own set of dependencies listed in a `requirements.txt` file. For example, to install dependencies and run the toy `car` example (which doesn't need to download any data) run:
diff --git a/scripts/generate_changelog.py b/scripts/generate_changelog.py
index eff040b54c48..c831ef2c043e 100755
--- a/scripts/generate_changelog.py
+++ b/scripts/generate_changelog.py
@@ -40,9 +40,16 @@ def get_github_token() -> str:
REPO = "rerun"
COMMIT_RANGE = "latest..HEAD"
INCLUDE_LABELS = False # It adds quite a bit of visual noise
+OFFICIAL_RERUN_DEVS = [
+ "emilk",
+ "jleibs",
+ "nikolausWest",
+ "teh-cmc",
+ "Wumpf",
+]
-def pr_title_labels(pr_number: int) -> Tuple[Optional[str], List[str]]:
+def pr_user_title_labels(pr_number: int) -> Tuple[Optional[str], Optional[str], List[str]]:
url = f"https://api.github.com/repos/{OWNER}/{REPO}/pulls/{pr_number}"
gh_access_token = get_github_token()
headers = {"Authorization": f"Token {gh_access_token}"}
@@ -52,10 +59,11 @@ def pr_title_labels(pr_number: int) -> Tuple[Optional[str], List[str]]:
# Check if the request was successful (status code 200)
if response.status_code == 200:
labels = [label["name"] for label in json["labels"]]
- return (json["title"], labels)
+ gh_user_name = json["user"]["login"]
+ return (gh_user_name, json["title"], labels)
else:
print(f"ERROR: {response.status_code} - {json['message']}")
- return (None, [])
+ return (None, None, [])
def commit_title_pr_number(commit: Any) -> Tuple[str, Optional[int]]:
@@ -102,18 +110,20 @@ def print_section(title: str, items: List[str]) -> None:
summary = f"{title} [{commit.hexsha}](https://github.com/{OWNER}/{REPO}/commit/{commit.hexsha})"
misc.append(summary)
else:
- (pr_title, labels) = pr_title_labels(pr_number)
+ (gh_user_name, pr_title, labels) = pr_user_title_labels(pr_number)
title = pr_title or title # We prefer the PR title if available
summary = f"{title} [#{pr_number}](https://github.com/{OWNER}/{REPO}/pull/{pr_number})"
if INCLUDE_LABELS and 0 < len(labels):
summary += f" ({', '.join(labels)})"
- added = False
+ if gh_user_name not in OFFICIAL_RERUN_DEVS:
+ summary += f" (thanks [@{gh_user_name}](https://github.com/{gh_user_name})!)"
if labels == ["β΄ release"]:
- # Ignore release PRs
- continue
+ continue # Ignore release PRs
+
+ added = False
# Some PRs can show up underm multiple sections:
if "π python API" in labels: