Skip to main content

MuJoCo Menagerie Python Library

pip install mujoco-menagerie
uvx mujoco-menagerie view unitree_g1
import mujoco_menagerie as mm

Browse

mm.names()
mm.robots('humanoid')  # or arm, quadruped, mobile_manipulator, ...
r = mm.get('franka_emika_panda')  # no download yet
r.display_name, r.license, r.oid
r.entry_names  # ('hand', 'mjx_hand', ..., 'scene'): every top-level XML that compiles
r.default_scene, r.default_model

Load

model = mm.load('unitree_g1')  # the default scene: floor, lights, robot
model = r.model('mjx_scene')  # any entry point
model = r.model(r.default_model)  # the robot alone
spec = r.spec('panda')  # mujoco.MjSpec, to edit before compiling

Edit

spec = mm.get('unitree_g1').spec('g1')
for joint in spec.joints:
    if joint.name.endswith('_knee_joint'):
        joint.armature = 0.01
spec.body('pelvis').add_site(name='imu')
model = spec.compile()

Attach a hand to an arm

arm = mm.get('kuka_iiwa_14').spec()
hand = mm.get('wonik_allegro').spec('left_hand')
hand.body('palm').pos[:] = (0, 0, 0.095)
arm.attach(hand, prefix='allegro/', site=arm.site('attachment_site'))
model = arm.compile()

Place two copies of a robot

ur5e = mm.get('universal_robots_ur5e')
scene = mujoco.MjSpec()
scene.option.integrator = mujoco.mjtIntegrator.mjINT_IMPLICITFAST  # match the arm, or attach warns
for prefix, y in (('left/', -0.5), ('right/', 0.5)):
    arm = ur5e.spec('ur5e')
    frame = scene.worldbody.add_frame(pos=[0, y, 0])
    frame.attach_body(arm.body('base'), prefix, '')
model = scene.compile()

Files

r.path()  # the model directory
r.xml('scene')  # one XML
r.files('scene')  # every file scene.xml depends on; copy these to vendor, and note r.oid
r.assets('scene')  # the same as {relative path: bytes}, for MjModel.from_xml_string

assets() raises for pal_talos, robotis_op3 and ufactory_lite6, whose meshes share basenames MuJoCo cannot tell apart in memory.

Cache

mm.prefetch(['unitree_g1'])  # download ahead of time; no argument means everything, 253 MB
mm.prune()  # delete models this version no longer references
mm.clear()  # delete the whole cache
mm.load('unitree_g1', cache=mm.Cache(dir='/shared/menagerie'))
argument environment default
cache directory mm.Cache(dir=) MENAGERIE_CACHE_DIR ~/.cache/mujoco_menagerie, ~/Library/Caches/mujoco_menagerie on macOS, %LOCALAPPDATA%\mujoco_menagerie\cache on Windows
archive source mm.Cache(base_url=) MENAGERIE_BASE_URL the GitHub release
checkout to use instead mm.Cache(root=) MENAGERIE_ROOT unset

A warm cache can be read-only. Concurrent cold starts on one model are safe: a model directory is either complete or absent.

Uninstalling the package leaves the cache in place, as with pip and uv; run mujoco-menagerie clear first to remove it.

Command line

uvx mujoco-menagerie names | info NAME | path NAME [ENTRY] | view NAME [ENTRY] | prefetch [NAME...] | verify [NAME...] | prune | clear [-y]

Speed, laptop, local mirror

import mujoco_menagerie 0.09 s
mm.load('unitree_g1'), cold 0.9 s
mm.load('unitree_g1'), warm 0.27 s
mm.prefetch() 16 s

Develop

make registry  # derive python/src/mujoco_menagerie/registry.json from the checkout
make python-test
MENAGERIE_ROOT=. uv run --project python python -c "import mujoco_menagerie as mm; mm.load('unitree_g1')"

Release

Every merge to main that touches a model directory or python/ is published as YYYY.M.N by release.yml, which tags, builds and uploads the model archives, re-verifies them, then builds, smoke tests and publishes the wheel and pushes the tag. The version comes from the tag, so git checkout v2026.9.3 && make build rebuilds that release. Run it by hand from the Actions tab. It needs a PyPI trusted publisher (workflow release.yml, environment pypi) and a pypi GitHub environment.

The package is Apache-2.0. Each model ships its own LICENSE; r.license reports it.

Metadata

Release files for mujoco-menagerie 2026.11.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mujoco-menagerie 2026.11.1
File Size Uploaded Provenance Actions
mujoco_menagerie-2026.11.1.tar.gz 24.7 kB Without provenance Details for mujoco_menagerie-2026.11.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for mujoco-menagerie 2026.11.1
File Interpreter ABI Platform Actions
mujoco_menagerie-2026.11.1-py3-none-any.whl Python 3 none any Details for mujoco_menagerie-2026.11.1-py3-none-any.whl

Total release size: 54.7 kB

Release files / mujoco_menagerie-2026.11.1.tar.gz

Download URL mujoco_menagerie-2026.11.1.tar.gz
Size 24.7 kB
Tags Source
SHA-256 checksum
How to use checksums
ea3e530b45c2cae7a0ff3898de1cf6c36dfb9997cf42072fdc20285830ff1eaf
BLAKE2b-256 checksum
How to use checksums
7666096de5552e6b533d8c3941717c55d8dad4b7be4ba569bb1fdf0747d6d7cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / mujoco_menagerie-2026.11.1-py3-none-any.whl

Download URL mujoco_menagerie-2026.11.1-py3-none-any.whl
Size 30.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ef4b675329de54d36108ab9af149f4e2d00f103ec1f721bf2c780d760d067183
BLAKE2b-256 checksum
How to use checksums
f603c8d21b3e783d6af16753d6d6426faed7f5c0d0a67c81001e50edbda9f70b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for mujoco-menagerie 2026.11.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page