Download Latest Version mujoco-3.14.0-windows-x86_64.zip (22.1 MB) Google Add to Preferred Sources
Home / 3.14.0
Name Modified Size InfoDownloads / Week
Parent folder
mujoco-3.14.0-macos-universal2.dmg.sha256 2026-09-22 101 Bytes
mujoco-3.14.0-macos-universal2.dmg 2026-09-22 52.5 MB
mujoco-3.14.0-windows-x86_64.zip.sha256 2026-09-22 99 Bytes
mujoco-3.14.0-windows-x86_64.zip 2026-09-22 22.1 MB
mujoco-3.14.0-linux-aarch64.tar.gz.sha256 2026-09-22 101 Bytes
mujoco-3.14.0-linux-aarch64.tar.gz 2026-09-22 32.8 MB
mujoco-3.14.0-linux-x86_64.tar.gz.sha256 2026-09-22 100 Bytes
mujoco-3.14.0-linux-x86_64.tar.gz 2026-09-22 33.3 MB
3.14.0 source code.tar.gz 2026-09-22 76.0 MB
3.14.0 source code.zip 2026-09-22 77.3 MB
README.md 2026-09-22 9.1 kB
Totals: 11 Items   294.1 MB 37

Version 3.14.0 (September 22, 2026)

General

  1. 458189298 Added the ipc flag, an experimental contact mode of the discrete integrator for penetration-free flex contact. Each step minimizes an incremental potential subject to linearized contact constraints, using a barrier-free augmented Lagrangian whose subproblems are the discrete solve. Every committed position update is verified intersection-free by continuous collision detection, so flex contact cannot tunnel. Supported for dim-2 flexes: a flex with edge equality constraints keeps its elasticity in the constraint solver, while elastic2d elasticity is integrated implicitly through the effective metric. The contacts the mode resolves are frictionless. The mode keeps contact multipliers across steps that no state specification covers, so mj_getState/mj_setState do not capture its full state and exact replay is not supported.

  2. 2fec92237 Introduced archive resource providers (mjp_registerArchiveResourceProvider). Archive providers use the mjpResourceProvider interface to mount and read archive containers (such as .mjz/.zip), decoupling container handling from format decoders and enabling on-demand asset extraction without requiring a pre-allocated VFS.

  3. e312ce82d Frames are now preserved when saving MJCF: <frame> elements are written with their pos and quat and their contents in frame-relative coordinates, so a saved model reloads with the same frames. Previously the frame transformation was accumulated into the children on save and only the frame's name was kept. Changes to the pos or quat of a frame in an mjSpec now also take effect when the spec is recompiled.

Engine

[!WARNING] Breaking API changes

  1. dc8bb1364 mj_readCtrl now matches the signature and semantics of mj_readSensor to support multi-input actuators (e.g., pid, dcmotor, orientation): it takes an output buffer result of size actuator_ctrlnum[id] and returns const mjtNum* (a pointer into mjData.ctrl or mjData.history on zero-order-hold or exact timestamp matches, or NULL when interpolated values are written to result). Actuator history buffers now store actuator_ctrlnum[id] values per sample, and mj_initCtrlHistory expects nsample * actuator_ctrlnum[id] values (#3597).
  1. 9e0c6b577 The mjWARN_INERTIA warning is now also raised by the modified-inertia factorizations of the implicitfast and damped-Euler integrators (previously silent) and of the implicit integrator (previously a fatal error).

  2. 35c0631de The sparse Newton solver no longer aborts with a "rank-deficient sparse Hessian" error when rounding loses a pivot of its Hessian, as can happen in single precision with ill-conditioned inertia. The pivot is now clamped and its row decoupled, as in the dense factorization.

Bug fixes

  1. 2a3f1f5a4 Procedural model editing is no longer quadratic in the number of elements. mjSpec previously recomputed the compilation signature on every mjs_addGeom-like call, and mjs_setName rescanned every name of the element's type. Both are now incremental. Building a spec with 8000 geoms is roughly 10x faster.

[!WARNING] Breaking API changes

mjsElement.signature is now 0 whenever the spec has been structurally edited since it was last compiled, rather than being eagerly recomputed on each edit. It is still equal to mjModel.signature after a successful mj_compile, which is what mj_copyBack and the Python bind methods rely on. Code that compared the signature of an uncompiled spec against anything other than 0 must compile first. Additionally, when mjs_setName fails on a duplicate name, the element's previous name is now preserved rather than being overwritten with the duplicate name.

  1. ac329bd17 Fixed the torque applied by weld constraints in mj_rnePostConstraint. The rotational constraint force was used directly as a world-frame torque, missing the scaling by 0.5 * torquescale and the rotation into the world frame. Force and torque sensors on bodies held by a weld that carries torque were wrong (#2533).

  2. 263c638c0 mj_rnePostConstraint now accounts for the forces of spatial tendons (spring, damper, actuator, limit, friction loss, equality and armature), so force and torque sensors register the forces that tendons apply to bodies (#832).

  3. eb662fcaf Tendon actuatorfrclimited now defaults to "auto" as documented. Previously the default was "false" and actuatorfrcrange was silently ignored unless actuatorfrclimited was set explicitly.

  4. 54be9cce6 mjd_transitionFD and mjd_inverseFD now raise an error when sleeping is enabled. Previously, their repeated evaluations changed the sleep state, leading to internal errors or wrong derivatives.

  5. e38573c64 Fixed a memory leak in mjs_delete where deleted elements and subtrees were retained in mjSpec until mj_deleteSpec (#2882).

  6. 65ea54c3c Fixed an out-of-bounds read when parsing the header of a GMSH file loaded by flexcomp. Truncated headers are now reported as an error.

Source: README.md, updated 2026-09-22