MuJoCo Guide

MuJoCo is a free physics simulator built for robots that walk, jump and grasp. This guide starts with the basics of what it is and who uses it. It then covers what it can do, which computers it runs on and where it falls short. Along the way are robots with good MuJoCo models, plus screenshots and videos of robot dogs walking, jumping and flipping in simulation.

MuJoCo in brief

MuJoCo stands for Multi-Joint dynamics with Contact. It calculates how a robot's body, joints and motors move, and what happens when its feet, hands or body touch something. It runs much faster than real time on an ordinary laptop. That makes it possible to test a controller thousands of times before risking a real robot.

It is the most common simulator for robot learning research. Most work on robot dogs and humanoids that learn to walk with reinforcement learning passes through MuJoCo or NVIDIA's Isaac Lab. Robot makers such as Unitree, Booster, Fourier and LimX publish MuJoCo models of their robots. They use them to check a trained walking policy before it runs on hardware.

A Unitree Go2 trotting and turning in MuJoCo with a simple hand-written gait. The model comes from MuJoCo Menagerie.

Good fit

  • Legged robots, robot arms and robot hands
  • Training walking, jumping or grasping with reinforcement learning
  • Testing a controller before running it on hardware
  • Fast, accurate contact between feet, fingers and the ground

Poor fit

  • Photo-realistic camera images for vision training
  • Full ROS 2 robots with navigation stacks, out of the box
  • Water, air flow and other fluid effects
  • Large outdoor worlds with many buildings and cars

History of MuJoCo

Emanuel Todorov, Tom Erez and Yuval Tassa described MuJoCo in a 2012 paper. Todorov's company, Roboti LLC, sold it as a paid product from 2015 to 2021.

Google DeepMind bought MuJoCo in October 2021 and made it free that day. In May 2022, version 2.2.0 made it fully open source under the Apache 2.0 license, which also allows commercial use. DeepMind now aims for a new release in the first week of each month. The latest is version 3.16.0, released on October 14, 2026.

DateMilestone
2012First paper on MuJoCo
July 2015MuJoCo Pro 1.0, sold by Roboti LLC
October 2021Bought by DeepMind and made free (version 2.1.0)
May 2022Open source under Apache 2.0 (version 2.2.0)
October 2023Version 3.0 adds MJX for GPUs, soft bodies and SDF collisions
February 2025MuJoCo Playground released with sim-to-real robot results
April 2026A DC motor actuator model added in version 3.7.0
October 2026Version 3.16.0

Robot models and MuJoCo Menagerie

A simulator is only as good as its robot model. MuJoCo reads its own XML format, called MJCF, and can also load the URDF files used by ROS. MJCF describes each body's shape, mass and inertia, each joint's range and friction, and each motor's strength.

MuJoCo Menagerie is DeepMind's collection of ready-made models of real robots. It held 71 models in October 2026, including robot dogs, humanoids, arms, hands, mobile robots and a drone. Each model carries its own license, from the robot's maker or the person who built it. The screenshots below were rendered from Menagerie models.

Menagerie's own README says many models are "not necessarily as good as" they could be. Most have not been checked against measurements of the real robot. The Go2 model, for example, has much more joint damping than Unitree's own MuJoCo model, which keeps its legs from moving fast enough to flip. Models from the robot's maker, or ones used in published sim-to-real work, are usually the safest choice.

Robots with good MuJoCo models

The robots below have an official model from their maker or from Menagerie. Where the maker also trains or checks walking policies in MuJoCo and runs them on the real robot, the table says so. Each robot's page in this guide lists its simulator support in more detail.

