MuJoCo Playground is a suite of robot environments, reinforcement learning tasks, and hardware workflows written in PyTorch and built on reaf-sim, MuJoCo, and MuJoCo Warp.
Robots exist in mujoco_playground/robots/, either in simulation or paired with a hardware counterpart, enabling end-to-end workflows across simulation and hardware:
- Large-batch RL training on GPU: with state and vision observations across control, manipulation, and humanoid whole-body tracking.
- Sim & real teleoperation: with leader-follower control and episodic MCAP logging.
- System identification: fitting simulated joint dynamics to logged hardware trajectories via
mujoco.sysid. - Zero-shot sim-to-real policy deployment: running the same task layer and policy in simulation (
--mode=sim) and on hardware (--mode=real). - Agentic manipulation: for vision-language model (VLM) examples across simulation and hardware (
SO-101,i2rt YAM).
|
Whole body motion tracking |
Sim teleoperation |
|
Real teleoperation |
System identification |
|
Sim2Real and interactive viewer |
Agentic manipulation |
Note
Looking for the original RSS 2025 JAX/MJX environments? They remain available under rss2025.
First install uv if you don't have it yet. Install playground (Python 3.12–3.13) from PyPI with uv pip (or skip installation and run directly with uvx in Getting Started):
uv venv --python 3.13 && source .venv/bin/activate uv pip install --default-index https://pypi.org/simple "playground>=1.0"
Note
On Linux with CUDA 12 drivers, install with --index https://download.pytorch.org/whl/cu129 -f https://github.com/NVIDIA/warp/releases/expanded_assets/v1.18.0 "warp-lang==1.18.0+cu12" "playground[rl]>=1.0".
To get started, try controlling a sim/real robot with your coding agent, or train an RL policy in sim and deploy it to hardware.
Spin up the agentic tabletop manipulation task directly from your coding agent with a prompt in sim or real:
Start the tabletop_v0 bridge for the yam in sim and get it to <your task>,
following mujoco_playground/tasks/agentic/tabletop_v0/AGENT_PROMPT.md
Swap sim for real to run on hardware, or so101 for yam (see AGENT_PROMPT.md).
Note
On macOS, --viewer requires mjpython in place of python. Before the
first run, link libpython into the virtualenv so mjpython can load it:
ln -sf "$(uv run python -c 'import sys; print(sys.base_prefix)')"/lib/libpython3.13.dylib .venv/lib/Train an SO101PickCube PPO policy with RSL-RL and inspect it in the MuJoCo Studio web viewer:
CPU
# Train SO101PickCube on CPU uvx --default-index https://pypi.org/simple --python 3.13 --from "playground[rl]>=1.0" \ python -m mujoco_playground.rl.rsl_rl.train \ --env=SO101PickCube \ --logdir=/tmp/rslrl_logs/so101_pick_cube \ --overrides='{"nworld": 64}' # Play trained policy in MuJoCo Studio web viewer uvx --default-index https://pypi.org/simple --python 3.13 --from "playground[rl]>=1.0" \ python -m mujoco_playground.rl.rsl_rl.play \ --env=SO101PickCube \ --resume_path=/tmp/rslrl_logs/so101_pick_cube
GPU (CUDA 12)
# Train SO101PickCube (CUDA 12 driver) uvx --default-index https://pypi.org/simple --python 3.13 \ --index https://download.pytorch.org/whl/cu129 \ -f https://github.com/NVIDIA/warp/releases/expanded_assets/v1.18.0 \ --with "warp-lang==1.18.0+cu12" \ --from "playground[rl]>=1.0" \ python -m mujoco_playground.rl.rsl_rl.train \ --env=SO101PickCube \ --logdir=/tmp/rslrl_logs/so101_pick_cube # Play trained policy in MuJoCo Studio web viewer uvx --default-index https://pypi.org/simple --python 3.13 \ --index https://download.pytorch.org/whl/cu129 \ -f https://github.com/NVIDIA/warp/releases/expanded_assets/v1.18.0 \ --with "warp-lang==1.18.0+cu12" \ --from "playground[rl]>=1.0" \ python -m mujoco_playground.rl.rsl_rl.play \ --env=SO101PickCube \ --resume_path=/tmp/rslrl_logs/so101_pick_cube
GPU (CUDA 13)
# Train SO101PickCube (8,192 parallel envs on GPU) uvx --default-index https://pypi.org/simple --python 3.13 --from "playground[rl]>=1.0" \ python -m mujoco_playground.rl.rsl_rl.train \ --env=SO101PickCube \ --logdir=/tmp/rslrl_logs/so101_pick_cube # Play trained policy in MuJoCo Studio web viewer uvx --default-index https://pypi.org/simple --python 3.13 --from "playground[rl]>=1.0" \ python -m mujoco_playground.rl.rsl_rl.play \ --env=SO101PickCube \ --resume_path=/tmp/rslrl_logs/so101_pick_cube
Monitor training curves in TensorBoard:
uvx --default-index https://pypi.org/simple tensorboard --logdir=/tmp/rslrl_logs/so101_pick_cube
Optionally set up the SO-101 hardware, train the wrist-camera policy (SO101PickCubeVision), and deploy zero-shot to the follower arm:
# Train SO-101 Pick-Cube vision policy (add CUDA 12 flags above on CUDA 12) uvx --default-index https://pypi.org/simple --python 3.13 --from "playground[rl]>=1.0" \ python -m mujoco_playground.rl.rsl_rl.train \ --env=SO101PickCubeVision \ --logdir=/tmp/rslrl_logs/so101_pick_cube_vision # Deploy the trained policy on the physical SO-101 follower arm uvx --default-index https://pypi.org/simple --python 3.13 --from "playground[so101,rl]>=1.0" \ python -m mujoco_playground.tasks.manipulation.pick_cube.so101.deploy.run \ --mode=real \ --checkpoint=/tmp/rslrl_logs/so101_pick_cube_vision
For local development from HEAD, clone the repository and sync dependencies:
CPU (macOS or Linux)
git clone https://github.com/google-deepmind/mujoco_playground.git && cd mujoco_playground make sync-cpu
GPU (CUDA 12)
git clone https://github.com/google-deepmind/mujoco_playground.git && cd mujoco_playground make sync-cu12
GPU (CUDA 13)
git clone https://github.com/google-deepmind/mujoco_playground.git && cd mujoco_playground make sync
Verify your installation by running the test suite:
make testNote
Hardware SDKs are optional extras so simulation-only stays lightweight. Passing --extra so101 or --extra yam to uv run installs the hardware drivers on demand.
- Documentation: See the MuJoCo Playground documentation.
- Contributing: See the contributing guide for contribution guidelines.
- Changelog: See the changelog.
If you use MuJoCo Playground in your work, please cite it as follows (see the GitHub contributors page for the full list of contributors):
@software{mujoco_playground_2026, author = {Tabanpour, Baruch and Howell, Taylor and Haves, Sam and Abeyruwan, Saminda and Ma, Tony and Suh, Dan and {MuJoCo Playground Contributors}}, title = {{MuJoCo Playground}}, url = {https://github.com/google-deepmind/mujoco_playground}, year = {2026}, }
For the RSS 2025 benchmark suite that was built on JAX/MJX (see rss2025), please cite:
@misc{mujoco_playground_2025, title = {MuJoCo Playground: An open-source framework for GPU-accelerated robot learning and sim-to-real transfer.}, author = {Zakka, Kevin and Tabanpour, Baruch and Liao, Qiayuan and Haiderbhai, Mustafa and Holt, Samuel and Luo, Jing Yuan and Allshire, Arthur and Frey, Erik and Sreenath, Koushil and Kahrs, Lueder A. and Sferrazza, Carlo and Tassa, Yuval and Abbeel, Pieter}, year = {2025}, publisher = {GitHub}, url = {https://github.com/google-deepmind/mujoco_playground} }
All content in this repository is licensed under the Apache License, Version 2.0. See LICENSE for details.
This is not an officially supported Google product.