Releases: google-deepmind/mujoco
Release list
3.11.0
Version 3.11.0 (July 27, 2026)
Engine
-
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 withoutsurfacevelthe two are identical. Contact-point visualization draws an arrow along the surface velocity at contacts with moving surfaces. -
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. -
f0fa3d82 Replaced midpoint integration of free bodies with gyroscopic derivatives in the
implicitfastintegrator: the bias-force derivative of every standalone free body is applied via a local unsymmetric solve of its decoupled block, makingimplicitfastidentical toimplicitfor 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 useRK4. The invdiscrete flag no longer has any effect on forward dynamics. -
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.
-
14c0b0c9 mj_setConst now recomputes the
mjModel.{body,geom,site}_sameframeflags, to account for changes in body/geom/site frames after compilation. -
2444defc Added support for multiccd with arbitrarily large meshes.
-
a04b0c5b Added
flg_gravcompandflg_surfacevelboolean flags tomjModel. These flags replace the fast-path checks as originally guarded byngravcomp. 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 fieldngravcompis deprecated and will be removed in a future release. -
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
- ff629889 Changed the default value of sleep_tolerance from 1e-4 to 1e-3 (1mm/sec in SI units).
-
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) formatmjData.M. -
7e9ac58f Switched mjd_inverseFD to use the CSR-format
mjData.Mrepresentation instead of the legacymjData.qMfor the mass matrix derivative. This changes the shape of theDmDqparameter from(nv x nM)to(nv x nC). -
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. -
fa36015b Removed unneeded
mjvSceneargument from mjv_moveCamera. -
ba9a6503 Split up mjrfMeshData into
mjrfMeshDataandmjrfMeshConfigto allow reuploading of mesh data without having to recreate the mesh object. Introduces mjrf_defaultMeshConfig and mjrf_setMeshData functions. -
ba9a6503 Removed
bytesfield from mjrVertexAttribute.
Caution
Breaking ABI changes
- 072e963f mjModel gained the
actuator_ctrlspecfield (input signature of each actuator), and mjsActuator gainedctrlspec, changing their size and layout. The mjtGain and mjtBias enums gainedso3members, shifting the values ofmjGAIN_USERandmjBIAS_USER. - d43c3ed4 Added
texid,texuniformandtexrepeatfields to mjvGeom. - a264d0bc The mjContact struct gained an
adhesionmember, changing its size and layout.
Note
Bug fixes
- dddb2767 Fixed a bug where
body_marginexcludedgap, causing the mid-phase collision filter to incorrectly prune in-gap contacts on multi-geom bodies.
Actuation
-
d507e921 Refactored actuator infrastructure in preparation for MIMO (multi-input multi-output) actuator support. Each actuator now has
ctrlnum(number of controls) andoutnum(number of force outputs). The total countsnu = sum(ctrlnum)andnout = sum(outnum)dimensionmjData.ctrlandmjData.actuator_force, respectively,nactuatoris the number of actuators. For existing actuatorsctrnum = outnum = 1, sonactuator == nu == noutand existing code is unaffected. -
56a93979 Setpoints of position and intvelocity servos acting on 3D rotational transmissions (ball joints, or site transmissions with a refsite and purely rotational gear) are now interpreted on the circle: the force uses the setpoint representative nearest the current angle, so targets winding beyond half a turn are tracked continuously instead of slipping by full turns. Behavior is identical whenever the error does not exceed π. Relatedly,
intvelocityactuators now expose actlimited, which was previously hardcoded to "true": as for [general](https:...

