[Newton] Drop explicit mujoco/mujoco-warp pins, defer to newton[sim]#5566
Conversation
Newton declares `mujoco` and `mujoco-warp` under its `[sim]` extra, so listing them again in IsaacLab's setup.py was redundant and forced the core `isaaclab` package (used by PhysX and Kit backends too) to pull in MuJoCo even when nothing in IsaacLab core imports it. Switch the Newton install spec to `newton[sim] @ git+...` and remove the direct pins. Mirror the same change in the wheel builder manifest so wheel builds stay in sync with `isaaclab_newton/setup.py`.
There was a problem hiding this comment.
🤖 Isaac Lab Review Bot
Summary
Removes redundant mujoco and mujoco-warp version pins from isaaclab core and isaaclab_newton, deferring to Newton's [sim] extra as the single source of truth for these transitive dependencies. Users installing only PhysX/Kit backends no longer pull in MuJoCo unnecessarily.
Design Assessment
Design is sound. This is the correct architectural decision — isaaclab core doesn't import MuJoCo anywhere (grep -rn "import mujoco" = zero hits), so it shouldn't declare it as a dependency. Newton already pins the compatible versions in its [sim] extra, so newton[sim] @ git+... is the right specifier for isaaclab_newton.
Findings
No issues found. The change is minimal, correct, and well-motivated:
- ✅
isaaclab/setup.py: Removes two lines that forced MuJoCo on PhysX/Kit users - ✅
isaaclab_newton/setup.py: Switches from direct pins tonewton[sim](single source of truth) - ✅
tools/wheel_builder/res/python_packages.toml: Same cleanup for the wheel builder - ✅ Changelogs properly categorized (
Removedfor isaaclab,Changedfor isaaclab_newton)
Test Coverage
No new tests needed — this is a build/dependency configuration change with no runtime code impact. The existing CI Build Wheel check passing confirms the dependency resolution still works.
CI Status
- Build Wheel: ✅ pass
- Check changelog fragments: ✅ pass
- pre-commit: ✅ pass
- Check for Broken Links: ❌ fail (likely unrelated)
Verdict
Ship it ✅
Clean dependency hygiene fix. Single source of truth for MuJoCo versions, no unnecessary transitive deps for PhysX/Kit users.
CI on isaaclab_tasks / isaaclab_newton failed because pip resolves `newton @ git+url` once per URL: the bare spec in isaaclab_visualizers and isaaclab_physx was processed before the `newton[sim] @ git+url` in isaaclab_newton, so the `[sim]` extra (which carries mujoco and mujoco-warp) was dropped and tests hit `ModuleNotFoundError: mujoco`. Switch every `newton @ git+...` site in source/ to `newton[sim] @ ...` so any install order pulls the MuJoCo solver deps transitively.
Greptile SummaryThis PR removes redundant
Confidence Score: 4/5Safe to merge; the change is a straightforward dependency-management cleanup with no functional code changes and a clear rationale for every decision. The core removal of mujoco from isaaclab's top-level deps is clean and correct. The switch to newton[sim] everywhere is logically sound given pip's URL-deduplication behavior. Two minor concerns are worth a second look: the version constraint on mujoco loosens from an exact pin to a compatible-release range, so future patch releases could be picked up; and the rerun/viser extras now carry a full mujoco install that those visualization backends don't actually use. source/isaaclab_visualizers/setup.py — the rerun and viser extras now transitively install mujoco/mujoco-warp; worth confirming this is intentional for all user-facing install scenarios. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A["pip install isaaclab_newton[all]"] --> B["newton[sim] @ git+...@v1.2.0rc2"]
B --> C["Newton package\n(physics engine)"]
B --> D["[sim] extras\nmujoco~=3.8.0\nmujoco-warp>=3.8.0.1,~=3.8.0"]
D --> E["mujoco (latest 3.8.x)"]
D --> F["mujoco-warp (latest 3.8.x)"]
G["pip install isaaclab_physx[newton]"] --> B
H["pip install isaaclab_visualizers[newton/rerun/viser]"] --> B
I["pip install isaaclab (core only)"] --> J["No mujoco/mujoco-warp Installed"]
style D fill:#f9f,stroke:#333
style I fill:#9f9,stroke:#333
style J fill:#9f9,stroke:#333
Reviews (1): Last reviewed commit: "Use newton[sim] in all Newton declaratio..." | Re-trigger Greptile |
| "mujoco-warp==3.8.0.1", | ||
| "PyOpenGL-accelerate==3.1.10", | ||
| "newton @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", | ||
| "newton[sim] @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", |
There was a problem hiding this comment.
Loosened mujoco/mujoco-warp version constraints
The previous explicit pins (mujoco==3.8.0, mujoco-warp==3.8.0.1) guaranteed exact reproducibility. Newton's [sim] extra specifies mujoco~=3.8.0 (compatible-release, i.e. >=3.8.0,<3.9.0) and mujoco-warp>=3.8.0.1,~=3.8.0, so a fresh install after a new 3.8.x release could resolve a different patch version than was tested. Since Newton is pinned to an immutable tag (v1.2.0rc2) the constraint itself won't change, but pip will still pick the latest matching patch from PyPI at install time. Worth confirming the team is comfortable trading bit-for-bit reproducibility for deferred version management.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
By design — the goal of this change is for Newton to be the single source of truth for these versions, so the loosening from ==3.8.0 to ~=3.8.0 is the trade-off we accept (called out in the PR description). If a specific 3.8.x patch turns out to be incompatible, the right fix is to tighten Newton's own [sim] spec rather than override it here.
There was a problem hiding this comment.
Makes sense — single source of truth in Newton with ~= as the compatibility range is a clean approach. Agreed that tightening upstream is the right lever if a patch breaks things.
| "newton[sim] @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", | ||
| "rerun-sdk>=0.29.0", | ||
| ], | ||
| "viser": [ | ||
| "newton @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", | ||
| "newton[sim] @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", | ||
| "viser>=1.0.16", | ||
| ], |
There was a problem hiding this comment.
rerun and viser extras now force-install MuJoCo
Before this PR the rerun and viser extras pulled in bare newton (no MuJoCo). After, they request newton[sim], so users who install only isaaclab_visualizers[rerun] or isaaclab_visualizers[viser] will now also download mujoco and mujoco-warp — packages those visualization backends do not use directly. The PR description gives a valid pip-deduplication rationale (a bare newton @ git+URL elsewhere could shadow the [sim] extras), but it is worth documenting in the changelog or a comment why visualization-only extras now carry the full MuJoCo install.
There was a problem hiding this comment.
Added a block comment above EXTRAS_REQUIRE explaining why even the rerun/viser extras pin newton[sim]. tl;dr: pip resolves a git-URL requirement once per URL, so a bare newton @ git+... here would shadow the [sim] extra requested by isaaclab_newton and silently break installs. Forcing [sim] everywhere is what keeps the resolution consistent — the cost is that rerun/viser-only installs carry a mujoco install they don't use, which we accept.
There was a problem hiding this comment.
TIL about pip deduplicating git-URL requirements — that explains the necessity well. The added comment should save future readers the same question. 👍
…co-deps # Conflicts: # source/isaaclab/setup.py # source/isaaclab_newton/setup.py # source/isaaclab_physx/setup.py # source/isaaclab_visualizers/setup.py # tools/wheel_builder/res/python_packages.toml
|
Update (commit 1c394ff): Reviewed incremental changes since de295cc. New changes:
Previous suggestions: Both were acknowledged (version constraints rationale and Result: No new issues. LGTM 👍 |
|
Re-review (1c394ff): New commits look good ✅
LGTM 👍 |
|
📋 Re-review after merge from develop (e35394a) New commits: Merge commit brings in develop changes:
These are unrelated to this PR's scope. PR changes (unchanged): Removes redundant mujoco/mujoco-warp pins from IsaacLab setup.py files, deferring to newton[sim] extra. ✅ No new concerns from the merge. |
🔄 Re-Review Update (e35394a)Reviewed incremental changes from The new commits are merge-from-develop bringing upstream changes:
These are unrelated to the PR's stated goal (dropping mujoco pins). The actual PR changes remain as previously reviewed. Previous concerns status:
No new issues introduced by the merge. |
Restores the bump that was briefly active between isaac-sim#5024 and isaac-sim#5566, keeping the canonical `newton[sim] @ git+...` form across all five pin sites (isaaclab_newton, isaaclab_physx, isaaclab_visualizers x3, tools/wheel_builder/res/python_packages.toml). rc3 pulls in MPR/GJK convex-hull centering fix (newton-physics/newton#2651), Kamino FK perf (newton-physics/newton#2703), HDR tiled-camera output (newton-physics/newton#2721), and SolverMuJoCo planar-mesh / contact-anchor / distance-conversion fixes. mjwarp moves 3.8.0.1 -> 3.8.0.2 transitively via newton[sim] -- no IsaacLab-side pin change since isaac-sim#5566 dropped explicit mujoco / mujoco-warp pins.
Bumps the Newton pin from v1.2.0rc2 (current develop) directly to the v1.2.0 stable release across all five pin sites (isaaclab_newton, isaaclab_physx, isaaclab_visualizers x3, tools/wheel_builder/res/python_packages.toml), keeping the canonical `newton[sim] @ git+...` form everywhere. The full upstream release notes are at https://github.com/newton-physics/newton/releases/tag/v1.2.0 (published 2026-05-12). IsaacLab-relevant changes vs the rc2 pin: - MPR/GJK convex-hull centering fix (newton-physics/newton#2651) - Kamino FK solver performance (newton-physics/newton#2703) - HDR color output for tiled camera sensors (newton-physics/newton#2721) - Collada texture URDF import fix (newton-physics/newton#2743) - Kamino multi-GPU gravity-data device fix (newton-physics/newton#2823) - CollisionPipeline small fixes (newton-physics/newton#2632) - DelassusOperator attribute refactor (newton-physics/newton#2734) -- not used in IsaacLab source, no adapt needed. - SolverMuJoCo fixes: planar meshes, contact-anchor computation, distance conversion. mjwarp moves 3.8.0.1 -> 3.8.0.3 transitively via newton[sim]; no IsaacLab-side mujoco / mujoco-warp pin change since isaac-sim#5566 dropped explicit pins.
Bumps the Newton pin from v1.2.0rc2 (current develop) directly to the v1.2.0 stable release across all five pin sites (isaaclab_newton, isaaclab_physx, isaaclab_visualizers x3, tools/wheel_builder/res/python_packages.toml), keeping the canonical `newton[sim] @ git+...` form everywhere. The full upstream release notes are at https://github.com/newton-physics/newton/releases/tag/v1.2.0 (published 2026-05-12). IsaacLab-relevant changes vs the rc2 pin: - MPR/GJK convex-hull centering fix (newton-physics/newton#2651) - Kamino FK solver performance (newton-physics/newton#2703) - HDR color output for tiled camera sensors (newton-physics/newton#2721) - Collada texture URDF import fix (newton-physics/newton#2743) - Kamino multi-GPU gravity-data device fix (newton-physics/newton#2823) - CollisionPipeline small fixes (newton-physics/newton#2632) - DelassusOperator attribute refactor (newton-physics/newton#2734) -- not used in IsaacLab source, no adapt needed. - SolverMuJoCo fixes: planar meshes, contact-anchor computation, distance conversion. mjwarp moves 3.8.0.1 -> 3.8.0.3 transitively via newton[sim]; no IsaacLab-side mujoco / mujoco-warp pin change since isaac-sim#5566 dropped explicit pins.
Restores the bump that was briefly active between isaac-sim#5024 and isaac-sim#5566, keeping the canonical `newton[sim] @ git+...` form across all five pin sites (isaaclab_newton, isaaclab_physx, isaaclab_visualizers x3, tools/wheel_builder/res/python_packages.toml). mjwarp moves 3.8.0.1 -> 3.8.0.2 transitively via newton[sim] -- no IsaacLab-side mujoco / mujoco-warp pin change since isaac-sim#5566 dropped explicit pins.
## Summary Bumps the Newton pin from `v1.2.0rc2` (current develop) directly to the [`v1.2.0` stable release](https://github.com/newton-physics/newton/releases/tag/v1.2.0) across all five pin sites, keeping the canonical `newton[sim] @ git+...` form everywhere. Per Kelly Guo's suggestion: skip the rc bump and go straight to stable. Upstream published `v1.2.0` on 2026-05-12. **Alternative**: [#5614](#5614) (rc3 bump) — pick whichever target based on CI signal. This one is the most forward target. > Branch is still named `jichuanh/newton-1.2.0rc4-bump` from when this PR was originally proposing rc4 — the branch name doesn't match the current target but the diff is correct. Force-pushing the rename would close/reopen the PR, which adds noise without changing the artifact. ## What's new in Newton v1.2.0 vs v1.2.0rc2 Full release notes: [newton-physics/newton release v1.2.0](https://github.com/newton-physics/newton/releases/tag/v1.2.0). Notable IsaacLab-relevant fixes: - [newton-physics/newton#2651](newton-physics/newton#2651) — MPR/GJK no longer assumes convex hulls are centered around the origin. - [newton-physics/newton#2703](newton-physics/newton#2703) — Kamino FK solver performance. - [newton-physics/newton#2721](newton-physics/newton#2721) — HDR color output for tiled camera sensors. - [newton-physics/newton#2743](newton-physics/newton#2743) — Collada textures in URDF import. - [newton-physics/newton#2823](newton-physics/newton#2823) — Gravity-data device allocation in Kamino (multi-GPU). - [newton-physics/newton#2632](newton-physics/newton#2632) — CollisionPipeline small fixes. - [newton-physics/newton#2734](newton-physics/newton#2734) — `DelassusOperator` attribute refactor. Not used in IsaacLab source today (verified by grep), no adapt needed. - SolverMuJoCo fixes: planar meshes, contact-anchor computation, distance conversion. ## Required dep bumps None on the IsaacLab side. The `mjwarp 3.8.0.1 → 3.8.0.3` bump flows in transitively through `newton[sim]`, since [#5566](#5566) dropped IsaacLab's explicit `mujoco` / `mujoco-warp` pins. `warp-lang` stays at `1.13.0` (set by [#5523](#5523)). ## Pins updated | File | Change | |---|---| | `source/isaaclab_newton/setup.py` | `v1.2.0rc2` → `v1.2.0` | | `source/isaaclab_physx/setup.py` | `v1.2.0rc2` → `v1.2.0` | | `source/isaaclab_visualizers/setup.py` | 3× `v1.2.0rc2` → `v1.2.0` | | `tools/wheel_builder/res/python_packages.toml` | `v1.2.0rc2` → `v1.2.0` | ## Test plan - [x] Pre-commit clean. - [ ] CI smoke verifies clean install picks up `newton 1.2.0` and downstream `mjwarp 3.8.0.3`.
Summary
mujocoandmujoco-warpare already declared under Newton's[sim]optional-dependency extra. Re-listing them in IsaacLab'ssetup.pywas redundant and pinned them at IsaacLab's chosen versions instead of Newton's.source/isaaclab/setup.py's top-levelINSTALL_REQUIRES, so users installing only the PhysX or Kit backends were forced to pull MuJoCo even though nothing inisaaclabcore imports it.newton[sim] @ git+...and remove the direct pins from both setup.py files plus the wheel builder manifest. Newton becomes the single source of truth for those versions.Verification
grep -rn "import mujoco\|import mujoco_warp\|MjModel\|MjData"across the repo: zero direct usages. The Newton backend usesnewton.solvers.SolverMuJoCo(transitive). MJCF asset import goes through Isaac Sim'sisaacsim.asset.importer.mjcf, not themujocoPython package.pyproject.toml[sim]extra:mujoco~=3.8.0,mujoco-warp>=3.8.0.1,~=3.8.0. Newton's compatible-release spec already covers the patch versions IsaacLab was hard-pinning../isaaclab.sh -i,cli/commands/install.py,docker/Dockerfile.*,environment.yml, rootpyproject.toml, per-packagepyproject.toml) read deps from these three files; no other version pins exist../isaaclab.sh -fpasses.Test plan
./isaaclab.sh -i --install newtoninstall resolves Newton,mujoco, andmujoco-warptransitively.tools/wheel_builderproduces wheels with the same set of MuJoCo packages as before.