ReleaseGoogle (DeepMind / Gemini)Google (DeepMind / Gemini)published Jul 28, 2026seen 9h

google-deepmind/mujoco 3.11.0

google-deepmind/mujoco

Open original ↗

Captured source

source ↗
published Jul 28, 2026seen 9hcaptured 9hhttp 200method plain

3.11.0

Repository: google-deepmind/mujoco

Tag: 3.11.0

Published: 2026-07-28T01:17:52Z

Prerelease: no

Release notes:

Version 3.11.0 (July 27, 2026)

Engine

1. 4787c809 Added geom/surfacevel: the velocity of a geom's surface as seen by contacts, given as a velocity field with a constant component and a rotational component about the geom frame origin. This allows conveyor belts, treadmills and turntables to be modeled with static geoms and no degrees of freedom: friction drives touching bodies along the motion of the surface, with the field projected onto each contact's tangent plane. Surface velocities compose correctly with each other and with body motion. Note that the contact rows of mjData.efc_vel, and the constraint-state sensors that read them, report the velocity relative to the moving surface rather than to the geom, since that is the quantity the constraint acts on; for geoms without surfacevel the two are identical. Contact-point visualization draws an arrow along the surface velocity at contacts with moving surfaces.

![Watch video](https://youtu.be/PdSdrqhSiZA)

2. a264d0bc Added geom/adhesion and pair/adhesion: an adhesive force associated with a contact, useful for modeling sticky materials. Contacts can pull with up to the given force before breaking, and the friction budget becomes $\mu(f_N + \text{adhesion})$. Combined with gap, adhesive contacts apply "adhesion at a distance", useful for modeling magnets. Resting penetration is unaffected by adhesion. mj_contactForce reports the net interface force, whose normal component can now be negative.

![Watch video](https://youtu.be/GioWwB36XHI)

3. f0fa3d82 Replaced midpoint integration of free bodies with gyroscopic derivatives in the implicitfast integrator: the bias-force derivative of every standalone free body is applied via a local unsymmetric solve of its decoupled block, making implicitfast identical to implicit for such bodies. Unlike midpoint integration, which required vacuum and no constraints, this applies in all environments (contacts, fluid, constraints), and is compatible with discrete-time inverse dynamics. Spinning free bodies no longer gain energy, but tumbling motion is now mildly damped; models requiring long-horizon energy conservation of tumbling bodies in vacuum should use RK4. The invdiscrete flag no longer has any effect on forward dynamics.

4. 5618666a Added body/simple attribute ("false"/"auto") to disable the *simple body* mass matrix optimization. This is useful for domain randomization, where model parameters may change post-compilation.

5. 14c0b0c9 mj_setConst now recomputes the mjModel.{body,geom,site}_sameframe flags, to account for changes in body/geom/site frames after compilation.

6. 2444defc Added support for multiccd with arbitrarily large meshes.

7. a04b0c5b Added flg_gravcomp and flg_surfacevel boolean flags to mjModel. These flags replace the fast-path checks as originally guarded by ngravcomp. Since the engine uses these integers as flags (zero vs. non-zero), the new flags are honest boolean properties, writeable from the Python bindings at runtime. The field ngravcomp is deprecated and will be removed in a future release.

8. a1f38c8e Replaced quadratic scratch in DFS flood-fill island discovery with a linear-memory Union-Find (disjoint set). Contribution by @teerthsharma.

> [!WARNING] > Breaking API changes > > 9. ff629889 Changed the default value of sleep_tolerance from 1e-4 to 1e-3 (1mm/sec in SI units). > 10. 315bcfbf Removed the legacy sparse ancestor-walk inertia matrix mjData.qM. The joint-space inertia matrix is now stored exclusively in the compressed sparse row (CSR) format mjData.M. > 11. 7e9ac58f Switched mjd_inverseFD to use the CSR-format mjData.M representation instead of the legacy mjData.qM for the mass matrix derivative. This changes the shape of the DmDq parameter from (nv x nM) to (nv x nC). > 12. 1ea2d884 mju_round now breaks ties away from zero rather than towards $+\infty$. This only affects negative half-integers, e.g. mju_round(-2.5) now returns -3 rather than -2. > 13. fa36015b Removed unneeded mjvScene argument from mjv_moveCamera. > 14. ba9a6503 Split up...

Excerpt shown — open the source for the full document.