Open source

Kevin Zakka releases mjbatch, a Python library for running thousands of MuJoCo simulations in parallel on CPU, and the repo hit 331 stars in one day

September 11, 2026 at 4:30 PM PT

GitHub social card for the mjbatch repository

Image: GitHub

Why it mattersA CPU-parallel MuJoCo runner lets a small robotics or RL team run reinforcement learning experiments, model-predictive control loops, and system identification sweeps on machines they already have, without booking GPU time.

Kevin Zakka, a UC Berkeley PhD, has published mjbatch, a Python library that runs thousands of MuJoCo simulations in parallel on CPU. The repository was created on 10 September and has 331 stars and 26 forks in about a day. It is Apache-2.0 licensed and built to make batched physics experiments cheap on hardware people already have.

What it is

MuJoCo is the physics engine most robotics research uses for training and control. It runs a single simulation quickly, but running hundreds of them at once is what a reinforcement learning loop, a system-identification sweep, or a model-predictive controller actually needs. mjbatch handles the batching in a C++ thread pool with the Python GIL released, so the parallelism scales with the CPU rather than being blocked on the interpreter.

What is in it

The library exposes two primitives that make batched simulation ergonomic. bind gives live array access to MjData fields, so the state and controls of every parallel simulation are visible as numpy arrays. expand and set_const do the same for MjModel fields, so each simulation can carry its own model parameters, which is what you need for randomised training environments or parameter sweeps.

The example workloads shipped with the repo are the kind that would otherwise motivate reaching for a GPU: cart-pole controllers, a humanoid learning backflips, a quadruped tracking a joystick input, and system-identification runs. There is also a co-design demonstration that varies hardware parameters across the batch to search for a better robot design at the same time as a controller.

The audience is specific and the number matters. A robotics or RL team that has been treating batched MuJoCo as a job for a machine with a GPU can now run the same experiments on a workstation or a cheap cloud CPU instance. The GIL-released thread pool is the piece that made this awkward to write from scratch; a library that packages it, with numpy-shaped access to state, removes the reason to keep the batching inside a specific RL framework.

The author is a well-known robotics researcher, which is part of why 331 stars in a day is a plausible number rather than an inflated one. mjbatch is early: v0.x, one week of pushes, a small set of examples. For a team already using MuJoCo through its Python bindings, this is worth a read and a benchmark against the current setup; for anyone whose workflow is bottlenecked on how many rollouts fit in a training run, it is the kind of library that changes the shape of the loop rather than the speed of one step.

Source

Primary source: kevinzakka/mjbatch on GitHub.

Source: kevinzakka on GitHub

This item was written by an AI system from the linked source. Reveneau is responsible for what it publishes.

More from AI News

Agent-memory hits 52.9% on LongMemEval-S, 17 points ahead of MemCore, with Claude Code and Codex sharing one store

Agent-memory is an open source long-term memory runtime whose store is plain Markdown, whose index is a rebuildable SQLite cache, and whose paired benchmark on LongMemEval-S puts it at 52.9% against MemCore's 35.8%.

Source: GitHubDev tools

A harness plugin measures the tool-call tax and puts one file read at 4.44 ms

ToolRush publishes before-and-after latency for four tool-call paths in the Hermes Agent harness, putting a native file read at 4.44 ms against 255.23 ms on the stock shell path.

Source: GitHubDev tools

Polars 2.0 makes the streaming engine the default and stops guaranteeing row order

The Polars 2.0 release candidate switches the default query engine to the streaming engine, which the project warns does not guarantee row order for group-by, join and unpivot.

Source: PressDev tools