Routing
app/[domain]/[scene] with ?demo= selection. Domain and scene pages are statically generated from the registry; the shell hydrates on the client.
Stack
37 scenes and 89 demos share one shell. Every demo is a registry entry (typed controls, legend, assumptions, library credits) plus one engine component that runs in the browser. Nothing redirects; heavy engines load lazily.
app/[domain]/[scene] with ?demo= selection. Domain and scene pages are statically generated from the registry; the shell hydrates on the client.
SceneShell: demo tabs, transport (space / r), controls (range, toggle, select, text, file, action), telemetry strip, JSON export, key gating for map providers, Built-with panel.
One component per demo under app/scenes/engines/<domain>. Three.js stages via createStage, canvas plots via kit/plot, real engines (MuJoCo WASM, Rapier, deck.gl, MapLibre, Cesium, @mcap/core, urdf-loader) behind shared kits.
scripts/copy-assets.mjs copies MuJoCo and Cesium runtime files into public/vendor before dev/build; both are loaded at runtime to keep them out of the bundle.
| Library | Version | Role | Demos |
|---|---|---|---|
| Canvas 2D | — | Rasterized plots and overlays | 43 |
| Three.js | r184 | WebGL scene, instancing, controls | 33 |
| D3 | 7 | Scales, layouts, force graphs | 7 |
| MapLibre GL JS | 5.x | Vector-tile basemap | 7 |
| Applied Intuition triage | — | Reference triage workflow | 5 |
| Xtreme1 | — | Reference annotation UX | 5 |
| Foxglove | — | Reference layout for log review | 4 |
| deck.gl | 9.4 | GPU geospatial layers | 4 |
| LeRobot | — | Episode/dataset conventions | 4 |
| @mcap/core | 2.2 | MCAP read/write | 3 |
| ASAM OpenDRIVE | 1.8 | Road network format | 3 |
| CARLA ScenarioRunner | — | Reference for closed-loop scenarios | 3 |
| MuJoCo WASM | 3.1 | Physics engine in the browser | 3 |
| urdf-loader | 0.13 | URDF → Three.js articulated model | 3 |
| CVAT | — | Reference 2D/3D labeling | 3 |
| uPlot | 1.6 | Dense time-series plots | 2 |
| Mapbox GL JS | 3.x | Standard style, 3D terrain | 2 |
| AMap Loca | 2.0 | Data visualization on AMap | 2 |
| AMap JSAPI | 2.0 | Basemap, buildings | 2 |
| CesiumJS | 1.145 | Globe, terrain, 3D Tiles | 2 |
| Isaac Lab | — | Reference for parallel RL training | 2 |
| SUMO | — | Reference traffic simulator | 2 |
| Foxglove schemas | — | Message layouts for PointCloud, Image, TF | 1 |
| AntV L7 | 2.x | Geospatial layers on any basemap | 1 |
| satellite.js | — | SGP4 orbit propagation | 1 |
| Baidu MapVGL | — | WebGL layers on Baidu Maps | 1 |
| Rerun | — | Reference viewer for episodes | 1 |
| Viser | — | Reference for multi-env web viewers | 1 |
| ASAM OpenSCENARIO | — | Scenario description reference | 1 |
| Rapier | 0.19 | Rigid-body physics (WASM) | 1 |
| NVIDIA Cosmos | — | World foundation model reference | 1 |
| TransformControls | — | Gizmo manipulation | 1 |
| KITTI format | — | Label export reference | 1 |
| nuScenes devkit | — | Export schema reference | 1 |
| Plotly.js | — | Reference for statistical charts | 1 |
| GLTFLoader | — | glTF 2.0 import | 1 |
| Gaussian splatting (three.js) | — | Splat rendering reference | 1 |
| Lightweight Charts | — | Reference financial charting | 1 |
| Domain | Scenes | Demos |
|---|---|---|
| Autonomous driving | Perception · Planning & prediction · Log replay (MCAP) · Sensor calibration · HD map (OpenDRIVE) | 15 |
| Triage | Event mining · Review workbench · Log sim (counterfactual) · Fleet dashboard | 12 |
| Map engines | deck.gl · MapLibre GL · Mapbox GL JS · AMap Loca · AntV L7 · CesiumJS · Baidu MapVGL | 14 |
| Embodied AI | Episode review · MuJoCo in the browser · Robot inspector (URDF) · Kinematics · Policy monitor | 14 |
| Simulation & world models | Scenario editor & sweep · Physics · Traffic · World model | 7 |
| Annotation | LiDAR cuboid labeling · Tracking & propagation · Image tools · Quality control & export | 12 |
| Data loop | Pipeline status · Dataset statistics · Training runs | 3 |
| 3D & neural rendering | 3D viewer | 2 |
| AI systems | Inside models | 3 |
| Markets | Market microstructure | 3 |
| Science | Dynamics & fields | 2 |
| Industry | Industrial networks | 2 |
Add a DemoDef to a scene in app/scenes/domains/*.ts and an engine component. The engine receives parameters, a play flag, a reset counter, an optional uploaded asset and action commands, and reports telemetry.
export type EngineProps = {
params: Record<string, number | boolean | string>;
playing: boolean;
resetKey: number;
asset: ArrayBuffer | null;
command: { name: string; seq: number } | null;
onTelemetry: (t: Record<string, string | number>) => void;
};