Contributing#
Bug fixes and documentation improvements are always welcome.
Important
For new features, please open an issue first so we can discuss whether it fits the project scope.
Development setup#
Clone the repository and sync dependencies:
git clone https://github.com/mujocolab/mjlab.git && cd mjlab
uv sync
Install pre-commit hooks to catch formatting and lint issues before each commit:
uvx pre-commit install
Common commands#
The Makefile provides shortcuts for the most common development tasks:
make format # Format code and fix lint errors (ruff)
make type # Type check (ty + pyright)
make check # Format + type check
make test-fast # Run tests, excluding slow ones
make test # Run the full test suite
make test-all # Format + type check + full test suite
You can also run individual tests for faster iteration:
uv run pytest tests/test_rewards.py
Type checking (make type) is required. PRs that do not pass will be
blocked.
Building the docs#
Build the documentation locally:
make docs
The HTML output is written to docs/_build/. For live reload during
editing:
make docs-watch
Submitting a pull request#
Fork the repository and create a feature branch.
Make your changes.
Run
make test-allto verify formatting, type checking, and tests pass.Add an entry to the “Upcoming version” section in
docs/source/changelog.rstunder the appropriate category (Added / Changed / Fixed), following Keep a Changelog conventions.Submit a pull request.
Development with Claude Code#
The repository includes a CLAUDE.md file at the project root. This file
defines development conventions, style guidelines, and common commands for
Claude Code. It is also a useful
reference for human contributors since it captures the same rules enforced
in CI.
The project also includes shared commands in .claude/commands/.
Any contributor with Claude Code installed can invoke them as slash commands.
/update-mjwarp <commit-hash>Update the
mujoco-warpdependency to a specific commit. This editspyproject.toml, runsuv lock, and opens a PR in one step./update-mjwarp e28c6038cdf8a353b4146974e4cf37e74dda809a
/commit-push-prStage current changes, commit, push, and open a PR.