This file provides guidance to Claude Code (claude.ai/code) and other LLMs when working with code in this repository.
Rerun 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.
We use pixi for task management and dependency installation. Check pixi.toml for a full list of tasks.
Building:
pixi run py-build- Build Python SDK into local .venv (uses uv)pixi run rerun-build- Build native viewer (without web viewer)pixi run rerun-build-web- Build web viewer (wasm)pixi run cpp-build-all- Build all C++ artifacts
Running:
pixi run rerun- Run the viewerpixi run uvpy script.py- Run Python scripts with rerun SDKcargo run -p <package_name>- Run specific Rust example (e.g.,cargo run -p dna)
Code generation:
pixi run codegen- Generate Rust/Python/C++ code from .fbs type definitions
Formatting:
pixi run rs-fmt- Format all Rust files. Always run this after making changes.pixi run py-fmt- Format Python filespixi run cpp-fmt- Format C++ filespixi run toml-fmt- Format TOML files
Testing:
- Use
cargo clippy -p <crate_name>to run general rust checks before building things cargo nextest run --all-features --no-fail-fast -p <crate_name>- Run tests for a specific crate- Example:
cargo nextest run --all-features --no-fail-fast -p re_view_spatial
- Example:
- Use
cargo nextest(notcargo test) for better output and parallelism - Always use
--all-featuresunless you have a specific reason not to - Use
--no-fail-fastto gather all test failures in a single run
Critical: Never edit generated files directly. All generated files are marked "DO NOT EDIT" at the top.
.fbs files (definitions/) → pixi run codegen → Generated code (Rust/Python/C++)
- Type definitions live in
crates/store/re_sdk_types/definitions/rerun/datatypes/*.fbs- Low-level types (Vec3D, Mat4x4, etc.)components/*.fbs- Component types (Position3D, Color, etc.)archetypes/*.fbs- Archetypes (Points3D, Image, etc.)blueprint/*.fbs- Blueprint system types
- Codegen implementation is in
crates/build/re_types_builder/ - After modifying .fbs files, run
pixi run codegento regenerate code
To add custom functionality to generated types, create _ext files:
- Rust:
filename_ext.rs(automatically imported by codegen) - Python:
filename_ext.py(mixed in with generated class) - C++:
filename_ext.cpp(compiled and included automatically, parts of it may be marked for copy into the header by codegen)
- use
…instead of... - validate various custom conventions via
pixi run lint-rerun <file>(not passing any file will check everything) - Use
format!("{x}")overformat!("{}, x)(same in log calls etc) - Don't write trivial comments that add nothing new
crates/
├── build/ # Code generation (re_types_builder)
├── store/ # Data types, storage, querying
├── top/ # User-facing SDKs and CLI
└── viewer/ # Viewer UI and rendering
For more details about the architecture see ARCHITECTURE.md.
The type system has three levels (generated from .fbs files):
- Datatypes (
rerun.datatypes.*) - Basic types like Vec3D, Color - Components (
rerun.components.*) - Named semantic wrappers (Position3D, Radius) - Archetypes (
rerun.archetypes.*) - Collections of components (Points3D, Image)
Each archetype specifies:
- Required components (must be provided)
- Recommended components (have good defaults)
- Optional components (purely optional)
Example: Points3D archetype requires positions, recommends colors and radii, allows optional labels.
SDK (log archetype)
↓ encode to Apache Arrow
LogMsg (encoded data)
↓ transport (gRPC/file/memory)
re_chunk_store (indexed time series DB)
↓ query
Viewer (immediate mode rendering)
The blueprint is the viewer's configuration layer:
- Stored as a separate store (
re_entity_db) with "blueprint" timeline - Defines: view layout, visibility, per-entity overrides, view properties
- Uses the same type system as logged data
- Basic blueprint path hierarchy:
/viewport/,/view/{uuid}/,/container/{uuid}/
Each view type (Spatial3D, TimeSeries, etc.) has registered visualizers:
- Determine which entities/archetypes can be visualized
- Execute per-frame: query data → process → generate render commands
- Examples: Points3DVisualizer, LineStripsVisualizer, MeshVisualizer
The viewer uses immediate mode: every frame, query the store and re-render from scratch.
Python uses a separate uv-managed .venv (not pixi's conda env):
pixi run py-build # Build rerun-sdk into .venv
pixi run uvpy script.py # Run Python scripts via uv
pixi run uv run script.py # Explicit uv runThe uv wrapper script unsets CONDA_PREFIX to ensure isolation from pixi's environment.
- PyO3 Configuration: If you see PyO3 config errors, run
pixi run ensure-pyo3-build-cfg - git-lfs: Required for test snapshots. Install with your package manager and run
git lfs install - Immediate Mode: The entire viewer is rendered from scratch each frame (no state management callbacks)
- Arrow Native: Data is stored, transmitted, and queried as Apache Arrow arrays
- Multi-language: Changes to .fbs files affect Rust, Python, and C++ simultaneously
ARCHITECTURE.md- Detailed architecture documentationBUILD.md- Full build instructionsCODE_STYLE.md- Code style guidelinesCONTRIBUTING.md- Contribution guidelinesDESIGN.md- Guidelines for UI design, covering GUI, CLI, documentation, log messages, etcrerun_py/README.md- Python SDK specific instructions