{"owner":"rerun-io","repo":"rerun","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md","CLAUDE.md"],"skills":{"AGENTS.md":"# CLAUDE.md\n\nGuidance for LLMs working in this repo.\n\n## Project overview\n\nRerun: time-aware multimodal data stack + visualization for robotics, spatial AI, computer vision. SDKs (Python, Rust, C++) log rich data (images, point clouds, tensors, etc.). Viewer for visualization.\n\n## Build system\n\n`pixi` for task management + deps. See `pixi.toml` for full task list.\n\n### Essential commands\n\n**Building:**\n- `pixi run py-build` - Build Python SDK into local .venv (uses uv)\n- `pixi run rerun-build` - Build native viewer (without web viewer)\n- `pixi run rerun-build-web` - Build web viewer (wasm)\n- `pixi run cpp-build-all` - Build all C++ artifacts\n\n**Running:**\n- `pixi run rerun` - Run viewer\n- `pixi run uvpy script.py` - Run Python scripts with rerun SDK\n- `cargo run -p <package_name>` - Run specific Rust example (e.g., `cargo run -p dna`)\n\n**Code generation:**\n- `pixi run codegen` - Generate Rust/Python/C++ code from the `re_type_definitions` crate\n\n**Formatting:**\n- `pixi run rs-fmt` - Format Rust files. **Always run after editing Rust files, before committing.**\n- `pixi run py-fmt` - Format Python files\n- `pixi run cpp-fmt` - Format C++ files\n- `pixi run toml-fmt` - Format TOML files\n\n**Testing:**\n- `cargo clippy -p <crate_name>` - Run rust checks before building\n- `cargo nextest run --all-features --no-fail-fast -p <crate_name>` - Run tests for specific crate\n  - Example: `cargo nextest run --all-features --no-fail-fast -p re_view_spatial`\n- Use `cargo nextest` (not `cargo test`) for better output + parallelism\n- Always use `--all-features` unless specific reason not to\n- Use `--no-fail-fast` to gather all failures in single run\n\n**Snapshots:**\n- **`insta` snapshots**: Text-based, run with regular Rust tests. On failure: `cargo insta review` (install: `cargo install cargo-insta`)\n- **Image comparison tests**: Render image vs checked-in reference. Uses `egui_kittest`'s `Harness::snapshot` + `TestContext` for mocking viewer.\n  - Results saved to `tests/snapshots/`, failures produce `diff.png`\n  - Update refs: `UPDATE_SNAPSHOTS=1`\n  - Update from failed CI run: `./scripts/update_snapshots_from_ci.sh`\n  - Best practices: see [egui_kittest README](https://github.com/emilk/egui/tree/master/crates/egui_kittest#snapshot-testing)\n\n## Code generation system\n\n**Critical: Never edit generated files directly.** All generated files marked \"DO NOT EDIT\" at top.\n\n### Type definition flow\n\n```\nre_type_definitions → pixi run codegen → Generated code (Rust/Python/C++) + docs (docs/content/reference/types/)\n```\n\n- Type definitions in `crates/build/re_type_definitions/rerun/`\n  - `encodings/*.def.rs` - Low-level types (Vec3D, Mat4x4, etc.)\n  - `components/*.def.rs` - Component types (Position3D, Color, etc.)\n  - `archetypes/*.def.rs` - Archetypes (Points3D, Image, etc.)\n  - `blueprint/*.def.rs` - Blueprint system types\n- Codegen implementation in `crates/build/re_types_builder/`\n- After modifying a definition, run `pixi run codegen` to regenerate\n\n### Extension pattern\n\nAdd custom functionality to generated types via `_ext` files:\n- Rust: `filename_ext.rs` (auto-imported by codegen)\n- Python: `filename_ext.py` (mixed into generated class)\n- C++: `filename_ext.cpp` (compiled + included auto, parts may be marked for copy into header by codegen)\n\n## Code conventions\n\n### General\n\n- use `…` instead of `...` <!-- NOLINT -->\n- Validate conventions via `pixi run lint-rerun <file>` (no file = check everything)\n- Prose style (em vs en dash, sentence endings, casing) — see [`DESIGN.md`](DESIGN.md). In short: spaced em dash ` — `, never unspaced `word—word`, and don't use `–` as a sentence dash (it's for numeric ranges only) <!-- NOLINT -->\n- In error and log messages, put the error first and any file path at the end (e.g. `Failed to import: {err}\\nFile path: {path}`), never in the middle.\n  Paths can be long or sensitive, so trailing placement makes them easy to strip when copy-pasting.\n- One sentence per line in markdown files.\n  Markdown joins consecutive lines into a paragraph, so rendering is unchanged — but diffs become much easier to review.\n\n## Architecture overview\n\n### Crate organization\n\n```\ncrates/\n├── build/     # Code generation (re_types_builder)\n├── store/     # Data types, storage, querying\n├── top/       # User-facing SDKs and CLI\n└── viewer/    # Viewer UI and rendering\n```\n\nMore details in `ARCHITECTURE.md`.\n\n**When adding, removing, or renaming a crate**, update `ARCHITECTURE.md`:\nadd the crate to the appropriate crate table, and flag for the author that the crate-organization diagram (FigJam) needs a manual update — see the HTML comment next to the diagram in `ARCHITECTURE.md` for instructions.\n\n### Type system hierarchy\n\nThree levels (generated from `re_type_definitions`):\n\n1. **Encodings** (`rerun.encodings.*`) - Basic types like Vec3D, Color\n2. **Components** (`rerun.components.*`) - Named semantic wrappers (Position3D, Radius)\n3. **Archetypes** (`rerun.archetypes.*`) - Collections of components (Points3D, Image)\n\nEach archetype specifies:\n- Required components (must provide)\n- Recommended components (good defaults)\n- Optional components\n\nExample: `Points3D` requires `positions`, recommends `colors` and `radii`, optional `labels`.\n\n### Data flow\n\n```\nSDK (log archetype)\n    ↓ encode to Apache Arrow\nLogMsg (encoded data)\n    ↓ transport (gRPC/file/memory)\nre_chunk_store (indexed time series DB)\n    ↓ query\nViewer (immediate mode rendering)\n```\n\n### Blueprint system\n\nViewer's configuration layer:\n- Stored as separate store (`re_entity_db`) with \"blueprint\" timeline\n- Defines: view layout, visibility, per-entity overrides, view properties\n- Uses same type system as logged data\n- Path hierarchy: `/viewport/`, `/view/{uuid}/`, `/container/{uuid}/`\n\n### Visualizers\n\nEach view type (Spatial3D, TimeSeries, etc.) has registered visualizers:\n- Determine which entities/archetypes can be visualized\n- Execute per-frame: query data → process → generate render commands\n- Examples: Points3DVisualizer, LineStripsVisualizer, MeshVisualizer\n\nViewer uses **immediate mode**: every frame, query store + re-render from scratch.\n\n## Documentation snippets\n\nSee [`docs/snippets/README.md`](docs/snippets/README.md) for running, building, finding snippets. Config in [`docs/snippets/snippets.toml`](docs/snippets/snippets.toml).\n\n## Python development workflow\n\nPython uses separate uv-managed .venv (not pixi's conda env):\n\n```bash\npixi run py-build              # Build rerun-sdk into .venv\npixi run uvpy script.py        # Run Python scripts via uv\npixi run uv run script.py      # Explicit uv run\n```\n\n`uv` wrapper unsets `CONDA_PREFIX` for isolation from pixi's env.\n\n## Important notes\n\n- **PyO3 Configuration**: PyO3 config errors → run `pixi run ensure-pyo3-build-cfg`\n- **git-lfs**: Required for test snapshots. Install + run `git lfs install`\n- **Immediate Mode**: Entire viewer rendered from scratch each frame (no state management callbacks)\n- **Arrow Native**: Data stored, transmitted, queried as Apache Arrow arrays\n- **Multi-language**: definition changes affect Rust, Python, C++ simultaneously\n\n## Python docstring formatting\n\nPython API docs use **MkDocs + mkdocstrings** (NOT Sphinx). Never use reStructuredText (rST) in Python docstrings. Use markdown:\n\n- Cross-refs: `[`ClassName`][]` not `:class:`ClassName`` / `:func:` / `:meth:`\n- Warnings: `!!! warning` (MkDocs admonition with indented body) not `.. warning::`\n- Deprecation: use `@deprecated` decorator (mkdocstrings renders it), don't duplicate in docstring\n- Code blocks: markdown fenced blocks, not `.. code-block::`\n- Params: numpy-style (`Parameters`, `Returns` with `----------`)\n\n## Documentation system\n\nSee [`docs/README.md`](docs/README.md) for full docs architecture.\n\nDocs span multiple sites: main docs at `rerun.io/docs` (from `docs/content/`), API refs for Python (MkDocs), C++ (Doxygen), JS (TypeDoc) at `ref.rerun.io/docs/{python,cpp,js}/`.\n\nKey points:\n- **`docs/content/reference/types/`** auto-generated by `pixi run codegen` from `re_type_definitions` - don't edit\n- **`docs/content/reference/cli.md`** auto-generated by `pixi run man` - don't edit\n- **Code snippets** in `docs/snippets/all/` with Python, Rust, C++ implementations\n- `pixi run py-docs-serve` previews Python API docs locally\n- `pixi run -e cpp cpp-docs` builds C++ docs\n\n## Development references\n\n- [`ARCHITECTURE.md`](ARCHITECTURE.md) - Detailed architecture docs\n- [`BUILD.md`](BUILD.md) - Full build instructions\n- [`CODE_STYLE.md`](CODE_STYLE.md) - Code style guidelines\n- [`DESIGN.md`](DESIGN.md) - UI design guidelines (GUI, CLI, docs, log messages)\n- [`docs/README.md`](docs/README.md) - Documentation system (sites, builds, deployment)\n- [`rerun_py/README.md`](rerun_py/README.md) - Python SDK instructions\n\n## Contributing\n\nDon't open pull requests or issues unless explicitly asked.\nWhen opening or interacting with one, follow the [pull request template](.github/pull_request_template.md) or [issue templates](.github/ISSUE_TEMPLATE/), and disclose that you are an LLM.\nLet the user know that you included this disclosure.\n","CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) and other LLMs when working with code in this repository.\n\n## Project overview\n\nRerun is a time-aware multimodal data stack and visualizations tool used in robotics, spatial AI, computer vision, and similar domains. It provides SDKs (Python, Rust, C++) for logging rich data (images, point clouds, tensors, etc.) and a Viewer for visualization.\n\n## Build system\n\nWe use `pixi` for task management and dependency installation. Check `pixi.toml` for a full list of tasks.\n\n### Essential commands\n\n**Building:**\n- `pixi run py-build` - Build Python SDK into local .venv (uses uv)\n- `pixi run rerun-build` - Build native viewer (without web viewer)\n- `pixi run rerun-build-web` - Build web viewer (wasm)\n- `pixi run cpp-build-all` - Build all C++ artifacts\n\n**Running:**\n- `pixi run rerun` - Run the viewer\n- `pixi run uvpy script.py` - Run Python scripts with rerun SDK\n- `cargo run -p <package_name>` - Run specific Rust example (e.g., `cargo run -p dna`)\n\n**Code generation:**\n- `pixi run codegen` - Generate Rust/Python/C++ code from the `re_type_definitions` crate\n\n**Formatting:**\n- `pixi run rs-fmt` - Format all Rust files. Always run this after making changes.\n- `pixi run py-fmt` - Format Python files\n- `pixi run cpp-fmt` - Format C++ files\n- `pixi run toml-fmt` - Format TOML files\n\n**Testing:**\n- Use `cargo clippy -p <crate_name>` to run general rust checks before building things\n- `cargo nextest run --all-features --no-fail-fast -p <crate_name>` - Run tests for a specific crate\n  - Example: `cargo nextest run --all-features --no-fail-fast -p re_view_spatial`\n- Use `cargo nextest` (not `cargo test`) for better output and parallelism\n- Always use `--all-features` unless you have a specific reason not to\n- Use `--no-fail-fast` to gather all test failures in a single run\n\n## Code generation system\n\n**Critical: Never edit generated files directly.** All generated files are marked \"DO NOT EDIT\" at the top.\n\n### Type definition flow\n\n```\nre_type_definitions → pixi run codegen → Generated code (Rust/Python/C++) + docs (docs/content/reference/types/)\n```\n\n- Type definitions live in `crates/build/re_type_definitions/rerun/`\n  - `encodings/*.def.rs` - Low-level types (Vec3D, Mat4x4, etc.)\n  - `components/*.def.rs` - Component types (Position3D, Color, etc.)\n  - `archetypes/*.def.rs` - Archetypes (Points3D, Image, etc.)\n  - `blueprint/*.def.rs` - Blueprint system types\n- Codegen implementation is in `crates/build/re_types_builder/`\n- After modifying a definition, run `pixi run codegen` to regenerate code\n\n### Extension pattern\n\nTo add custom functionality to generated types, create `_ext` files:\n- Rust: `filename_ext.rs` (automatically imported by codegen)\n- Python: `filename_ext.py` (mixed in with generated class)\n- C++: `filename_ext.cpp` (compiled and included automatically, parts of it may be marked for copy into the header by codegen)\n\n## Code conventions\n\n### General\n\n- use `…` instead of `...` <!-- NOLINT -->\n- validate various custom conventions via `pixi run lint-rerun <file>` (not passing any file will check everything)\n- Use `format!(\"{x}\")` over `format!(\"{}, x)` (same in log calls etc)\n- Don't write trivial comments that add nothing new\n- In error and log messages, put the error first and any file path at the end (e.g. `Failed to import: {err}\\nFile path: {path}`), never in the middle.\n  Paths can be long or sensitive, so trailing placement makes them easy to strip when copy-pasting.\n- Prose style (em vs en dash, sentence endings, casing) — see [`DESIGN.md`](DESIGN.md). In short: spaced em dash ` — `, never unspaced `word—word`, and don't use `–` as a sentence dash (it's for numeric ranges only) <!-- NOLINT -->\n- One sentence per line in markdown files.\n  Markdown joins consecutive lines into a paragraph, so rendering is unchanged — but diffs become much easier to review.\n\n## Architecture overview\n\n### Crate organization\n\n```\ncrates/\n├── build/     # Code generation (re_types_builder)\n├── store/     # Data types, storage, querying\n├── top/       # User-facing SDKs and CLI\n└── viewer/    # Viewer UI and rendering\n```\n\nFor more details about the architecture see `ARCHITECTURE.md`.\n\n**When adding, removing, or renaming a crate**, update `ARCHITECTURE.md`:\nadd the crate to the appropriate crate table, and flag for the author that the crate-organization diagram (FigJam) needs a manual update — see the HTML comment next to the diagram in `ARCHITECTURE.md` for instructions.\n\n### Type system hierarchy\n\nThe type system has three levels (generated from `re_type_definitions`):\n\n1. **Encodings** (`rerun.encodings.*`) - Basic types like Vec3D, Color\n2. **Components** (`rerun.components.*`) - Named semantic wrappers (Position3D, Radius)\n3. **Archetypes** (`rerun.archetypes.*`) - Collections of components (Points3D, Image)\n\nEach archetype specifies:\n- Required components (must be provided)\n- Recommended components (have good defaults)\n- Optional components (purely optional)\n\nExample: `Points3D` archetype requires `positions`, recommends `colors` and `radii`, allows optional `labels`.\n\n### Data flow\n\n```\nSDK (log archetype)\n    ↓ encode to Apache Arrow\nLogMsg (encoded data)\n    ↓ transport (gRPC/file/memory)\nre_chunk_store (indexed time series DB)\n    ↓ query\nViewer (immediate mode rendering)\n```\n\n### Blueprint system\n\nThe blueprint is the viewer's configuration layer:\n- Stored as a separate store (`re_entity_db`) with \"blueprint\" timeline\n- Defines: view layout, visibility, per-entity overrides, view properties\n- Uses the same type system as logged data\n- Basic blueprint path hierarchy: `/viewport/`, `/view/{uuid}/`, `/container/{uuid}/`\n\n### Visualizers\n\nEach view type (Spatial3D, TimeSeries, etc.) has registered visualizers:\n- Determine which entities/archetypes can be visualized\n- Execute per-frame: query data → process → generate render commands\n- Examples: Points3DVisualizer, LineStripsVisualizer, MeshVisualizer\n\nThe viewer uses **immediate mode**: every frame, query the store and re-render from scratch.\n\n## Python development workflow\n\nPython uses a separate uv-managed .venv (not pixi's conda env):\n\n```bash\npixi run py-build              # Build rerun-sdk into .venv\npixi run uvpy script.py        # Run Python scripts via uv\npixi run uv run script.py      # Explicit uv run\n```\n\nThe `uv` wrapper script unsets `CONDA_PREFIX` to ensure isolation from pixi's environment.\n\n## Important notes\n\n- **PyO3 Configuration**: If you see PyO3 config errors, run `pixi run ensure-pyo3-build-cfg`\n- **git-lfs**: Required for test snapshots. Install with your package manager and run `git lfs install`\n- **Immediate Mode**: The entire viewer is rendered from scratch each frame (no state management callbacks)\n- **Arrow Native**: Data is stored, transmitted, and queried as Apache Arrow arrays\n- **Multi-language**: Changes to `re_type_definitions` affect Rust, Python, and C++ simultaneously\n\n## Python docstring formatting\n\nPython API docs are built with **MkDocs + mkdocstrings** (NOT Sphinx). Never use reStructuredText (rST) syntax in Python docstrings or documentation. Use markdown instead:\n\n- **Cross-references:** Use `[`ClassName`][]` (mkdocstrings syntax), NOT `:class:`ClassName`` / `:func:` / `:meth:` (rST roles)\n- **Warnings/notes:** Use MkDocs admonitions (`!!! warning` with indented body), NOT `.. warning::` (rST directives)\n- **Deprecation notices:** Use the `@deprecated` decorator (mkdocstrings renders it automatically). Do NOT duplicate in the docstring with `.. deprecated::` or `**Deprecated:**`\n- **Code blocks:** Use markdown fenced blocks (`` ``` ``), NOT `.. code-block::`\n- **Parameter docs:** Use numpy-style sections (`Parameters`, `Returns` with `----------`), which is what the codebase already uses\n\n## Documentation system\n\nSee [`docs/README.md`](docs/README.md) for the full documentation architecture.\n\nThe docs span multiple sites: the main docs at `rerun.io/docs` (built from `docs/content/`), plus API reference sites for Python (MkDocs), C++ (Doxygen), and JS (TypeDoc) at `ref.rerun.io/docs/{python,cpp,js}/`.\n\nKey things to know:\n- **`docs/content/reference/types/`** is auto-generated by `pixi run codegen` from `re_type_definitions` - do not edit directly\n- **`docs/content/reference/cli.md`** is auto-generated by `pixi run man` - do not edit directly\n- **Code snippets** live in `docs/snippets/all/` with implementations in Python, Rust, and C++\n- `pixi run py-docs-serve` previews Python API docs locally\n- `pixi run -e cpp cpp-docs` builds C++ docs\n\n## Development references\n\n- [`ARCHITECTURE.md`](ARCHITECTURE.md) - Detailed architecture documentation\n- [`BUILD.md`](BUILD.md) - Full build instructions\n- [`CODE_STYLE.md`](CODE_STYLE.md) - Code style guidelines\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) - Contribution guidelines\n- [`DESIGN.md`](DESIGN.md) - Guidelines for UI design, covering GUI, CLI, documentation, log messages, etc\n- [`docs/README.md`](docs/README.md) - Documentation system (sites, builds, deployment)\n- [`rerun_py/README.md`](rerun_py/README.md) - Python SDK specific instructions\n"},"files":{"AGENTS.md":"# CLAUDE.md\n\nGuidance for LLMs working in this repo.\n\n## Project overview\n\nRerun: time-aware multimodal data stack + visualization for robotics, spatial AI, computer vision. SDKs (Python, Rust, C++) log rich data (images, point clouds, tensors, etc.). Viewer for visualization.\n\n## Build system\n\n`pixi` for task management + deps. See `pixi.toml` for full task list.\n\n### Essential commands\n\n**Building:**\n- `pixi run py-build` - Build Python SDK into local .venv (uses uv)\n- `pixi run rerun-build` - Build native viewer (without web viewer)\n- `pixi run rerun-build-web` - Build web viewer (wasm)\n- `pixi run cpp-build-all` - Build all C++ artifacts\n\n**Running:**\n- `pixi run rerun` - Run viewer\n- `pixi run uvpy script.py` - Run Python scripts with rerun SDK\n- `cargo run -p <package_name>` - Run specific Rust example (e.g., `cargo run -p dna`)\n\n**Code generation:**\n- `pixi run codegen` - Generate Rust/Python/C++ code from the `re_type_definitions` crate\n\n**Formatting:**\n- `pixi run rs-fmt` - Format Rust files. **Always run after editing Rust files, before committing.**\n- `pixi run py-fmt` - Format Python files\n- `pixi run cpp-fmt` - Format C++ files\n- `pixi run toml-fmt` - Format TOML files\n\n**Testing:**\n- `cargo clippy -p <crate_name>` - Run rust checks before building\n- `cargo nextest run --all-features --no-fail-fast -p <crate_name>` - Run tests for specific crate\n  - Example: `cargo nextest run --all-features --no-fail-fast -p re_view_spatial`\n- Use `cargo nextest` (not `cargo test`) for better output + parallelism\n- Always use `--all-features` unless specific reason not to\n- Use `--no-fail-fast` to gather all failures in single run\n\n**Snapshots:**\n- **`insta` snapshots**: Text-based, run with regular Rust tests. On failure: `cargo insta review` (install: `cargo install cargo-insta`)\n- **Image comparison tests**: Render image vs checked-in reference. Uses `egui_kittest`'s `Harness::snapshot` + `TestContext` for mocking viewer.\n  - Results saved to `tests/snapshots/`, failures produce `diff.png`\n  - Update refs: `UPDATE_SNAPSHOTS=1`\n  - Update from failed CI run: `./scripts/update_snapshots_from_ci.sh`\n  - Best practices: see [egui_kittest README](https://github.com/emilk/egui/tree/master/crates/egui_kittest#snapshot-testing)\n\n## Code generation system\n\n**Critical: Never edit generated files directly.** All generated files marked \"DO NOT EDIT\" at top.\n\n### Type definition flow\n\n```\nre_type_definitions → pixi run codegen → Generated code (Rust/Python/C++) + docs (docs/content/reference/types/)\n```\n\n- Type definitions in `crates/build/re_type_definitions/rerun/`\n  - `encodings/*.def.rs` - Low-level types (Vec3D, Mat4x4, etc.)\n  - `components/*.def.rs` - Component types (Position3D, Color, etc.)\n  - `archetypes/*.def.rs` - Archetypes (Points3D, Image, etc.)\n  - `blueprint/*.def.rs` - Blueprint system types\n- Codegen implementation in `crates/build/re_types_builder/`\n- After modifying a definition, run `pixi run codegen` to regenerate\n\n### Extension pattern\n\nAdd custom functionality to generated types via `_ext` files:\n- Rust: `filename_ext.rs` (auto-imported by codegen)\n- Python: `filename_ext.py` (mixed into generated class)\n- C++: `filename_ext.cpp` (compiled + included auto, parts may be marked for copy into header by codegen)\n\n## Code conventions\n\n### General\n\n- use `…` instead of `...` <!-- NOLINT -->\n- Validate conventions via `pixi run lint-rerun <file>` (no file = check everything)\n- Prose style (em vs en dash, sentence endings, casing) — see [`DESIGN.md`](DESIGN.md). In short: spaced em dash ` — `, never unspaced `word—word`, and don't use `–` as a sentence dash (it's for numeric ranges only) <!-- NOLINT -->\n- In error and log messages, put the error first and any file path at the end (e.g. `Failed to import: {err}\\nFile path: {path}`), never in the middle.\n  Paths can be long or sensitive, so trailing placement makes them easy to strip when copy-pasting.\n- One sentence per line in markdown files.\n  Markdown joins consecutive lines into a paragraph, so rendering is unchanged — but diffs become much easier to review.\n\n## Architecture overview\n\n### Crate organization\n\n```\ncrates/\n├── build/     # Code generation (re_types_builder)\n├── store/     # Data types, storage, querying\n├── top/       # User-facing SDKs and CLI\n└── viewer/    # Viewer UI and rendering\n```\n\nMore details in `ARCHITECTURE.md`.\n\n**When adding, removing, or renaming a crate**, update `ARCHITECTURE.md`:\nadd the crate to the appropriate crate table, and flag for the author that the crate-organization diagram (FigJam) needs a manual update — see the HTML comment next to the diagram in `ARCHITECTURE.md` for instructions.\n\n### Type system hierarchy\n\nThree levels (generated from `re_type_definitions`):\n\n1. **Encodings** (`rerun.encodings.*`) - Basic types like Vec3D, Color\n2. **Components** (`rerun.components.*`) - Named semantic wrappers (Position3D, Radius)\n3. **Archetypes** (`rerun.archetypes.*`) - Collections of components (Points3D, Image)\n\nEach archetype specifies:\n- Required components (must provide)\n- Recommended components (good defaults)\n- Optional components\n\nExample: `Points3D` requires `positions`, recommends `colors` and `radii`, optional `labels`.\n\n### Data flow\n\n```\nSDK (log archetype)\n    ↓ encode to Apache Arrow\nLogMsg (encoded data)\n    ↓ transport (gRPC/file/memory)\nre_chunk_store (indexed time series DB)\n    ↓ query\nViewer (immediate mode rendering)\n```\n\n### Blueprint system\n\nViewer's configuration layer:\n- Stored as separate store (`re_entity_db`) with \"blueprint\" timeline\n- Defines: view layout, visibility, per-entity overrides, view properties\n- Uses same type system as logged data\n- Path hierarchy: `/viewport/`, `/view/{uuid}/`, `/container/{uuid}/`\n\n### Visualizers\n\nEach view type (Spatial3D, TimeSeries, etc.) has registered visualizers:\n- Determine which entities/archetypes can be visualized\n- Execute per-frame: query data → process → generate render commands\n- Examples: Points3DVisualizer, LineStripsVisualizer, MeshVisualizer\n\nViewer uses **immediate mode**: every frame, query store + re-render from scratch.\n\n## Documentation snippets\n\nSee [`docs/snippets/README.md`](docs/snippets/README.md) for running, building, finding snippets. Config in [`docs/snippets/snippets.toml`](docs/snippets/snippets.toml).\n\n## Python development workflow\n\nPython uses separate uv-managed .venv (not pixi's conda env):\n\n```bash\npixi run py-build              # Build rerun-sdk into .venv\npixi run uvpy script.py        # Run Python scripts via uv\npixi run uv run script.py      # Explicit uv run\n```\n\n`uv` wrapper unsets `CONDA_PREFIX` for isolation from pixi's env.\n\n## Important notes\n\n- **PyO3 Configuration**: PyO3 config errors → run `pixi run ensure-pyo3-build-cfg`\n- **git-lfs**: Required for test snapshots. Install + run `git lfs install`\n- **Immediate Mode**: Entire viewer rendered from scratch each frame (no state management callbacks)\n- **Arrow Native**: Data stored, transmitted, queried as Apache Arrow arrays\n- **Multi-language**: definition changes affect Rust, Python, C++ simultaneously\n\n## Python docstring formatting\n\nPython API docs use **MkDocs + mkdocstrings** (NOT Sphinx). Never use reStructuredText (rST) in Python docstrings. Use markdown:\n\n- Cross-refs: `[`ClassName`][]` not `:class:`ClassName`` / `:func:` / `:meth:`\n- Warnings: `!!! warning` (MkDocs admonition with indented body) not `.. warning::`\n- Deprecation: use `@deprecated` decorator (mkdocstrings renders it), don't duplicate in docstring\n- Code blocks: markdown fenced blocks, not `.. code-block::`\n- Params: numpy-style (`Parameters`, `Returns` with `----------`)\n\n## Documentation system\n\nSee [`docs/README.md`](docs/README.md) for full docs architecture.\n\nDocs span multiple sites: main docs at `rerun.io/docs` (from `docs/content/`), API refs for Python (MkDocs), C++ (Doxygen), JS (TypeDoc) at `ref.rerun.io/docs/{python,cpp,js}/`.\n\nKey points:\n- **`docs/content/reference/types/`** auto-generated by `pixi run codegen` from `re_type_definitions` - don't edit\n- **`docs/content/reference/cli.md`** auto-generated by `pixi run man` - don't edit\n- **Code snippets** in `docs/snippets/all/` with Python, Rust, C++ implementations\n- `pixi run py-docs-serve` previews Python API docs locally\n- `pixi run -e cpp cpp-docs` builds C++ docs\n\n## Development references\n\n- [`ARCHITECTURE.md`](ARCHITECTURE.md) - Detailed architecture docs\n- [`BUILD.md`](BUILD.md) - Full build instructions\n- [`CODE_STYLE.md`](CODE_STYLE.md) - Code style guidelines\n- [`DESIGN.md`](DESIGN.md) - UI design guidelines (GUI, CLI, docs, log messages)\n- [`docs/README.md`](docs/README.md) - Documentation system (sites, builds, deployment)\n- [`rerun_py/README.md`](rerun_py/README.md) - Python SDK instructions\n\n## Contributing\n\nDon't open pull requests or issues unless explicitly asked.\nWhen opening or interacting with one, follow the [pull request template](.github/pull_request_template.md) or [issue templates](.github/ISSUE_TEMPLATE/), and disclose that you are an LLM.\nLet the user know that you included this disclosure.\n","CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) and other LLMs when working with code in this repository.\n\n## Project overview\n\nRerun is a time-aware multimodal data stack and visualizations tool used in robotics, spatial AI, computer vision, and similar domains. It provides SDKs (Python, Rust, C++) for logging rich data (images, point clouds, tensors, etc.) and a Viewer for visualization.\n\n## Build system\n\nWe use `pixi` for task management and dependency installation. Check `pixi.toml` for a full list of tasks.\n\n### Essential commands\n\n**Building:**\n- `pixi run py-build` - Build Python SDK into local .venv (uses uv)\n- `pixi run rerun-build` - Build native viewer (without web viewer)\n- `pixi run rerun-build-web` - Build web viewer (wasm)\n- `pixi run cpp-build-all` - Build all C++ artifacts\n\n**Running:**\n- `pixi run rerun` - Run the viewer\n- `pixi run uvpy script.py` - Run Python scripts with rerun SDK\n- `cargo run -p <package_name>` - Run specific Rust example (e.g., `cargo run -p dna`)\n\n**Code generation:**\n- `pixi run codegen` - Generate Rust/Python/C++ code from the `re_type_definitions` crate\n\n**Formatting:**\n- `pixi run rs-fmt` - Format all Rust files. Always run this after making changes.\n- `pixi run py-fmt` - Format Python files\n- `pixi run cpp-fmt` - Format C++ files\n- `pixi run toml-fmt` - Format TOML files\n\n**Testing:**\n- Use `cargo clippy -p <crate_name>` to run general rust checks before building things\n- `cargo nextest run --all-features --no-fail-fast -p <crate_name>` - Run tests for a specific crate\n  - Example: `cargo nextest run --all-features --no-fail-fast -p re_view_spatial`\n- Use `cargo nextest` (not `cargo test`) for better output and parallelism\n- Always use `--all-features` unless you have a specific reason not to\n- Use `--no-fail-fast` to gather all test failures in a single run\n\n## Code generation system\n\n**Critical: Never edit generated files directly.** All generated files are marked \"DO NOT EDIT\" at the top.\n\n### Type definition flow\n\n```\nre_type_definitions → pixi run codegen → Generated code (Rust/Python/C++) + docs (docs/content/reference/types/)\n```\n\n- Type definitions live in `crates/build/re_type_definitions/rerun/`\n  - `encodings/*.def.rs` - Low-level types (Vec3D, Mat4x4, etc.)\n  - `components/*.def.rs` - Component types (Position3D, Color, etc.)\n  - `archetypes/*.def.rs` - Archetypes (Points3D, Image, etc.)\n  - `blueprint/*.def.rs` - Blueprint system types\n- Codegen implementation is in `crates/build/re_types_builder/`\n- After modifying a definition, run `pixi run codegen` to regenerate code\n\n### Extension pattern\n\nTo add custom functionality to generated types, create `_ext` files:\n- Rust: `filename_ext.rs` (automatically imported by codegen)\n- Python: `filename_ext.py` (mixed in with generated class)\n- C++: `filename_ext.cpp` (compiled and included automatically, parts of it may be marked for copy into the header by codegen)\n\n## Code conventions\n\n### General\n\n- use `…` instead of `...` <!-- NOLINT -->\n- validate various custom conventions via `pixi run lint-rerun <file>` (not passing any file will check everything)\n- Use `format!(\"{x}\")` over `format!(\"{}, x)` (same in log calls etc)\n- Don't write trivial comments that add nothing new\n- In error and log messages, put the error first and any file path at the end (e.g. `Failed to import: {err}\\nFile path: {path}`), never in the middle.\n  Paths can be long or sensitive, so trailing placement makes them easy to strip when copy-pasting.\n- Prose style (em vs en dash, sentence endings, casing) — see [`DESIGN.md`](DESIGN.md). In short: spaced em dash ` — `, never unspaced `word—word`, and don't use `–` as a sentence dash (it's for numeric ranges only) <!-- NOLINT -->\n- One sentence per line in markdown files.\n  Markdown joins consecutive lines into a paragraph, so rendering is unchanged — but diffs become much easier to review.\n\n## Architecture overview\n\n### Crate organization\n\n```\ncrates/\n├── build/     # Code generation (re_types_builder)\n├── store/     # Data types, storage, querying\n├── top/       # User-facing SDKs and CLI\n└── viewer/    # Viewer UI and rendering\n```\n\nFor more details about the architecture see `ARCHITECTURE.md`.\n\n**When adding, removing, or renaming a crate**, update `ARCHITECTURE.md`:\nadd the crate to the appropriate crate table, and flag for the author that the crate-organization diagram (FigJam) needs a manual update — see the HTML comment next to the diagram in `ARCHITECTURE.md` for instructions.\n\n### Type system hierarchy\n\nThe type system has three levels (generated from `re_type_definitions`):\n\n1. **Encodings** (`rerun.encodings.*`) - Basic types like Vec3D, Color\n2. **Components** (`rerun.components.*`) - Named semantic wrappers (Position3D, Radius)\n3. **Archetypes** (`rerun.archetypes.*`) - Collections of components (Points3D, Image)\n\nEach archetype specifies:\n- Required components (must be provided)\n- Recommended components (have good defaults)\n- Optional components (purely optional)\n\nExample: `Points3D` archetype requires `positions`, recommends `colors` and `radii`, allows optional `labels`.\n\n### Data flow\n\n```\nSDK (log archetype)\n    ↓ encode to Apache Arrow\nLogMsg (encoded data)\n    ↓ transport (gRPC/file/memory)\nre_chunk_store (indexed time series DB)\n    ↓ query\nViewer (immediate mode rendering)\n```\n\n### Blueprint system\n\nThe blueprint is the viewer's configuration layer:\n- Stored as a separate store (`re_entity_db`) with \"blueprint\" timeline\n- Defines: view layout, visibility, per-entity overrides, view properties\n- Uses the same type system as logged data\n- Basic blueprint path hierarchy: `/viewport/`, `/view/{uuid}/`, `/container/{uuid}/`\n\n### Visualizers\n\nEach view type (Spatial3D, TimeSeries, etc.) has registered visualizers:\n- Determine which entities/archetypes can be visualized\n- Execute per-frame: query data → process → generate render commands\n- Examples: Points3DVisualizer, LineStripsVisualizer, MeshVisualizer\n\nThe viewer uses **immediate mode**: every frame, query the store and re-render from scratch.\n\n## Python development workflow\n\nPython uses a separate uv-managed .venv (not pixi's conda env):\n\n```bash\npixi run py-build              # Build rerun-sdk into .venv\npixi run uvpy script.py        # Run Python scripts via uv\npixi run uv run script.py      # Explicit uv run\n```\n\nThe `uv` wrapper script unsets `CONDA_PREFIX` to ensure isolation from pixi's environment.\n\n## Important notes\n\n- **PyO3 Configuration**: If you see PyO3 config errors, run `pixi run ensure-pyo3-build-cfg`\n- **git-lfs**: Required for test snapshots. Install with your package manager and run `git lfs install`\n- **Immediate Mode**: The entire viewer is rendered from scratch each frame (no state management callbacks)\n- **Arrow Native**: Data is stored, transmitted, and queried as Apache Arrow arrays\n- **Multi-language**: Changes to `re_type_definitions` affect Rust, Python, and C++ simultaneously\n\n## Python docstring formatting\n\nPython API docs are built with **MkDocs + mkdocstrings** (NOT Sphinx). Never use reStructuredText (rST) syntax in Python docstrings or documentation. Use markdown instead:\n\n- **Cross-references:** Use `[`ClassName`][]` (mkdocstrings syntax), NOT `:class:`ClassName`` / `:func:` / `:meth:` (rST roles)\n- **Warnings/notes:** Use MkDocs admonitions (`!!! warning` with indented body), NOT `.. warning::` (rST directives)\n- **Deprecation notices:** Use the `@deprecated` decorator (mkdocstrings renders it automatically). Do NOT duplicate in the docstring with `.. deprecated::` or `**Deprecated:**`\n- **Code blocks:** Use markdown fenced blocks (`` ``` ``), NOT `.. code-block::`\n- **Parameter docs:** Use numpy-style sections (`Parameters`, `Returns` with `----------`), which is what the codebase already uses\n\n## Documentation system\n\nSee [`docs/README.md`](docs/README.md) for the full documentation architecture.\n\nThe docs span multiple sites: the main docs at `rerun.io/docs` (built from `docs/content/`), plus API reference sites for Python (MkDocs), C++ (Doxygen), and JS (TypeDoc) at `ref.rerun.io/docs/{python,cpp,js}/`.\n\nKey things to know:\n- **`docs/content/reference/types/`** is auto-generated by `pixi run codegen` from `re_type_definitions` - do not edit directly\n- **`docs/content/reference/cli.md`** is auto-generated by `pixi run man` - do not edit directly\n- **Code snippets** live in `docs/snippets/all/` with implementations in Python, Rust, and C++\n- `pixi run py-docs-serve` previews Python API docs locally\n- `pixi run -e cpp cpp-docs` builds C++ docs\n\n## Development references\n\n- [`ARCHITECTURE.md`](ARCHITECTURE.md) - Detailed architecture documentation\n- [`BUILD.md`](BUILD.md) - Full build instructions\n- [`CODE_STYLE.md`](CODE_STYLE.md) - Code style guidelines\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) - Contribution guidelines\n- [`DESIGN.md`](DESIGN.md) - Guidelines for UI design, covering GUI, CLI, documentation, log messages, etc\n- [`docs/README.md`](docs/README.md) - Documentation system (sites, builds, deployment)\n- [`rerun_py/README.md`](rerun_py/README.md) - Python SDK specific instructions\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# CLAUDE.md\n\nGuidance for LLMs working in this repo.\n\n## Project overview\n\nRerun: time-aware multimodal data stack + visualization for robotics, spatial AI, computer vision. SDKs (Python, Rust, C++) log rich data (images, point clouds, tensors, etc.). Viewer for visualization.\n\n## Build system\n\n`pixi` for task management + deps. See `pixi.toml` for full task list.\n\n### Essential commands\n\n**Building:**\n- `pixi run py-build` - Build Python SDK into local .venv (uses uv)\n- `pixi run rerun-build` - Build native viewer (without web viewer)\n- `pixi run rerun-build-web` - Build web viewer (wasm)\n- `pixi run cpp-build-all` - Build all C++ artifacts\n\n**Running:**\n- `pixi run rerun` - Run viewer\n- `pixi run uvpy script.py` - Run Python scripts with rerun SDK\n- `cargo run -p <package_name>` - Run specific Rust example (e.g., `cargo run -p dna`)\n\n**Code generation:**\n- `pixi run codegen` - Generate Rust/Python/C++ code from the `re_type_definitions` crate\n\n**Formatting:**\n- `pixi run rs-fmt` - Format Rust files. **Always run after editing Rust files, before committing.**\n- `pixi run py-fmt` - Format Python files\n- `pixi run cpp-fmt` - Format C++ files\n- `pixi run toml-fmt` - Format TOML files\n\n**Testing:**\n- `cargo clippy -p <crate_name>` - Run rust checks before building\n- `cargo nextest run --all-features --no-fail-fast -p <crate_name>` - Run tests for specific crate\n  - Example: `cargo nextest run --all-features --no-fail-fast -p re_view_spatial`\n- Use `cargo nextest` (not `cargo test`) for better output + parallelism\n- Always use `--all-features` unless specific reason not to\n- Use `--no-fail-fast` to gather all failures in single run\n\n**Snapshots:**\n- **`insta` snapshots**: Text-based, run with regular Rust tests. On failure: `cargo insta review` (install: `cargo install cargo-insta`)\n- **Image comparison tests**: Render image vs checked-in reference. Uses `egui_kittest`'s `Harness::snapshot` + `TestContext` for mocking viewer.\n  - Results saved to `tests/snapshots/`, failures produce `diff.png`\n  - Update refs: `UPDATE_SNAPSHOTS=1`\n  - Update from failed CI run: `./scripts/update_snapshots_from_ci.sh`\n  - Best practices: see [egui_kittest README](https://github.com/emilk/egui/tree/master/crates/egui_kittest#snapshot-testing)\n\n## Code generation system\n\n**Critical: Never edit generated files directly.** All generated files marked \"DO NOT EDIT\" at top.\n\n### Type definition flow\n\n```\nre_type_definitions → pixi run codegen → Generated code (Rust/Python/C++) + docs (docs/content/reference/types/)\n```\n\n- Type definitions in `crates/build/re_type_definitions/rerun/`\n  - `encodings/*.def.rs` - Low-level types (Vec3D, Mat4x4, etc.)\n  - `components/*.def.rs` - Component types (Position3D, Color, etc.)\n  - `archetypes/*.def.rs` - Archetypes (Points3D, Image, etc.)\n  - `blueprint/*.def.rs` - Blueprint system types\n- Codegen implementation in `crates/build/re_types_builder/`\n- After modifying a definition, run `pixi run codegen` to regenerate\n\n### Extension pattern\n\nAdd custom functionality to generated types via `_ext` files:\n- Rust: `filename_ext.rs` (auto-imported by codegen)\n- Python: `filename_ext.py` (mixed into generated class)\n- C++: `filename_ext.cpp` (compiled + included auto, parts may be marked for copy into header by codegen)\n\n## Code conventions\n\n### General\n\n- use `…` instead of `...` <!-- NOLINT -->\n- Validate conventions via `pixi run lint-rerun <file>` (no file = check everything)\n- Prose style (em vs en dash, sentence endings, casing) — see [`DESIGN.md`](DESIGN.md). In short: spaced em dash ` — `, never unspaced `word—word`, and don't use `–` as a sentence dash (it's for numeric ranges only) <!-- NOLINT -->\n- In error and log messages, put the error first and any file path at the end (e.g. `Failed to import: {err}\\nFile path: {path}`), never in the middle.\n  Paths can be long or sensitive, so trailing placement makes them easy to strip when copy-pasting.\n- One sentence per line in markdown files.\n  Markdown joins consecutive lines into a paragraph, so rendering is unchanged — but diffs become much easier to review.\n\n## Architecture overview\n\n### Crate organization\n\n```\ncrates/\n├── build/     # Code generation (re_types_builder)\n├── store/     # Data types, storage, querying\n├── top/       # User-facing SDKs and CLI\n└── viewer/    # Viewer UI and rendering\n```\n\nMore details in `ARCHITECTURE.md`.\n\n**When adding, removing, or renaming a crate**, update `ARCHITECTURE.md`:\nadd the crate to the appropriate crate table, and flag for the author that the crate-organization diagram (FigJam) needs a manual update — see the HTML comment next to the diagram in `ARCHITECTURE.md` for instructions.\n\n### Type system hierarchy\n\nThree levels (generated from `re_type_definitions`):\n\n1. **Encodings** (`rerun.encodings.*`) - Basic types like Vec3D, Color\n2. **Components** (`rerun.components.*`) - Named semantic wrappers (Position3D, Radius)\n3. **Archetypes** (`rerun.archetypes.*`) - Collections of components (Points3D, Image)\n\nEach archetype specifies:\n- Required components (must provide)\n- Recommended components (good defaults)\n- Optional components\n\nExample: `Points3D` requires `positions`, recommends `colors` and `radii`, optional `labels`.\n\n### Data flow\n\n```\nSDK (log archetype)\n    ↓ encode to Apache Arrow\nLogMsg (encoded data)\n    ↓ transport (gRPC/file/memory)\nre_chunk_store (indexed time series DB)\n    ↓ query\nViewer (immediate mode rendering)\n```\n\n### Blueprint system\n\nViewer's configuration layer:\n- Stored as separate store (`re_entity_db`) with \"blueprint\" timeline\n- Defines: view layout, visibility, per-entity overrides, view properties\n- Uses same type system as logged data\n- Path hierarchy: `/viewport/`, `/view/{uuid}/`, `/container/{uuid}/`\n\n### Visualizers\n\nEach view type (Spatial3D, TimeSeries, etc.) has registered visualizers:\n- Determine which entities/archetypes can be visualized\n- Execute per-frame: query data → process → generate render commands\n- Examples: Points3DVisualizer, LineStripsVisualizer, MeshVisualizer\n\nViewer uses **immediate mode**: every frame, query store + re-render from scratch.\n\n## Documentation snippets\n\nSee [`docs/snippets/README.md`](docs/snippets/README.md) for running, building, finding snippets. Config in [`docs/snippets/snippets.toml`](docs/snippets/snippets.toml).\n\n## Python development workflow\n\nPython uses separate uv-managed .venv (not pixi's conda env):\n\n```bash\npixi run py-build              # Build rerun-sdk into .venv\npixi run uvpy script.py        # Run Python scripts via uv\npixi run uv run script.py      # Explicit uv run\n```\n\n`uv` wrapper unsets `CONDA_PREFIX` for isolation from pixi's env.\n\n## Important notes\n\n- **PyO3 Configuration**: PyO3 config errors → run `pixi run ensure-pyo3-build-cfg`\n- **git-lfs**: Required for test snapshots. Install + run `git lfs install`\n- **Immediate Mode**: Entire viewer rendered from scratch each frame (no state management callbacks)\n- **Arrow Native**: Data stored, transmitted, queried as Apache Arrow arrays\n- **Multi-language**: definition changes affect Rust, Python, C++ simultaneously\n\n## Python docstring formatting\n\nPython API docs use **MkDocs + mkdocstrings** (NOT Sphinx). Never use reStructuredText (rST) in Python docstrings. Use markdown:\n\n- Cross-refs: `[`ClassName`][]` not `:class:`ClassName`` / `:func:` / `:meth:`\n- Warnings: `!!! warning` (MkDocs admonition with indented body) not `.. warning::`\n- Deprecation: use `@deprecated` decorator (mkdocstrings renders it), don't duplicate in docstring\n- Code blocks: markdown fenced blocks, not `.. code-block::`\n- Params: numpy-style (`Parameters`, `Returns` with `----------`)\n\n## Documentation system\n\nSee [`docs/README.md`](docs/README.md) for full docs architecture.\n\nDocs span multiple sites: main docs at `rerun.io/docs` (from `docs/content/`), API refs for Python (MkDocs), C++ (Doxygen), JS (TypeDoc) at `ref.rerun.io/docs/{python,cpp,js}/`.\n\nKey points:\n- **`docs/content/reference/types/`** auto-generated by `pixi run codegen` from `re_type_definitions` - don't edit\n- **`docs/content/reference/cli.md`** auto-generated by `pixi run man` - don't edit\n- **Code snippets** in `docs/snippets/all/` with Python, Rust, C++ implementations\n- `pixi run py-docs-serve` previews Python API docs locally\n- `pixi run -e cpp cpp-docs` builds C++ docs\n\n## Development references\n\n- [`ARCHITECTURE.md`](ARCHITECTURE.md) - Detailed architecture docs\n- [`BUILD.md`](BUILD.md) - Full build instructions\n- [`CODE_STYLE.md`](CODE_STYLE.md) - Code style guidelines\n- [`DESIGN.md`](DESIGN.md) - UI design guidelines (GUI, CLI, docs, log messages)\n- [`docs/README.md`](docs/README.md) - Documentation system (sites, builds, deployment)\n- [`rerun_py/README.md`](rerun_py/README.md) - Python SDK instructions\n\n## Contributing\n\nDon't open pull requests or issues unless explicitly asked.\nWhen opening or interacting with one, follow the [pull request template](.github/pull_request_template.md) or [issue templates](.github/ISSUE_TEMPLATE/), and disclose that you are an LLM.\nLet the user know that you included this disclosure.\n","category":"root","tokens":2271},{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) and other LLMs when working with code in this repository.\n\n## Project overview\n\nRerun is a time-aware multimodal data stack and visualizations tool used in robotics, spatial AI, computer vision, and similar domains. It provides SDKs (Python, Rust, C++) for logging rich data (images, point clouds, tensors, etc.) and a Viewer for visualization.\n\n## Build system\n\nWe use `pixi` for task management and dependency installation. Check `pixi.toml` for a full list of tasks.\n\n### Essential commands\n\n**Building:**\n- `pixi run py-build` - Build Python SDK into local .venv (uses uv)\n- `pixi run rerun-build` - Build native viewer (without web viewer)\n- `pixi run rerun-build-web` - Build web viewer (wasm)\n- `pixi run cpp-build-all` - Build all C++ artifacts\n\n**Running:**\n- `pixi run rerun` - Run the viewer\n- `pixi run uvpy script.py` - Run Python scripts with rerun SDK\n- `cargo run -p <package_name>` - Run specific Rust example (e.g., `cargo run -p dna`)\n\n**Code generation:**\n- `pixi run codegen` - Generate Rust/Python/C++ code from the `re_type_definitions` crate\n\n**Formatting:**\n- `pixi run rs-fmt` - Format all Rust files. Always run this after making changes.\n- `pixi run py-fmt` - Format Python files\n- `pixi run cpp-fmt` - Format C++ files\n- `pixi run toml-fmt` - Format TOML files\n\n**Testing:**\n- Use `cargo clippy -p <crate_name>` to run general rust checks before building things\n- `cargo nextest run --all-features --no-fail-fast -p <crate_name>` - Run tests for a specific crate\n  - Example: `cargo nextest run --all-features --no-fail-fast -p re_view_spatial`\n- Use `cargo nextest` (not `cargo test`) for better output and parallelism\n- Always use `--all-features` unless you have a specific reason not to\n- Use `--no-fail-fast` to gather all test failures in a single run\n\n## Code generation system\n\n**Critical: Never edit generated files directly.** All generated files are marked \"DO NOT EDIT\" at the top.\n\n### Type definition flow\n\n```\nre_type_definitions → pixi run codegen → Generated code (Rust/Python/C++) + docs (docs/content/reference/types/)\n```\n\n- Type definitions live in `crates/build/re_type_definitions/rerun/`\n  - `encodings/*.def.rs` - Low-level types (Vec3D, Mat4x4, etc.)\n  - `components/*.def.rs` - Component types (Position3D, Color, etc.)\n  - `archetypes/*.def.rs` - Archetypes (Points3D, Image, etc.)\n  - `blueprint/*.def.rs` - Blueprint system types\n- Codegen implementation is in `crates/build/re_types_builder/`\n- After modifying a definition, run `pixi run codegen` to regenerate code\n\n### Extension pattern\n\nTo add custom functionality to generated types, create `_ext` files:\n- Rust: `filename_ext.rs` (automatically imported by codegen)\n- Python: `filename_ext.py` (mixed in with generated class)\n- C++: `filename_ext.cpp` (compiled and included automatically, parts of it may be marked for copy into the header by codegen)\n\n## Code conventions\n\n### General\n\n- use `…` instead of `...` <!-- NOLINT -->\n- validate various custom conventions via `pixi run lint-rerun <file>` (not passing any file will check everything)\n- Use `format!(\"{x}\")` over `format!(\"{}, x)` (same in log calls etc)\n- Don't write trivial comments that add nothing new\n- In error and log messages, put the error first and any file path at the end (e.g. `Failed to import: {err}\\nFile path: {path}`), never in the middle.\n  Paths can be long or sensitive, so trailing placement makes them easy to strip when copy-pasting.\n- Prose style (em vs en dash, sentence endings, casing) — see [`DESIGN.md`](DESIGN.md). In short: spaced em dash ` — `, never unspaced `word—word`, and don't use `–` as a sentence dash (it's for numeric ranges only) <!-- NOLINT -->\n- One sentence per line in markdown files.\n  Markdown joins consecutive lines into a paragraph, so rendering is unchanged — but diffs become much easier to review.\n\n## Architecture overview\n\n### Crate organization\n\n```\ncrates/\n├── build/     # Code generation (re_types_builder)\n├── store/     # Data types, storage, querying\n├── top/       # User-facing SDKs and CLI\n└── viewer/    # Viewer UI and rendering\n```\n\nFor more details about the architecture see `ARCHITECTURE.md`.\n\n**When adding, removing, or renaming a crate**, update `ARCHITECTURE.md`:\nadd the crate to the appropriate crate table, and flag for the author that the crate-organization diagram (FigJam) needs a manual update — see the HTML comment next to the diagram in `ARCHITECTURE.md` for instructions.\n\n### Type system hierarchy\n\nThe type system has three levels (generated from `re_type_definitions`):\n\n1. **Encodings** (`rerun.encodings.*`) - Basic types like Vec3D, Color\n2. **Components** (`rerun.components.*`) - Named semantic wrappers (Position3D, Radius)\n3. **Archetypes** (`rerun.archetypes.*`) - Collections of components (Points3D, Image)\n\nEach archetype specifies:\n- Required components (must be provided)\n- Recommended components (have good defaults)\n- Optional components (purely optional)\n\nExample: `Points3D` archetype requires `positions`, recommends `colors` and `radii`, allows optional `labels`.\n\n### Data flow\n\n```\nSDK (log archetype)\n    ↓ encode to Apache Arrow\nLogMsg (encoded data)\n    ↓ transport (gRPC/file/memory)\nre_chunk_store (indexed time series DB)\n    ↓ query\nViewer (immediate mode rendering)\n```\n\n### Blueprint system\n\nThe blueprint is the viewer's configuration layer:\n- Stored as a separate store (`re_entity_db`) with \"blueprint\" timeline\n- Defines: view layout, visibility, per-entity overrides, view properties\n- Uses the same type system as logged data\n- Basic blueprint path hierarchy: `/viewport/`, `/view/{uuid}/`, `/container/{uuid}/`\n\n### Visualizers\n\nEach view type (Spatial3D, TimeSeries, etc.) has registered visualizers:\n- Determine which entities/archetypes can be visualized\n- Execute per-frame: query data → process → generate render commands\n- Examples: Points3DVisualizer, LineStripsVisualizer, MeshVisualizer\n\nThe viewer uses **immediate mode**: every frame, query the store and re-render from scratch.\n\n## Python development workflow\n\nPython uses a separate uv-managed .venv (not pixi's conda env):\n\n```bash\npixi run py-build              # Build rerun-sdk into .venv\npixi run uvpy script.py        # Run Python scripts via uv\npixi run uv run script.py      # Explicit uv run\n```\n\nThe `uv` wrapper script unsets `CONDA_PREFIX` to ensure isolation from pixi's environment.\n\n## Important notes\n\n- **PyO3 Configuration**: If you see PyO3 config errors, run `pixi run ensure-pyo3-build-cfg`\n- **git-lfs**: Required for test snapshots. Install with your package manager and run `git lfs install`\n- **Immediate Mode**: The entire viewer is rendered from scratch each frame (no state management callbacks)\n- **Arrow Native**: Data is stored, transmitted, and queried as Apache Arrow arrays\n- **Multi-language**: Changes to `re_type_definitions` affect Rust, Python, and C++ simultaneously\n\n## Python docstring formatting\n\nPython API docs are built with **MkDocs + mkdocstrings** (NOT Sphinx). Never use reStructuredText (rST) syntax in Python docstrings or documentation. Use markdown instead:\n\n- **Cross-references:** Use `[`ClassName`][]` (mkdocstrings syntax), NOT `:class:`ClassName`` / `:func:` / `:meth:` (rST roles)\n- **Warnings/notes:** Use MkDocs admonitions (`!!! warning` with indented body), NOT `.. warning::` (rST directives)\n- **Deprecation notices:** Use the `@deprecated` decorator (mkdocstrings renders it automatically). Do NOT duplicate in the docstring with `.. deprecated::` or `**Deprecated:**`\n- **Code blocks:** Use markdown fenced blocks (`` ``` ``), NOT `.. code-block::`\n- **Parameter docs:** Use numpy-style sections (`Parameters`, `Returns` with `----------`), which is what the codebase already uses\n\n## Documentation system\n\nSee [`docs/README.md`](docs/README.md) for the full documentation architecture.\n\nThe docs span multiple sites: the main docs at `rerun.io/docs` (built from `docs/content/`), plus API reference sites for Python (MkDocs), C++ (Doxygen), and JS (TypeDoc) at `ref.rerun.io/docs/{python,cpp,js}/`.\n\nKey things to know:\n- **`docs/content/reference/types/`** is auto-generated by `pixi run codegen` from `re_type_definitions` - do not edit directly\n- **`docs/content/reference/cli.md`** is auto-generated by `pixi run man` - do not edit directly\n- **Code snippets** live in `docs/snippets/all/` with implementations in Python, Rust, and C++\n- `pixi run py-docs-serve` previews Python API docs locally\n- `pixi run -e cpp cpp-docs` builds C++ docs\n\n## Development references\n\n- [`ARCHITECTURE.md`](ARCHITECTURE.md) - Detailed architecture documentation\n- [`BUILD.md`](BUILD.md) - Full build instructions\n- [`CODE_STYLE.md`](CODE_STYLE.md) - Code style guidelines\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) - Contribution guidelines\n- [`DESIGN.md`](DESIGN.md) - Guidelines for UI design, covering GUI, CLI, documentation, log messages, etc\n- [`docs/README.md`](docs/README.md) - Documentation system (sites, builds, deployment)\n- [`rerun_py/README.md`](rerun_py/README.md) - Python SDK specific instructions\n","category":"root","tokens":2279}]}