From 2fd72a602ca765deca9f8f156dc96ddef9c3fab7 Mon Sep 17 00:00:00 2001
From: Clement Rey <cr.rey.clement@gmail.com>
Date: Tue, 28 Jan 2025 17:31:50 +0100
Subject: [PATCH 1/2] rerun 0.22

---
 Cargo.lock | 307 +++++++++++++++++++++++++++++------------------------
 Cargo.toml |  10 +-
 README.md  |   5 +-
 3 files changed, 177 insertions(+), 145 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index c12a668..c6d5ffb 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -216,15 +216,16 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
 
 [[package]]
 name = "arrow"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c91839b07e474b3995035fd8ac33ee54f9c9ccbbb1ea33d9909c71bffdf1259d"
+checksum = "eaf3437355979f1e93ba84ba108c38be5767713051f3c8ffbf07c094e2e61f9f"
 dependencies = [
  "arrow-arith",
  "arrow-array",
  "arrow-buffer",
  "arrow-cast",
  "arrow-data",
+ "arrow-ipc",
  "arrow-ord",
  "arrow-row",
  "arrow-schema",
@@ -234,9 +235,9 @@ dependencies = [
 
 [[package]]
 name = "arrow-arith"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "855c57c4efd26722b044dcd3e348252560e3e0333087fb9f6479dc0bf744054f"
+checksum = "31dce77d2985522288edae7206bffd5fc4996491841dda01a13a58415867e681"
 dependencies = [
  "arrow-array",
  "arrow-buffer",
@@ -249,9 +250,9 @@ dependencies = [
 
 [[package]]
 name = "arrow-array"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd03279cea46569acf9295f6224fbc370c5df184b4d2ecfe97ccb131d5615a7f"
+checksum = "2d45fe6d3faed0435b7313e59a02583b14c6c6339fa7729e94c32a20af319a79"
 dependencies = [
  "ahash",
  "arrow-buffer",
@@ -265,9 +266,9 @@ dependencies = [
 
 [[package]]
 name = "arrow-buffer"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e4a9b9b1d6d7117f6138e13bc4dd5daa7f94e671b70e8c9c4dc37b4f5ecfc16"
+checksum = "2b02656a35cc103f28084bc80a0159668e0a680d919cef127bd7e0aaccb06ec1"
 dependencies = [
  "bytes",
  "half",
@@ -276,9 +277,9 @@ dependencies = [
 
 [[package]]
 name = "arrow-cast"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc70e39916e60c5b7af7a8e2719e3ae589326039e1e863675a008bee5ffe90fd"
+checksum = "c73c6233c5b5d635a56f6010e6eb1ab9e30e94707db21cea03da317f67d84cf3"
 dependencies = [
  "arrow-array",
  "arrow-buffer",
@@ -296,9 +297,9 @@ dependencies = [
 
 [[package]]
 name = "arrow-data"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4e75edf21ffd53744a9b8e3ed11101f610e7ceb1a29860432824f1834a1f623"
+checksum = "b7f2861ffa86f107b8ab577d86cff7c7a490243eabe961ba1e1af4f27542bb79"
 dependencies = [
  "arrow-buffer",
  "arrow-schema",
@@ -316,11 +317,25 @@ dependencies = [
  "serde",
 ]
 
+[[package]]
+name = "arrow-ipc"
+version = "53.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0270dc511f11bb5fa98a25020ad51a99ca5b08d8a8dfbd17503bb9dba0388f0b"
+dependencies = [
+ "arrow-array",
+ "arrow-buffer",
+ "arrow-cast",
+ "arrow-data",
+ "arrow-schema",
+ "flatbuffers",
+]
+
 [[package]]
 name = "arrow-ord"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ece7b5bc1180e6d82d1a60e1688c199829e8842e38497563c3ab6ea813e527fd"
+checksum = "c6f202a879d287099139ff0d121e7f55ae5e0efe634b8cf2106ebc27a8715dee"
 dependencies = [
  "arrow-array",
  "arrow-buffer",
@@ -333,9 +348,9 @@ dependencies = [
 
 [[package]]
 name = "arrow-row"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "745c114c8f0e8ce211c83389270de6fbe96a9088a7b32c2a041258a443fe83ff"
+checksum = "a8f936954991c360ba762dff23f5dda16300774fafd722353d9683abd97630ae"
 dependencies = [
  "ahash",
  "arrow-array",
@@ -347,15 +362,15 @@ dependencies = [
 
 [[package]]
 name = "arrow-schema"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b95513080e728e4cec37f1ff5af4f12c9688d47795d17cda80b6ec2cf74d4678"
+checksum = "9579b9d8bce47aa41389fe344f2c6758279983b7c0ebb4013e283e3e91bb450e"
 
 [[package]]
 name = "arrow-select"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e415279094ea70323c032c6e739c48ad8d80e78a09bef7117b8718ad5bf3722"
+checksum = "7471ba126d0b0aaa24b50a36bc6c25e4e74869a1fd1a5553357027a0b1c8d1f1"
 dependencies = [
  "ahash",
  "arrow-array",
@@ -367,9 +382,9 @@ dependencies = [
 
 [[package]]
 name = "arrow-string"
-version = "53.3.0"
+version = "53.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11d956cae7002eb8d83a27dbd34daaea1cf5b75852f0b84deb4d93a276e92bbf"
+checksum = "72993b01cb62507b06f1fb49648d7286c8989ecfabdb7b77a750fcb54410731b"
 dependencies = [
  "arrow-array",
  "arrow-buffer",
@@ -2547,9 +2562,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
 
 [[package]]
 name = "flatbuffers"
-version = "23.5.26"
+version = "24.12.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dac53e22462d78c16d64a1cd22371b54cc3fe94aa15e7886a2fa6e5d1ab8640"
+checksum = "4f1baf0dbf96932ec9a3038d57900329c015b0bfb7b63d904f3bc27e2b02a096"
 dependencies = [
  "bitflags 1.3.2",
  "rustc_version",
@@ -3328,9 +3343,9 @@ dependencies = [
 
 [[package]]
 name = "js-sys"
-version = "0.3.76"
+version = "0.3.77"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
 dependencies = [
  "once_cell",
  "wasm-bindgen",
@@ -4655,9 +4670,9 @@ dependencies = [
 
 [[package]]
 name = "re_arrow2"
-version = "0.18.0"
+version = "0.18.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f046c5679b0f305d610f80d93fd51ad702cfc077bbe16d9553a1660a2505160"
+checksum = "6973c87de24c9de7292447fa896f229278b010cb3fb5e7f4f857447e64e1bb6f"
 dependencies = [
  "ahash",
  "arrow-array",
@@ -4667,7 +4682,6 @@ dependencies = [
  "arrow-schema",
  "bytemuck",
  "chrono",
- "comfy-table",
  "dyn-clone",
  "either",
  "ethnum",
@@ -4681,20 +4695,27 @@ dependencies = [
  "simdutf8",
 ]
 
+[[package]]
+name = "re_arrow_util"
+version = "0.22.0-alpha.1+dev"
+dependencies = [
+ "arrow",
+ "itertools 0.13.0",
+ "re_log",
+ "re_tracing",
+]
+
 [[package]]
 name = "re_build_info"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b88b413ebeee91520b7825e4fde0b65702394f5282f5e783e56d0d8155a536a"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
+ "re_byte_size",
  "serde",
 ]
 
 [[package]]
 name = "re_build_tools"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0892c63699ce6d5a87a8b18a8b2ab587124aa32fee251c1107fab44ca4e4c786"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "anyhow",
  "cargo_metadata 0.18.1",
@@ -4705,11 +4726,18 @@ dependencies = [
  "walkdir",
 ]
 
+[[package]]
+name = "re_byte_size"
+version = "0.22.0-alpha.1+dev"
+dependencies = [
+ "arrow",
+ "half",
+ "smallvec",
+]
+
 [[package]]
 name = "re_capabilities"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ff19bd8c1f2604f4207847a80b1ffebe1654a24f422872b60e873e28b369462"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "document-features",
  "static_assertions",
@@ -4717,18 +4745,14 @@ dependencies = [
 
 [[package]]
 name = "re_case"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07dce93a41adb3c620e2b03c1c995eb9ba57e520143ef7ee4d8b4f7e53514a36"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "convert_case",
 ]
 
 [[package]]
 name = "re_chunk"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a0cc5e3e6c262b0c3b9babad886e30af36ca041da64121afbe68c6341e6d924"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "ahash",
  "anyhow",
@@ -4736,10 +4760,12 @@ dependencies = [
  "bytemuck",
  "crossbeam",
  "document-features",
+ "half",
  "itertools 0.13.0",
  "nohash-hasher",
  "rand",
- "re_arrow2",
+ "re_arrow_util",
+ "re_byte_size",
  "re_error",
  "re_format",
  "re_format_arrow",
@@ -4750,30 +4776,32 @@ dependencies = [
  "re_types_core",
  "serde",
  "similar-asserts",
+ "tap",
  "thiserror",
 ]
 
 [[package]]
 name = "re_chunk_store"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9468c4409588cba5cad103fe5205a922294ada40989cbbc13fd83a1ac982c932"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "ahash",
  "anyhow",
+ "arrow",
  "document-features",
  "indent",
  "itertools 0.13.0",
  "nohash-hasher",
  "once_cell",
  "parking_lot",
- "re_arrow2",
+ "re_arrow_util",
+ "re_byte_size",
  "re_chunk",
  "re_format",
  "re_log",
  "re_log_encoding",
  "re_log_types",
  "re_protos",
+ "re_sorbet",
  "re_tracing",
  "re_types_core",
  "thiserror",
@@ -4782,9 +4810,7 @@ dependencies = [
 
 [[package]]
 name = "re_crash_handler"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bdf77e0a0c1310fa5c02b9d66e33b73693bbd61d44a93bcb3d58cae8a34156"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "backtrace",
  "econtext",
@@ -4796,9 +4822,7 @@ dependencies = [
 
 [[package]]
 name = "re_entity_db"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eec319df6d68a71390aae382ae2982915c95ab3fa69bd286104e6954b46d8986"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "ahash",
  "document-features",
@@ -4807,6 +4831,7 @@ dependencies = [
  "nohash-hasher",
  "parking_lot",
  "re_build_info",
+ "re_byte_size",
  "re_chunk",
  "re_chunk_store",
  "re_format",
@@ -4824,36 +4849,30 @@ dependencies = [
 
 [[package]]
 name = "re_error"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0adebf7ffebab798e5171717bc99f228619cdf8bb9a79806346f3c41ef7a0f3"
+version = "0.22.0-alpha.1+dev"
 
 [[package]]
 name = "re_format"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b01706f49ef1e074aca58c7161280057f74ff181199c558146585b58f23c0ecd"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "num-traits",
 ]
 
 [[package]]
 name = "re_format_arrow"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f318b5363e4d798b08f2fa0c0135f0fd137136100000a06adae235ba368344f"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
+ "arrow",
  "comfy-table",
- "re_arrow2",
+ "itertools 0.13.0",
+ "re_arrow_util",
  "re_tuid",
  "re_types_core",
 ]
 
 [[package]]
 name = "re_int_histogram"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bd1fc768a59b0ffd7178cf592d6290f48346ade4adb930862f2c7d83ded2d32"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "smallvec",
  "static_assertions",
@@ -4861,9 +4880,7 @@ dependencies = [
 
 [[package]]
 name = "re_log"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdd546fa37286a0114641cf7b271eca4bce3b4a20041ca378fb3530b8dc947b8"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "env_logger",
  "js-sys",
@@ -4876,10 +4893,10 @@ dependencies = [
 
 [[package]]
 name = "re_log_encoding"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6ddf1fbcb460622f305711563047d1f04ca248f0dca046dbba19b4b6df51424"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
+ "arrow",
+ "bytes",
  "lz4_flex",
  "parking_lot",
  "re_arrow2",
@@ -4892,16 +4909,17 @@ dependencies = [
  "re_tracing",
  "rmp-serde",
  "thiserror",
+ "tokio",
+ "tokio-stream",
 ]
 
 [[package]]
 name = "re_log_types"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a48047201720a8d950910b2d90471d36b05a4fc581d3b4c4ec1856c939d9a39"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "ahash",
  "anyhow",
+ "arrow",
  "backtrace",
  "bytemuck",
  "clean-path",
@@ -4914,10 +4932,11 @@ dependencies = [
  "num-derive",
  "num-traits",
  "re_arrow2",
+ "re_arrow_util",
  "re_build_info",
+ "re_byte_size",
  "re_format",
  "re_log",
- "re_protos",
  "re_string_interner",
  "re_tracing",
  "re_tuid",
@@ -4943,9 +4962,7 @@ dependencies = [
 
 [[package]]
 name = "re_memory"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec4106e54dde4835fc601458283c02a783f8fa5bfd5b010c74e7bf251c3bf83e"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "ahash",
  "backtrace",
@@ -4980,11 +4997,15 @@ dependencies = [
 
 [[package]]
 name = "re_protos"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95f75d9831745a5944ef6a338cc3cc06f8d39a83506f943896eaf602ab1166c4"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
+ "arrow",
  "prost",
+ "re_build_info",
+ "re_byte_size",
+ "re_log_types",
+ "re_sorbet",
+ "re_tuid",
  "thiserror",
  "tonic",
  "tonic-web-wasm-client",
@@ -4992,19 +5013,19 @@ dependencies = [
 
 [[package]]
 name = "re_query"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9c7b7cd2bcd4ee1f2bdfaba50f10af72baca0ac44fb7865618f7108cd0e7f7b"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "ahash",
  "anyhow",
+ "arrow",
  "backtrace",
  "indent",
  "itertools 0.13.0",
  "nohash-hasher",
  "parking_lot",
  "paste",
- "re_arrow2",
+ "re_arrow_util",
+ "re_byte_size",
  "re_chunk",
  "re_chunk_store",
  "re_error",
@@ -5019,9 +5040,7 @@ dependencies = [
 
 [[package]]
 name = "re_sdk"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c3b408455022a5cbbfe3a36e0006eb87c07b3b63dd55f14ff01cfe0e7de902f"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "ahash",
  "crossbeam",
@@ -5031,9 +5050,9 @@ dependencies = [
  "nohash-hasher",
  "once_cell",
  "parking_lot",
- "re_arrow2",
  "re_build_info",
  "re_build_tools",
+ "re_byte_size",
  "re_chunk",
  "re_log",
  "re_log_encoding",
@@ -5046,9 +5065,7 @@ dependencies = [
 
 [[package]]
 name = "re_sdk_comms"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce2eb73d054d2bea611e6eb5c8aba1e1b25010a46c834cbc545a9855dd9c0a8"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "ahash",
  "crossbeam",
@@ -5063,9 +5080,7 @@ dependencies = [
 
 [[package]]
 name = "re_smart_channel"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7d07784b8939f05364f526590fc7aa3d3a43797f31db0a0492a279046f7d690"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "crossbeam",
  "parking_lot",
@@ -5074,11 +5089,20 @@ dependencies = [
  "web-time",
 ]
 
+[[package]]
+name = "re_sorbet"
+version = "0.22.0-alpha.1+dev"
+dependencies = [
+ "arrow",
+ "re_log",
+ "re_log_types",
+ "re_types_core",
+ "thiserror",
+]
+
 [[package]]
 name = "re_string_interner"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10218faacf52f7453a6fda036d4418907e3465229e9ec32bf662c181e6b365c0"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "ahash",
  "nohash-hasher",
@@ -5090,32 +5114,26 @@ dependencies = [
 
 [[package]]
 name = "re_tracing"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6112ec08a39f169bdf843ffb318872c909038effde68e67e1b0b19ffa3f380c1"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "puffin",
 ]
 
 [[package]]
 name = "re_tuid"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0fab74c48f17a4a29b29e1184f690c4470f0f34126eedd5051868afc8e908af"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "document-features",
  "getrandom",
  "once_cell",
- "re_protos",
+ "re_byte_size",
  "serde",
  "web-time",
 ]
 
 [[package]]
 name = "re_types"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8969f3feb653267d32b3a50272adebd2b36e874572a591e61fa1081418a49ec3"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "anyhow",
  "array-init",
@@ -5136,8 +5154,9 @@ dependencies = [
  "once_cell",
  "ply-rs",
  "rayon",
- "re_arrow2",
  "re_build_tools",
+ "re_byte_size",
+ "re_error",
  "re_format",
  "re_log",
  "re_log_types",
@@ -5152,9 +5171,7 @@ dependencies = [
 
 [[package]]
 name = "re_types_builder"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d9a754673bb2a1a08266d32797cf429394dca0bf80c5d13594d6d7d207f9e11"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "anyhow",
  "arrow",
@@ -5185,9 +5202,7 @@ dependencies = [
 
 [[package]]
 name = "re_types_core"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23ba9a0b66c99a435560675ff422da8e5ee9f42eaf6bf9daae75a0cc9a084573"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "anyhow",
  "arrow",
@@ -5198,22 +5213,21 @@ dependencies = [
  "itertools 0.13.0",
  "nohash-hasher",
  "once_cell",
- "re_arrow2",
+ "re_arrow_util",
+ "re_byte_size",
  "re_case",
  "re_error",
+ "re_log",
  "re_string_interner",
  "re_tracing",
  "re_tuid",
  "serde",
- "smallvec",
  "thiserror",
 ]
 
 [[package]]
 name = "re_video"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c6626e79ef75582a27d3610ed777cfb12e928446dbccf5fec518a503e2c365e"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "bit-vec 0.8.0",
  "cfg_aliases 0.2.1",
@@ -5320,23 +5334,24 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
 
 [[package]]
 name = "rerun"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "620b001ee2d8f6187e2c91ef2726379a29eb4d89c440aab8ed0bba886d9d4c83"
+version = "0.22.0-alpha.1+dev"
 dependencies = [
  "anyhow",
+ "arrow",
  "document-features",
  "itertools 0.13.0",
  "puffin",
  "rayon",
  "re_build_info",
  "re_build_tools",
+ "re_byte_size",
  "re_capabilities",
  "re_chunk",
  "re_crash_handler",
  "re_entity_db",
  "re_error",
  "re_format",
+ "re_format_arrow",
  "re_log",
  "re_log_encoding",
  "re_log_types",
@@ -5351,7 +5366,7 @@ dependencies = [
 
 [[package]]
 name = "revy"
-version = "0.21.0"
+version = "0.22.0"
 dependencies = [
  "bevy",
  "itertools 0.13.0",
@@ -5831,6 +5846,12 @@ dependencies = [
  "slotmap",
 ]
 
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
 [[package]]
 name = "tempfile"
 version = "3.14.0"
@@ -6390,20 +6411,21 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
 dependencies = [
  "cfg-if",
  "once_cell",
+ "rustversion",
  "wasm-bindgen-macro",
 ]
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
 dependencies = [
  "bumpalo",
  "log",
@@ -6415,9 +6437,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.49"
+version = "0.4.50"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2"
+checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
 dependencies = [
  "cfg-if",
  "js-sys",
@@ -6428,9 +6450,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -6438,9 +6460,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -6451,9 +6473,12 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
 
 [[package]]
 name = "wasm-streams"
@@ -6470,9 +6495,9 @@ dependencies = [
 
 [[package]]
 name = "web-sys"
-version = "0.3.76"
+version = "0.3.77"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc"
+checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
diff --git a/Cargo.toml b/Cargo.toml
index fbed972..1624730 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "revy"
-version = "0.21.0"
+version = "0.22.0"
 authors = ["rerun.io <opensource@rerun.io>"]
 categories = [
     "game-development",
@@ -25,11 +25,17 @@ targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"]
 
 
 [dependencies]
-rerun = { version = "0.21.0", default-features = false, features = [
+rerun = { path = "/home/cmc/dev/rerun-io/rerun/crates/top/rerun", default-features = false, features = [
     "sdk",
     "image",
     "glam",
 ] }
+# TODO
+# rerun = { version = "0.22.0", default-features = false, features = [
+#     "sdk",
+#     "image",
+#     "glam",
+# ] }
 bevy = { version = "0.15" }
 # bevy = { path = "../../bevyengine/bevy/" }
 # `dynamic_linking` on windows hits error for maximum number of exported symbols on linking.
diff --git a/README.md b/README.md
index 7c95438..81b0873 100644
--- a/README.md
+++ b/README.md
@@ -36,11 +36,11 @@ https://github.com/rerun-io/revy/assets/2910679/cd096cbe-5e68-4acf-8010-e6c32c55
 
 ## Usage
 
-1. [Install the Rerun Viewer](https://www.rerun.io/docs/getting-started/installing-viewer) (`0.21`).
+1. [Install the Rerun Viewer](https://www.rerun.io/docs/getting-started/installing-viewer) (`0.22`).
 
 2. Add `revy` to your dependencies:
     ```toml
-    revy = "0.21"  # always matches the rerun version
+    revy = "0.22"  # always matches the rerun version
     ```
 
 3. Initialize the `rerun` plugin:
@@ -106,3 +106,4 @@ You can also register your own custom loggers by inserting a `RerunComponentLogg
 | [0.14](https://github.com/bevyengine/bevy/releases/tag/v0.14.0)  | [0.17](https://github.com/rerun-io/revy/releases/tag/0.17.0)  | [0.17](https://github.com/rerun-io/rerun/releases/tag/0.17.0)  |
 | [0.15](https://github.com/bevyengine/bevy/releases/tag/v0.15.0)  | [0.20](https://github.com/rerun-io/revy/releases/tag/0.20.0)  | [0.20](https://github.com/rerun-io/rerun/releases/tag/0.20.0)  |
 | [0.15](https://github.com/bevyengine/bevy/releases/tag/v0.15.0)  | [0.21](https://github.com/rerun-io/revy/releases/tag/0.21.0)  | [0.21](https://github.com/rerun-io/rerun/releases/tag/0.21.0)  |
+| [0.15](https://github.com/bevyengine/bevy/releases/tag/v0.15.0)  | [0.22](https://github.com/rerun-io/revy/releases/tag/0.22.0)  | [0.22](https://github.com/rerun-io/rerun/releases/tag/0.22.0)  |

From d5bdff7a86b2b99ec16fed587ac05471cf4d7f33 Mon Sep 17 00:00:00 2001
From: Clement Rey <cr.rey.clement@gmail.com>
Date: Tue, 28 Jan 2025 18:21:14 +0100
Subject: [PATCH 2/2] propagate changes

---
 src/default_loggers.rs | 203 +++++++++++++++++++----------------------
 src/lib.rs             |   2 +-
 src/rerun_logger.rs    |  71 ++++----------
 src/sync.rs            |  39 +++-----
 4 files changed, 124 insertions(+), 191 deletions(-)

diff --git a/src/default_loggers.rs b/src/default_loggers.rs
index becae40..8072a0d 100644
--- a/src/default_loggers.rs
+++ b/src/default_loggers.rs
@@ -2,10 +2,11 @@ use bevy::{
     ecs::component::ComponentInfo,
     prelude::*,
     render::{mesh::PlaneMeshBuilder, primitives::Aabb},
-    utils::HashMap,
 };
 
-use crate::{compute_entity_path, Aliased, RerunLogger, ToRerun};
+use rerun::{external::nohash_hasher::IntMap, AsComponents as _, ComponentBatch};
+
+use crate::{compute_entity_path, RerunLogger, ToRerun};
 
 // ---
 
@@ -15,13 +16,13 @@ use crate::{compute_entity_path, Aliased, RerunLogger, ToRerun};
 ///
 /// Public so end users can easily inspect what is configured by default.
 #[derive(Resource, Deref, DerefMut, Clone, Debug)]
-pub struct DefaultRerunComponentLoggers(HashMap<rerun::ComponentName, Option<RerunLogger>>);
+pub struct DefaultRerunComponentLoggers(IntMap<rerun::ComponentName, Option<RerunLogger>>);
 
 // TODO(cmc): DataUi being typed makes aliases uninspectable :(
 #[allow(clippy::too_many_lines)]
 impl Default for DefaultRerunComponentLoggers {
     fn default() -> Self {
-        let mut loggers = HashMap::default();
+        let mut loggers = IntMap::default();
 
         loggers.insert(
             "bevy_transform::components::transform::Transform".into(),
@@ -81,20 +82,23 @@ impl Default for DefaultRerunComponentLoggers {
 
 // ---
 
+// TODO(cmc): all those aliasing reshenanigans should really just be custom archetype names in
+// the descriptor, but the viewer won't be ready for that in 0.22.
+
 fn bevy_transform<'w>(
     _world: &'w World,
     _all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     _component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
-    let suffix = None;
-
-    let data = entity
-        .get::<Transform>()
-        .map(|transform| transform.to_rerun())
-        .map(|data| Box::new(data) as _);
-
-    (suffix, data)
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
+    (
+        None,
+        entity
+            .get::<Transform>()
+            .into_iter()
+            .flat_map(|transform| transform.to_rerun().as_serialized_batches())
+            .collect(),
+    )
 }
 
 fn bevy_global_transform<'w>(
@@ -102,27 +106,26 @@ fn bevy_global_transform<'w>(
     _all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     _component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     let suffix = None;
-
     // TODO(cmc): once again the DataUi does the wrong thing... we really need to
     // go typeless.
-    let data = entity.get::<GlobalTransform>().map(|transform| {
-        Box::new(vec![
-            Box::new(Aliased::<rerun::datatypes::Vec3D>::new(
-                "GlobalTransform3D.translation",
-                transform.translation().to_rerun(),
-            )) as Box<dyn rerun::AsComponents>,
-            Box::new(Aliased::<rerun::datatypes::Quaternion>::new(
-                "GlobalTransform3D.rotation",
-                transform.rotation().to_rerun(),
-            )),
-            Box::new(Aliased::<rerun::datatypes::Vec3D>::new(
-                "GlobalTransform3D.scale",
-                transform.scale().to_rerun(),
-            )),
-        ]) as _
-    });
+    let data = entity
+        .get::<GlobalTransform>()
+        .into_iter()
+        .flat_map(|transform| {
+            transform
+                .to_rerun()
+                .as_serialized_batches()
+                .into_iter()
+                .map(|batch| {
+                    let name = batch.descriptor.component_name;
+                    batch.with_descriptor_override(rerun::ComponentDescriptor::new(format!(
+                        "{name}Global"
+                    )))
+                })
+        })
+        .collect();
 
     (suffix, data)
 }
@@ -133,13 +136,13 @@ fn bevy_mesh<'w>(
     entity: EntityRef<'_>,
     _component: &'w ComponentInfo,
     handle: Option<&Handle<Mesh>>,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
-    let suffix: Option<&str> = None;
-
-    let data = handle
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
+    let suffix = None;
+    let batches = handle
         .and_then(|handle| world.resource::<Assets<Mesh>>().get(handle))
         .and_then(ToRerun::to_rerun)
-        .map(|mut mesh| {
+        .into_iter()
+        .flat_map(|mut mesh| {
             if let Some(mat) = entity
                 .get::<MeshMaterial2d<ColorMaterial>>()
                 .and_then(|handle| world.resource::<Assets<ColorMaterial>>().get(handle))
@@ -161,11 +164,10 @@ fn bevy_mesh<'w>(
                     mesh = mesh.with_albedo_texture(image_format, image_data);
                 }
             }
-            mesh
+            mesh.as_serialized_batches()
         })
-        .map(|mesh| Box::new(mesh) as _);
-
-    (suffix, data)
+        .collect();
+    (suffix, batches)
 }
 
 fn bevy_mesh2d<'w>(
@@ -173,16 +175,16 @@ fn bevy_mesh2d<'w>(
     all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     let suffix = Some("mesh2d");
-    let (_, data) = bevy_mesh(
+    let (_, batches) = bevy_mesh(
         world,
         all_entities,
         entity,
         component,
         entity.get::<Mesh2d>().map(|handle| &handle.0),
     );
-    (suffix, data)
+    (suffix, batches)
 }
 
 fn bevy_mesh3d<'w>(
@@ -190,16 +192,16 @@ fn bevy_mesh3d<'w>(
     all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     let suffix = Some("mesh3d");
-    let (_, data) = bevy_mesh(
+    let (_, batches) = bevy_mesh(
         world,
         all_entities,
         entity,
         component,
         entity.get::<Mesh3d>().map(|handle| &handle.0),
     );
-    (suffix, data)
+    (suffix, batches)
 }
 
 fn bevy_camera<'w, C: Component + ToRerun<rerun::Pinhole>>(
@@ -207,14 +209,15 @@ fn bevy_camera<'w, C: Component + ToRerun<rerun::Pinhole>>(
     _all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     _component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     let suffix = Some("cam");
-    let data = entity
+    let batches = entity
         .get::<C>()
         // TODO(cmc): log visible entities too?
-        .map(ToRerun::to_rerun)
-        .map(|mesh| Box::new(mesh) as _);
-    (suffix, data)
+        .into_iter()
+        .flat_map(|mesh| mesh.to_rerun().as_serialized_batches())
+        .collect();
+    (suffix, batches)
 }
 
 fn bevy_projection<'w>(
@@ -222,7 +225,7 @@ fn bevy_projection<'w>(
     all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     bevy_camera::<Projection>(world, all_entities, entity, component)
 }
 
@@ -231,7 +234,7 @@ fn bevy_projection_orthographic<'w>(
     all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     bevy_camera::<OrthographicProjection>(world, all_entities, entity, component)
 }
 
@@ -240,7 +243,7 @@ fn bevy_projection_perspective<'w>(
     all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     bevy_camera::<PerspectiveProjection>(world, all_entities, entity, component)
 }
 
@@ -250,10 +253,9 @@ fn bevy_sprite<'w>(
     _all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     _component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     let suffix = Some("sprite");
-
-    let data = entity
+    let batches = entity
         .get::<Sprite>()
         .and_then(|sprite| {
             world
@@ -271,9 +273,10 @@ fn bevy_sprite<'w>(
                     })
                 })
         })
-        .map(|data| Box::new(data) as _);
-
-    (suffix, data)
+        .into_iter()
+        .flat_map(|mesh| mesh.as_serialized_batches())
+        .collect();
+    (suffix, batches)
 }
 
 fn bevy_aabb<'w>(
@@ -281,9 +284,9 @@ fn bevy_aabb<'w>(
     _all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     _component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     let suffix = Some("aabb");
-    let data = entity
+    let batches = entity
         .get::<Aabb>()
         .map(|aabb| {
             rerun::Boxes3D::from_centers_and_half_sizes(
@@ -308,9 +311,10 @@ fn bevy_aabb<'w>(
                 aabb
             }
         })
-        .map(|data| Box::new(data) as _);
-
-    (suffix, data)
+        .into_iter()
+        .flat_map(|aabb| aabb.as_serialized_batches())
+        .collect();
+    (suffix, batches)
 }
 
 fn bevy_parent<'w>(
@@ -318,19 +322,21 @@ fn bevy_parent<'w>(
     all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     _component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     let suffix = None;
-    let data = entity
+    let batches = entity
         .get::<Parent>()
-        .map(|parent| {
+        .and_then(|parent| {
             let parent_entity_path = compute_entity_path(world, all_entities, parent.get());
-            Aliased::<rerun::datatypes::EntityPath>::new(
-                "Parent",
-                rerun::datatypes::EntityPath(parent_entity_path.to_string().into()),
-            )
+            rerun::components::EntityPath(parent_entity_path.to_string().into())
+                .serialized()
+                .map(|batch| {
+                    batch.with_descriptor_override(rerun::ComponentDescriptor::new("Parent"))
+                })
         })
-        .map(|data| Box::new(data) as _);
-    (suffix, data)
+        .into_iter()
+        .collect();
+    (suffix, batches)
 }
 
 fn bevy_children<'w>(
@@ -338,43 +344,26 @@ fn bevy_children<'w>(
     all_entities: &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
     entity: EntityRef<'_>,
     _component: &'w ComponentInfo,
-) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
     let suffix = None;
-
-    // TODO(cmc): it is once again super annoying that number of instances gets resolved at logging
-    // time... we need those clamp-to-edge semantics asap.
-    // let data = entity
-    //     .get::<Children>()
-    //     .map(|children| {
-    //         let children = children
-    //             .iter()
-    //             .map(|entity_id| {
-    //                 rerun::datatypes::EntityPath(
-    //                     compute_entity_path(world, all_entities, *entity_id)
-    //                         .to_string()
-    //                         .into(),
-    //                 )
-    //             })
-    //             .collect::<Vec<_>>();
-    //         Aliased::<Vec<rerun::datatypes::EntityPath>>::new(
-    //             "RawChildren",
-    //             children,
-    //         )
-    //     })
-    //     .map(|data| Box::new(data) as _);
-
-    let data = entity
+    let batches = entity
         .get::<Children>()
-        .map(|children| {
+        .and_then(|children| {
             let children = children
                 .iter()
-                .map(|entity_id| compute_entity_path(world, all_entities, *entity_id).to_string())
+                .map(|entity_id| {
+                    rerun::components::EntityPath(
+                        compute_entity_path(world, all_entities, *entity_id)
+                            .to_string()
+                            .into(),
+                    )
+                })
                 .collect::<Vec<_>>();
-            Aliased::<rerun::components::Text>::new(
-                "RawChildren",
-                rerun::components::Text(children.join("\n").into()),
-            )
+            children.serialized().map(|batch| {
+                batch.with_descriptor_override(rerun::ComponentDescriptor::new("Children"))
+            })
         })
-        .map(|data| Box::new(data) as _);
-    (suffix, data)
+        .into_iter()
+        .collect();
+    (suffix, batches)
 }
diff --git a/src/lib.rs b/src/lib.rs
index a1a564e..d5e5664 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -32,7 +32,7 @@ pub use self::conversions::ToRerun;
 pub use self::default_loggers::DefaultRerunComponentLoggers;
 pub use self::entity_path::{ancestors_from_world, compute_entity_path};
 pub use self::rerun_logger::{
-    get_component_logger, Aliased, RerunComponentLoggers, RerunLogger, RerunLoggerFn,
+    get_component_logger, RerunComponentLoggers, RerunLogger, RerunLoggerFn,
 };
 
 pub(crate) use self::sync::RerunSyncPlugin;
diff --git a/src/rerun_logger.rs b/src/rerun_logger.rs
index 70a85b4..c1f51be 100644
--- a/src/rerun_logger.rs
+++ b/src/rerun_logger.rs
@@ -6,6 +6,7 @@ use bevy::{
     reflect::{serde::ReflectSerializer, ReflectFromPtr},
     utils::HashMap,
 };
+use rerun::ComponentBatch;
 
 use crate::DefaultRerunComponentLoggers;
 
@@ -24,7 +25,7 @@ pub trait RerunLoggerFn:
         &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
         EntityRef<'_>,
         &'w ComponentInfo,
-    ) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>)
+    ) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>)
 {
 }
 
@@ -36,7 +37,7 @@ impl<F> RerunLoggerFn for F where
             &'w QueryState<(Entity, Option<&'w Parent>, Option<&'w Name>)>,
             EntityRef<'_>,
             &'w ComponentInfo,
-        ) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>)
+        ) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>)
 {
 }
 
@@ -136,13 +137,22 @@ pub fn get_component_logger<'a>(
         _all_entities: &QueryState<(Entity, Option<&Parent>, Option<&Name>)>,
         entity: EntityRef<'_>,
         component: &ComponentInfo,
-    ) -> (Option<&'static str>, Option<Box<dyn rerun::AsComponents>>) {
+    ) -> (Option<&'static str>, Vec<rerun::SerializedComponentBatch>) {
         let name = component.name();
         let body = component_to_ron(world, entity, component)
             .unwrap_or_else(|| "<missing reflection metadata>".into());
-        let reflected = Aliased::<rerun::components::Text>::new(name.replace("::", "."), body);
-
-        (None, Some(Box::new(reflected) as _))
+        (
+            None,
+            rerun::components::Text(body.into())
+                .serialized()
+                .into_iter()
+                .map(|batch| {
+                    batch.with_descriptor_override(rerun::ComponentDescriptor::new(
+                        name.replace("::", "."),
+                    ))
+                })
+                .collect(),
+        )
     }
 
     static LOG_IGNORED_COMPONENT: RerunLogger = RerunLogger::new_static(&log_ignored_component);
@@ -177,52 +187,3 @@ fn component_to_ron(
             })
         })
 }
-
-// ---
-
-// TODO(cmc): Rerun should provide tools for this.
-// TODO(cmc): All this traits are very messy... CompomnentName vs. DatatypeName in particular is
-// very annoying. Actually just Component vs. Datatype being different types in general is very
-// annoying.
-// TODO(cmc): the whole Loggable vs. LoggableBatch is also so messy
-
-use rerun::external::{arrow2, re_types_core};
-
-/// Helper to log any [`rerun::LoggableBatch`] as a [`rerun::Component`] with the specified name.
-#[derive(Debug)]
-pub struct Aliased<C: rerun::LoggableBatch> {
-    descriptor: rerun::ComponentDescriptor,
-    data: C,
-}
-
-impl<C: rerun::LoggableBatch> Aliased<C> {
-    pub fn new(name: impl Into<rerun::ComponentName>, data: impl Into<C>) -> Self {
-        Self {
-            descriptor: rerun::ComponentDescriptor::new(name.into()),
-            data: data.into(),
-        }
-    }
-}
-
-impl<C: rerun::LoggableBatch> rerun::AsComponents for Aliased<C> {
-    #[inline]
-    fn as_component_batches(&self) -> Vec<rerun::ComponentBatchCowWithDescriptor<'_>> {
-        vec![rerun::ComponentBatchCowWithDescriptor::new(
-            self as &dyn rerun::ComponentBatch,
-        )]
-    }
-}
-
-impl<C: rerun::LoggableBatch> rerun::LoggableBatch for Aliased<C> {
-    #[inline]
-    fn to_arrow2(&self) -> re_types_core::SerializationResult<Box<dyn arrow2::array::Array>> {
-        self.data.to_arrow2()
-    }
-}
-
-impl<C: rerun::LoggableBatch> rerun::ComponentBatch for Aliased<C> {
-    #[inline]
-    fn descriptor(&self) -> std::borrow::Cow<'_, rerun::ComponentDescriptor> {
-        std::borrow::Cow::Borrowed(&self.descriptor)
-    }
-}
diff --git a/src/sync.rs b/src/sync.rs
index e9e9eb0..4f4887e 100644
--- a/src/sync.rs
+++ b/src/sync.rs
@@ -36,7 +36,7 @@ pub struct RerunSyncPlugin {
 impl Plugin for RerunSyncPlugin {
     fn build(&self, app: &mut App) {
         self.rec
-            .log_static("world", &rerun::ViewCoordinates::RIGHT_HAND_Y_UP)
+            .log_static("world", &rerun::ViewCoordinates::RIGHT_HAND_Y_UP())
             .ok_or_log_error();
 
         let state = RerunSyncState {
@@ -161,8 +161,10 @@ fn sync_components(
             .get::<CurrentHashes>()
             .unwrap_or(&empty_hashes);
 
-        let mut as_components: HashMap<Option<&'static str>, Vec<Box<dyn rerun::AsComponents>>> =
-            Default::default();
+        let mut all_batches: HashMap<
+            Option<&'static str>,
+            Vec<Vec<rerun::SerializedComponentBatch>>,
+        > = Default::default();
         for component in world.inspect_entity(entity_id) {
             let mut has_changed = entity
                 .get_change_ticks_by_id(component.id())
@@ -196,8 +198,8 @@ fn sync_components(
             if let Some(logger) =
                 get_component_logger(component, loggers.as_ref(), &default_loggers)
             {
-                let (suffix, data) = logger(world, &all_entities, entity, component);
-                as_components.entry(suffix).or_default().extend(data);
+                let (suffix, batches) = logger(world, &all_entities, entity, component);
+                all_batches.entry(suffix).or_default().push(batches);
             }
         }
 
@@ -207,15 +209,7 @@ fn sync_components(
 
         let mut current_components = HashMap::default();
 
-        // TODO(cmc): lots of inneficiencies and awkward collections that are forced upon us
-        // because of how the RecordingStream API is designed.
-        // After quite a bit of juggling it's not too bad though.
-        for (suffix, as_components) in as_components {
-            let component_batches = as_components
-                .iter()
-                .map(|data| data.as_component_batches())
-                .collect::<Vec<_>>();
-
+        for (suffix, batches) in all_batches {
             let entity_path: rerun::EntityPath = suffix.map_or_else(
                 || entity_path.clone(),
                 // NOTE(cmc): The extra `comps/` is crucial so that we can easily clear everything
@@ -223,24 +217,13 @@ fn sync_components(
                 |suffix| entity_path.join(&"comps".into()).join(&suffix.into()),
             );
 
-            for batches in &component_batches {
+            for batches in &batches {
                 for batch in batches {
-                    current_components.insert(
-                        rerun::ComponentBatch::descriptor(batch).into_owned(),
-                        entity_path.clone(),
-                    );
+                    current_components.insert(batch.descriptor.clone(), entity_path.clone());
                 }
             }
 
-            rec.log_component_batches(
-                entity_path,
-                false,
-                component_batches
-                    .iter()
-                    .flatten()
-                    .map(|batch| batch as &dyn rerun::ComponentBatch),
-            )
-            .ok_or_log_error();
+            rec.log(entity_path, &batches).ok_or_log_error();
         }
 
         let empty_components = CurrentComponents::default();