UI and Controls
Play mirrors the MuJoCo Simulate layout and aims for a 1:1 copy where practical:
Left panel: file/model loading, high-level simulation controls, viewer options.
Right panel: model-dependent controls such as actuators/joints/equalities, plus dense per-model data.
Overlays: help/info/profiler cards, in-view HUD stats such as FPS, ms/step, memory, solver stats, and transient toasts.
The exact hotkeys and panels can evolve; the goal is “Simulate parity”.
Section behavior
UI panels are composed of foldable sections, including built-in and plugin-provided sections.
Collapsed state is persisted in
localStorageunderplay:ui:v1:section_collapsed. Keys are based onpanelandsectionId.Plugins should register sections via
host.ui.sections.register(...)to get native behavior: collapse state, panel actions, styling.
Gestures and selection
Mouse/touch gestures such as rotate/translate/zoom and selection are forwarded to the Worker backend. Plugins can observe and react to:
host.backend.subscribe((snapshot) => ...)host.clock.onSnapshot(({ snapshot, state }) => ...)
For plugin UI primitives and stable mounts, see Plugin contract.