Layered view
Run / Project / Registry
│ compile + resolve + validate
▼
ExecutionPlan + Lock
│
▼
FastSim Application ───── Plugin Host
lifecycle / services scoped capabilities
│
▼
UniRoboSim
Provider → Session → World
│
▼
Isaac Lab / MuJoCo / PyBullet / Custom
Compilation boundary
A Run says what this execution selects. A Project says where components may be resolved. Registries map stable URIs to versioned manifests and backend resources. Before physics starts, the compiler validates format, resolves releases, verifies resources, binds plugins, and records provenance in a deeply immutable ExecutionPlan.
A Lock additionally freezes exact versions, variants, resource digests, and the plan digest. Runtime consumes compiled facts and never searches for files or guesses author intent while stepping.
Application runtime
FastSimApplication is the public asynchronous facade. It owns prepare, start, pause, resume, reset, stop, and close, and exposes scene, frames, geometry, kinematics, control, checkpoint, visualization, and output capabilities.
One authority boundary owns the backend world. CLI, Python, Server, TUI, and plugin requests all pass through the Application rather than mutating physics directly.
Plugin boundary
Plugins are discovered through manifests and Python entry points; only instances explicitly selected by the Run are created. Plugin Host owns lifecycle, while Service Broker grants the minimum services permitted by the compiled binding.
Plugins receive revocable, generation-bound services—not a UniRoboSim World or native backend handle. Installation is not activation, and a declared role does not automatically grant every service.
UniRoboSim and providers
UniRoboSim standardizes portable contracts for scenes, entities, state, sensors, and physical control. Providers preserve each engine's real capability set. Cross-backend portability means stable application boundaries and capability negotiation, not bitwise-identical physics, rendering, materials, fluids, or sensors.
Offline data boundary
Record and similar plugins produce outputs in an online Run. Sealed FSR data, viewers, analytics, and training-data export belong to the offline plane and never own the live physics world.