Python-first scenes
Create geometry, articulated actors, sensors, actuators, terrain, and task logic through a validated Python DSL.
Define bodies, joints, sensors, rewards, and interaction loops in regular Python. Run the same compact C++ physics core on macOS, Linux, and WebAssembly.
$ pip install lavendersim from lavendersim.env import make env = make("RoverWaypoint-v0", seed=7) obs, info = env.reset(seed=7) obs, reward, terminated, truncated, info = \ env.step(env.action_space.sample()) print(obs.shape, reward) # (28,) 0.294...
Chapter one: make a tiny world, then teach it something curious.
These are not concept art. They are deterministic RGB frames rendered by LavenderSim’s C++ camera sensor from registered Python environments.


LavenderSim keeps task logic visible and hackable while moving physics into a compact native engine.
Create geometry, articulated actors, sensors, actuators, terrain, and task logic through a validated Python DSL.
IMUs, tactile grids, range fans, cameras, named sites, contact force/torque, noise, filtering, and delay.
Position, velocity, effort, impedance, gear and force limits, activation dynamics, and fixed tendon coupling.
Flat policy observations, seeded randomization, process-vectorized rollouts, checkpoints, and evaluation tools.
Save simulation, sensor, actuator, time, and RNG state. Restore it to compare alternate action sequences.
Stream authoritative native poses to the browser and send motion commands or clicked targets back to Python.
Python defines what the task means. The native engine advances physics and sensors. The browser displays authoritative poses instead of running a second, drifting simulation.
Track randomized body-relative direction and speed using 12 joints, an IMU, and terrain probes.
Align named frames while using filtered contact force and torque to control insertion.
Drive over a heightfield toward randomized goals with differential wheels and ray-fan lidar.