RobotTypeModelNotes
Unitree Go2Robot dogMenagerie (unitree_go2), Unitree's unitree_mujocoRunning trained policies on the real robot needs the EDU version's low-level access
Unitree Go1Robot dogMenagerie (unitree_go1)MuJoCo Playground's walking, handstand and getting-up policies ran on the real robot
Pupper v3Robot dog kitStanford's pupperv3-mjxStanford trains its walking policy in MuJoCo MJX and runs it on the real robot
SpotRobot dogMenagerie (boston_dynamics_spot)Includes a version with the arm. Motor limits must be added by hand.
ANYmal CRobot dogMenagerie (anybotics_anymal_c)Joint torque capped at 80 N·m in the model
Unitree B2Robot dogUnitree's unitree_mujocoAlso covers the Go2-W, B2-W and A2
Unitree G1HumanoidMenagerie (unitree_g1)Unitree's unitree_rl_mjlab trains in MuJoCo and runs on the real G1
Unitree H1HumanoidMenagerie (unitree_h1)unitree_rl_mjlab supports the H1-2
Booster T1HumanoidMenagerie (booster_t1)MuJoCo Playground walking policy ran on the real robot
Booster K1HumanoidBooster's booster_assetsBooster checks Isaac Lab policies in MuJoCo before deployment
ToddlerBot 2.0Humanoid kitMenagerie and the ToddlerBot repoTrained with MJX and run on the real robot
Berkeley Humanoid LiteHumanoid kitOfficial MJCFTrained in Isaac Lab, checked in MuJoCo
Fourier N1HumanoidMenagerie (fourier_n1)Fourier also validates policies in MuJoCo
ROBOTIS OP3Small humanoidMenagerie (robotis_op3)
SO-101Low-cost armMenagerie (robotstudio_so101)Popular with Hugging Face LeRobot
Koch v1.1Low-cost armMenagerie (low_cost_robot_arm)
AgileX PiPERArmMenagerie (agilex_piper)
Trossen WidowX AIArmMenagerie (trossen_wxai)Trossen's trossen_arm_mujoco replays simulated motions on the real arm
ALOHA 2Two-arm stationMenagerie (aloha)Widely used for learning tasks from demonstrations
Franka Research 3Research armMenagerie (franka_fr3)Franka Panda results in MuJoCo Playground ran on the real arm
UR5eIndustrial armMenagerie (universal_robots_ur5e)
Hello Robot StretchMobile manipulatorMenagerie and Hello Robot's stretch_mujoco
Reachy MiniDesktop robotPollen's SDKThe SDK has a built-in MuJoCo mode
Crazyflie 2.1+Mini droneMenagerie (bitcraze_crazyflie_2)

Simulation examples

The videos below were made for this guide with plain MuJoCo, using no GPU. None of them use a trained neural network. Each move is a short list of leg poses, played in order by a simple joint controller. A search program tried thousands of versions in simulation and kept the best one. Each search took only minutes.

The motors were limited to each robot's published ratings, since a simulated motor with no limits can do almost anything. Each move was also tested on three changed versions of the robot: a slippery floor, a heavier robot with weaker motors, and a grippy floor with a lighter robot.

Unitree Go2 back handspring

Unitree Go2 back handspring, in real time and then at quarter speed. Motors are held to Unitree's torque and speed ratings.

Menagerie's Go2 model needed one fix first. Its joint damping is twenty times higher than in Unitree's own MuJoCo model, which held the legs to about 12 radians per second. With Unitree's value, and with motor torque falling to zero at Unitree's rated joint speeds, the best move found was a back handspring. The robot rears up onto its back legs and pushes off past vertical. It turns over in the air, catches itself on its front legs and swings its back legs down to the floor.

The body rises about 33 cm and turns a full 360 degrees without touching the floor. The fastest joints reach 27 of their rated 30 radians per second. The move landed on all four test versions of the robot. A flip that takes off from all four feet was not found with this simple method.

Boston Dynamics Spot backflip

Spot backflip, in real time and then at quarter speed. Joint torque follows Boston Dynamics' published limits.

Spot's Menagerie model has no real motor limits, so this run used the ones Boston Dynamics publishes for its Joint Control API. The hip motors give about 45 N·m through a 51:1 gearbox. The knee works through a push rod, so its limit changes with the knee angle. It ranges from 37 N·m when fully bent to 113 N·m in the middle of its range.

With those limits, Spot does a fully airborne backflip. Its feet leave the floor when the body has turned about 20 degrees and touch down at about 340 degrees, and then it stands back up. Boston Dynamics publishes no joint speed limits, and the joints here reach about 46 radians per second, so the real motors may not manage this exact move. It is also much more fragile than the Go2 handspring. On the slippery floor, the heavier robot and the grippy floor, it lands on its back or side.

Pupper v3 jump

Pupper v3 jump with Stanford's model, in real time and then at quarter speed.

The Pupper v3 is a small open-source robot dog from Stanford. Its model came from Stanford's pupperv3-mjx training code. That model caps motor torque but has no speed limit, so the first search found a jump that spun the joints faster than the real motors can turn. With a torque-speed limit added from the motor's listing, the best jump clears about 18 cm under the feet and lands upright on all four test versions. The same search found a 3-second stand on the back legs, but no clean flip. The small motors give only about 0.3 seconds in the air, too little to turn all the way over.

A flip that is too good to be true

Spot doing a double front flip, using the Menagerie model with its 1,000 N·m motor limit left in place. The real robot cannot do this.

Menagerie's Spot model lets each joint push with up to 1,000 N·m and turn at any speed. Given that model, the same search found a double front flip, more than a meter in the air. It used the full 1,000 N·m and spun joints at over 110 radians per second. That is roughly nine times the torque of Spot's real knees at their strongest. With Boston Dynamics' published limits in place, no front flip landed at all. The lesson applies to every simulator. A result is only as believable as the motor limits in the model, and a search will find any loophole the model leaves open.

