Skip to content

Move from MuJoCo 3.14.0 to 3.16 #152

Open

Description

@siddhss5

Outcome

ssrobot and its MuJoCo stack run on MuJoCo 3.16 (the current release) instead of exactly 3.14.0.

Rationale

  • MuJoCo 3.14.0 has a memory-corruption bug that 3.15 fixed. Compiling a builtin 2D texture with nchannel="1" corrupts the heap, and the process later crashes at an unrelated point (SIGSEGV/SIGTRAP). MuJoCo 3.15.0 and later reject the model with builtin textures must have 3 channels. Minimal reproduction:

    import gc, mujoco
    XML = '<mujoco><asset><texture name="t" type="2d" builtin="checker" width="8" height="8" nchannel="1"/></asset></mujoco>'
    for _ in range(300):
        m = mujoco.MjModel.from_xml_string(XML); del m; gc.collect()
    print("survived")  # never printed on 3.14.0; 3.15.0+ raise ValueError instead
  • mj_viser is already verified on 3.16. It supports mujoco>=3.5. Its CI runs an installed-wheel end-to-end check on MuJoCo 3.5.0 (minimum), 3.14.0 (locked, to match ssrobot), and 3.16.0 (latest) across Python 3.11–3.14. That check compares geometry, poses, colors, and textures against MuJoCo's own mjv_updateScene and renderer.

  • mj_viser's lock stays at 3.14.0 only because an environment containing ssrobot resolves to ssrobot's exact pin.

Scope

The exact pin originates in sscbirrt: sscbirrt._native_mujoco is built against libmujoco 3.14.0 and refuses any other version (sscbirrt/pyproject.toml, build and test requirements; docs/native-design.md). Upgrading therefore needs:

  1. An sscbirrt release whose native MuJoCo adapter is built and tested against MuJoCo 3.16. This means updating build-system.requires, test-requires, the mujoco extra, and the auditwheel --exclude libmujoco.so.<version> line.
  2. In ssrobot, moving the mujoco==3.14.0 pins (the mujoco extra and the base dependencies) and the sscbirrt range to that release, and updating MujocoRuntime's version check at open.
  3. In mj_viser, bumping the lock to the same version afterward.

Non-goals

  • Supporting several MuJoCo versions at once in sscbirrt's native adapter.
  • Changing planning, runtime, or trace semantics.

Acceptance criteria

  • sscbirrt's native MuJoCo module builds, loads, and passes its wheel test against MuJoCo 3.16.
  • ssrobot pins that MuJoCo version and the matching sscbirrt release, and its test suite passes.
  • MujocoRuntime accepts 3.16 and still refuses a mismatched MuJoCo at open.

Reproducible evidence

ssrobot CI green on the new pins. The reproduction above raises ValueError instead of crashing in the resulting environment.

Activity

  1. siddhss5 commented on Oct 17, 2026

    @siddhss5
    ContributorAuthor

    Blocked on the sscbirrt rebuild and release: personalrobotics/sscbirrt#241

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions