Planned Features
Multi-robot scenes
Support multiple independent robot configs in a single scene with per-robot IK and control contexts.
Physics worker thread
Move
mj_step to a Web Worker for truly independent physics and render rates, enabling higher-fidelity simulations without frame drops.Mesh decimation
Automatic mesh simplification for visual geoms to reduce GPU load on complex Menagerie models.
useConstraint hook
Declarative equality constraints (weld, connect, joint) that can be added/removed at runtime from React components.
Offscreen rendering
Headless canvas rendering for automated data collection, CI testing, and server-side image generation.
URDF import
Load robots from URDF files (with automatic MJCF conversion) for ROS ecosystem compatibility.
Multiplayer sync
WebSocket-based state synchronization for collaborative simulation viewing and multi-operator teleoperation.
Known Limitations
WASM Binding Gaps (mujoco-js 0.0.7)
These are limitations of the underlyingmujoco-js WASM bindings, not mujoco-react itself:
| Feature | Status | Impact |
|---|---|---|
flex_face | Not exposed | FlexRenderer renders as point cloud, not solid mesh |
ten_rgba, ten_width | Not exposed | TendonRenderer uses hardcoded color/width |
mj_ray body filtering | Not exposed | Raycasts hit all geoms (no body exclusion) |
mjv_scene rendering | Not available | No native MuJoCo rendering pipeline (Three.js only) |
Browser Constraints
- WASM memory: Large models (100+ bodies) may approach browser WASM memory limits
- Contact reads: Accessing
data.contactwith highnconcan cause OOM — always checkdata.nconfirst - Single thread: Physics runs on the main thread (Web Worker support planned)
- No GPU compute: MuJoCo’s GPU pipeline is not available in WASM
Architecture Notes
SceneConfig.configis read on mount only — prop changes after mount requireapi.loadScene()- All mutable state lives in refs to avoid 60fps re-renders — hooks return
RefObject, not state values qfrc_appliedis zeroed each frame by the provider — always add to it, never assign