Features and capabilities

Rendering is basic by default. The classic OpenGL renderer, used for the screenshots on this page, shows plain materials and simple shadows. A newer renderer based on Google's Filament engine adds more realistic lighting, but it is still far from the ray-traced images of NVIDIA Isaac Sim.

Platforms and installation

MuJoCo is a C library with official Python, C# and JavaScript bindings. Most robot work uses Python, installed with pip install mujoco. Community bindings exist for MATLAB Simulink, Julia, Rust, Swift and Java. A Unity plug-in brings MuJoCo models into the Unity game engine.

PlatformSupportNotes
Linux (x86-64 and ARM)FullThe main platform for research. ARM wheels run on a Raspberry Pi 5 or Jetson.
Windows (x86-64)FullNo Windows on ARM build
macOS (Apple Silicon)FullScripts that open the live viewer must be started with mjpython instead of python
macOS (Intel)PartialNo Python wheels since version 3.11.0 (July 2026). The C library is still universal.
ChromeOSPartialRuns only inside the Linux development environment. The viewer depends on the Chromebook's graphics support.
Web browsersEarlyAn official WebAssembly build, still marked work in progress
Python3.10 to 3.15

No graphics card is needed for simulation. On a fast recent laptop, the robot dog simulations on this page ran about 30 times faster than real time on a single CPU core. A Unitree G1 humanoid with both hands ran at about the same speed. Budget laptops and Chromebooks have much slower processors, but that margin should still cover one robot in real time. Chromebooks are the hardest case. MuJoCo runs there only inside ChromeOS's Linux development environment, which school and work administrators can turn off. The live viewer also depends on the Chromebook's graphics support, so it may be slow or fail to open. A GPU only matters for the large-scale training described next.

GPU training with MJX, MuJoCo Warp and Playground

Reinforcement learning needs millions of practice attempts. Running thousands of simulated robots at once on a graphics card makes that practical. MuJoCo has two GPU versions for this.

Two training frameworks sit on top. MuJoCo Playground, from DeepMind and university partners, provides ready-made training tasks. Its policies ran on real robots with no extra tuning, including the Go1 (walking, handstand and getting up), the G1, the Booster T1 and a Franka arm. Most trained in 5 to 30 minutes on two RTX 4090 graphics cards. mjlab combines the Isaac Lab programming style with MuJoCo Warp. Unitree's G1 and H1-2 training code uses it.

A common pattern is to train in one simulator and check in another. Many makers train in Isaac Lab, then run the policy in MuJoCo before trying it on the robot. This step, often called sim-to-sim, catches policies that only work because of quirks in one physics engine. See sim-to-real in the glossary for the next step. The Robot Gaits guide covers training specific gaits, with typical training times.

Limitations

Comparison with other simulators

SimulatorLicenseHardwareBest for
MuJoCoApache 2.0Any CPU, GPU optionalContact-rich legged and arm research, robot learning
Isaac Sim and Isaac LabOpen source, on NVIDIA OmniverseNVIDIA RTX GPU requiredPhoto-realistic cameras, large GPU training, ROS 2 bridge
GazeboApache 2.0CPUROS 2 robots, navigation and mapping
WebotsApache 2.0CPUTeaching, ready-made robot models
PyBulletzlibCPUOlder research code, now little developed
GenesisApache 2.0NVIDIA, AMD and Apple GPUs, or CPUNewer GPU simulator with several physics types

Getting started

A robot model can be on screen within a few minutes. The steps below use Python and a Menagerie model.

pip install mujoco
git clone https://github.com/google-deepmind/mujoco_menagerie
python -m mujoco.viewer --mjcf mujoco_menagerie/unitree_go2/scene.xml

The viewer opens with the robot on a floor. Double-clicking a body selects it, and dragging with Ctrl held pushes it. A short script can then step the simulation and send motor commands:

import mujoco
model = mujoco.MjModel.from_xml_path("mujoco_menagerie/unitree_go2/scene.xml")
data = mujoco.MjData(model)
mujoco.mj_resetDataKeyframe(model, data, 0)   # the model's standing pose
for _ in range(1000):                          # 1000 steps of 2 ms = 2 seconds
    data.ctrl[:] = 0.0                         # motor torques go here
    mujoco.mj_step(model, data)
print(data.qpos[2])                            # body height after 2 seconds

With zero torque the Go2 slumps to the floor, which shows the first job of any controller, holding the robot up. From there, the official Python tutorial and the MuJoCo Playground notebooks are good next steps. The Robotics Courses page lists free courses on robot learning.