Getting Started
Rerun helps robotics and Physical AI teams iterate faster: log from any sensor, visualize in the Viewer, and query with dataframes — across one recording or many.
Installation installation
pip install rerun-sdk bundles the SDK (log/query from code) and the Viewer (visualizer app).
For Rust, C++, see Install Rerun and Set up a project.
Open the Viewer open-the-viewer
rerun launches the Viewer.
Pass a file to open it directly:
rerun path/to/recording.rrdSupports .rrd, .mcap, and more.
Also available in-browser at rerun.io/viewer.
Scale across many recordings scale-across-many-recordings
Rerun's catalog organizes recordings as queryable segments.
The workflow: log (or convert) data to an .rrd, start a catalog server (or connect to an existing one if using the commercial Rerun Hub), register the .rrd as a segment, then visualize and query across recordings.
Log log
Save data to an .rrd see Log and Ingest for more details.
If you already have data in another format see our how-to for various examples converting to .rrd.
import math
import rerun as rr
with rr.RecordingStream("rerun_example_getting_started", recording_id="run-1", send_properties=False) as rec:
rec.save("run-1.rrd")
for t in range(10):
rec.set_time("t", duration=t)
rec.log("/arm/shoulder", rr.Scalars(math.sin(t * 0.5)))
rec.log("/arm/elbow", rr.Scalars(math.cos(t * 0.5)))
Start a catalog server start-a-catalog-server
rerun server starts a local catalog on port 51234 (use Rerun Hub for persistent, multi-user storage), then connect from your code:
rerun serverclient = rr.catalog.CatalogClient("rerun+http://127.0.0.1:51234")Ingest ingest
Register an .rrd with a dataset so it shows up as a queryable segment.
dataset = client.create_dataset("demo", exist_ok=True)
dataset.register([Path("run-1.rrd").absolute().as_uri()]).wait()Visualize visualize
Point the Viewer at your server to browse every recording in the catalog. See Configure the Viewer.
rerun rerun+http://127.0.0.1:51234Query query
Query the catalog into a DataFusion DataFrame. See Query and Transform.
df = dataset.filter_contents(["/arm/**"]).reader(index="t")
print(df.select("rerun_segment_id", "/arm/shoulder:Scalars:scalars", "/arm/elbow:Scalars:scalars"))