The rion CLI records your own programs locally and uploads the trace to your rr-dash account. Everything runs inside a Docker sandbox, so the only thing you install is the CLI itself (via npx).
Docker, running. The recording happens inside a privileged rr
container.
Node 18+ (for npx).
A program built with debug info, as a Linux binary (see
# Sign in — opens your browser to approve this CLI:
npx @brett_lamy/rion login
# Verify Docker + build the recorder image (first time, ~10-25 min):
npx @brett_lamy/rion doctor --buildrion login uses a browser device flow: the CLI opens a page, you click Approve while signed in, and a scoped API token is saved to ~/.config/rion/auth.json. Nothing is uploaded anonymously.
From your project directory:
npx @brett_lamy/rion record -- ./target/debug/your-programYour default browser pops open on the live trace the moment recording starts — it streams in while your program is still being recorded. The recording also shows up in your dashboard.
Arguments after -- are your program and its args, run verbatim inside the sandbox: rion record -- ./bin --flag value.
Skip the browser flow with an API token (create one on your dashboard):
RION_API_KEY=rrd_… npx @brett_lamy/rion record -- ./your-programSet RION_NO_OPEN=1 (or run in CI) to suppress the browser auto-open.
rr record runs your command deterministically inside the sandbox.
The trace is replayed under gdb to extract per-line hit counts, an ordered
linetrace, and sampled call stacks + locals.
The bundle is uploaded through the dashboard's authenticated API — the
Durable Streams credentials never leave the server.