Skip to content

3.13.0

Latest

Choose a tag to compare

@mmossg mmossg released this 09 Sep 15:03

Version 3.13.0 (September 8, 2026)

General

  1. eb18d77ca The .mjz encoder now writes the root file as model.xml in the archive as
    this is less susceptible to breakage due to file renaming.

  2. 4affbb64a Site geometries can now also be associated with meshes (type="mesh" with
    mesh="name"), supporting visualization, the insidesite
    sensor, and the new mj_insideSite function.

  3. b59b07fae Added support for Python 3.15 (GIL and Free-Threading).

Engine

  1. 5660353ec Added a new integrator discrete: the constraint solve and the implicit velocity update merge
    into one operation, performed in the effective metric $\widehat{M} = M + hD + h^2K$, which incorporates both
    implicit damping $hD$ and implicit position stiffness $h^2 K$. Under this integrator mjData.qacc is
    the discrete step map $(v^+ - v)/h$, and joint, tendon and actuator stiffness and damping join the solver's
    metric, making passive springs and actuator position gains stable at timesteps far beyond the explicit stability
    limit. Constraint rows are treated implicitly as well: solref spring--dampers are evaluated at the end of the
    step, so constraints are stable at any timeconst; under this integrator the refsafe
    flag replaces contact and limit rows stiffer than the timestep can resolve by the stiffest zero-restitution row
    instead of clamping timeconst. The actuator-gain treatment resolves the stiff-servo timestep limitation of
    #3443 (analysis contributed by @qiayuanl). See the
    integrator documentation for semantics and current limitations.

Warning

Breaking API changes

Removed the implicit flex effective-metric special case under implicit/implicitfast with the CG
solver, introduced in 3.11.0. This behavior now requires integrator="discrete" (with a primal solver:
CG or Newton), which additionally treats joint damping and stiffness implicitly inside the solve. Models
relying on the old behavior should set integrator to discrete; models with flex
elasticity or passive flex contact under implicit/implicitfast now raise a runtime error carrying this
migration note.

  1. 0b4e17747 Restored clamping of non-positive pivots in the sparse inertia factorization, along with the
    associated mjWARN_INERTIA warning. The guard was inadvertently dropped in the 3.3.0 conversion of qLD to CSR
    format; since then, models with singular mass matrices silently produced non-finite accelerations, typically
    surfacing as divergence warnings and automatic resets.

  2. c9d997610 Added single-shot multicontact for collisions with cylinder geoms.

  3. 10eeb8289 The Newton solver with elliptic cones now rebuilds the cone-augmented Hessian
    factor with a single refactorization instead of per-contact rank-1 updates when a flop-count model predicts this is
    faster. Scenes with many simultaneously sliding contacts speed up by 1.4-2x on average and 3-4x on the slowest steps.
    Contribution by @kevinzakka.

Compiler

  1. 2a3957558 Custom text fields (custom/text) in MJCF now accept their values inside a
    <![CDATA[ ... ]]> block in addition to the data attribute. When saving a model via mj_saveXML, custom
    text containing newlines or XML characters is exported as CDATA.

  2. 47ebfe48a Added cutoff attribute to sensor/tactile.

Samples

  1. 834983fbb Added render.cc: a headless offscreen rendering sample that saves an image to a
    PNG image. Supports both the Filament and classic OpenGL backends, with command-line options for camera, resolution,
    keyframe, simulation steps, geom/site groups, visualization and rendering flags, labels, and frames.

Bug fixes

  1. 67562d95f Rewrote the Plane-Mesh collider to fix bugs and improve performance. Fixes #3524.

Models

Video

  1. f6c1004b7 Added house of cards
    example model and three free-standing arch
    models: roman, gothic, and hyperbolic. Inspired by Song et al.

Rendering

Warning

Breaking API changes

  1. cb57b526f For materials with physically-based rendering parameters that do not provide a metallic
    texture the fallback is now white. Previously the fallback was black, which caused scalar metallic values to be
    discarded when multiplied in the PBR shader.