| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| newton-1.2.0-py3-none-any.whl | < 20 hours ago | 4.3 MB | |
| README.md | < 23 hours ago | 16.2 kB | |
| Release v1.2.0 source code.tar.gz | < 23 hours ago | 6.8 MB | |
| Release v1.2.0 source code.zip | < 23 hours ago | 7.4 MB | |
| Totals: 4 Items | 18.4 MB | 0 | |
Newton v1.2.0
Newton v1.2 introduces an experimental composable actuator subsystem with full USD schema support, brings the Kamino simulation examples into newton.examples, and improves SolverMuJoCo simulation throughput over Newton 1.1. The release also includes asset-import correctness fixes, viewer additions, and collision-pipeline improvements summarized below; for the complete list of changes, see the full changelog.
Highlights
- Newton actuators (experimental). Actuator models can be built from components: each one wires a single
Controller(PD/PID/ neuralMLPorLSTM) with an optionalDelayand zero or moreClampingpost-processors (max-effort, DC-motor saturation, position-based). The design is optimized for graphable batch application in RL workloads in Newton and other simulators (e.g. PhysX). The standalonenewton-actuatorspackage is deprecated and moved into core Newton asnewton.actuators, and gains full USD schema support (NewtonActuatorprim + composableNewtonActuatorDelayAPI,NewtonPDControlAPI, clamping APIs), covering the IsaacLab actuator classes. See Actuators.
```python # Before (newton-actuators package): one subclass per combination. actuator = ActuatorDelayedPD(kp, kd, delay)
# After (newton.actuators): compose any combination of controller, delay, clamping. actuator = Actuator( ControllerPD(kp, kd), Delay(delay), [ClampingDCMotor(saturation_effort, velocity_limit, max_force)], ) ```
- Kamino examples ship with Newton. The Kamino simulation examples (basic and robot scenes) are now part of
newton.examplesundernewton/examples/kamino/and runnable through the standard example browser (#2518).
SolverMuJoCoperformance. MJWarp optimizations improve performance across a wide range of configurations: typically around 10% higher simulation throughput over Newton 1.1 (e.g. 512-world KitchenG1 or 8192-world Humanoid), with the largest gains — up to 50% — for robots just above MuJoCo's 32-DoF sparse/dense threshold (e.g. 8192-world G1). When using the Newton collision pipeline withSolverMuJoCo(use_mujoco_contacts=False), three optimizations to the Newton-to-MJWarp contact conversion reduce the collision pipeline's share of GPU time from about 12% to 2.3% onexample_robot_anymal_dwith 4096 worlds (#2393).
Other notable changes
SolverMuJoCo: asset parsing and correctness
Correctness fixes across MJCF and USD asset import: multi-DOF joints with MjcActuator targets (#2397), MjcActuator import populating Newton's joint target arrays (#2598), <default><equality/></default> defaults in MJCF (#2510), degree-mode MJCF importer fixes for damping / stiffness / range (#2508), and <joint type="ball"/> support in MJCF including round-trip to MuJoCo specs (#2509). New SolverMuJoCo capabilities include enable_multiccd for up to four contact points per geom pair (#2435) and site-targeted actuator support (#2220). The MuJoCo integration guide is also rewritten end-to-end (#2574).
Viewer
The viewer gains live in-loop telemetry: ViewerGL.log_scalar() and ViewerViser.log_scalar() for live scalar time-series plots (#2341, [#2387]), ViewerBase.log_arrows() for arrow rendering via a dedicated geometry shader (#2403), array heatmap logging through log_array() (#2433), and Viewer.log_image() for displaying single or batched sensor images (#2578). The GL viewer adds Blender-style orbit / pan / dolly camera controls (#2579), a frame-by-frame step bound to . while paused (#2566), and per-mesh color and PBR material overrides on log_mesh() (#2628).
Newton Viewer running the sensor_tiled_camera example — the floating color window shows batched SensorTiledCamera output rendered into the viewer via Viewer.log_image().
VBD
SolverVBD's triangle (cloth / membrane) material switches from StVK to a stable Neo-Hookean formulation, with better stability under large stretch; tri_ka / tri_ke keep their meaning and near-rest behavior is unchanged (#2545). VBD now supports and defaults to augmented-Lagrangian hard constraints for body-body contacts and non-cable structural joint slots; toggle globally with the rigid_contact_hard flag, or per joint slot via SolverVBD.set_joint_constraint_mode() (#2327).
Sensors
SensorTiledCamera gains linear HDR color output via hdr_color_image (#2721). Raycast logic is consolidated under newton.geometry.raycast (#2482), and the BVH is disentangled from the raytracer and exposed via a public API: newton.geometry.build_bvh_shape(), build_bvh_particle(), refit_bvh_shape(), refit_bvh_particle() (#2544).
Collision pipeline (including SDF and hydroelastic contacts)
CollisionPipeline now has an option for deterministic contact detection (#2409). Pass deterministic=True to get bit-identical contacts when running contact detection multiple times on the same input:
:::py
import newton
builder = newton.ModelBuilder()
# ... build scene ...
model = builder.finalize()
pipeline = newton.CollisionPipeline(model, deterministic=True)
contacts = pipeline.contacts()
state = model.state()
pipeline.collide(state, contacts)
# contacts are now in a canonical, reproducible order
Mesh SDF construction switches to a texture-based sparse path, with a parity-based fast path auto-selected for watertight meshes via SDF.create_from_mesh(sign_method="auto") (#2475); cooked SDFs gain content-addressed on-disk caching through a new cache_dir argument on SDF.create_from_mesh and Mesh.build_sdf (#2620). Hydroelastic contacts get a broadphase scatter-kernel rewrite (#2419) and degenerate-triangle handling fixes (#2424). The narrow-phase MPR / GJK paths get correctness fixes for non-origin-centered convex hulls (#2651) and box support-map sign flips under noisy rotations (#2438). The collision pipeline also gains a first working CPU execution of mesh-mesh and mesh-heightfield SDF contacts (experimental; perf and correctness still being worked on, [#2619]), an O(W²·S²) shape-pair memory-explosion fix (#2384), and a collection of smaller perf improvements (#2477).
Breaking changes
ModelBuilder.add_actuator signature
The previous add_actuator(actuator_class, input_indices=..., output_indices=..., **kwargs) form is replaced by per-DOF registration: add_actuator(controller_class, index=..., clamping=[...], delay_steps=..., pos_index=..., **ctrl_kwargs) (#2449).
ArticulationView.get_actuator_parameter / set_actuator_parameter
Both methods now require a component argument identifying the owning Controller, Clamping, or Delay instance, e.g. get_actuator_parameter(actuator, actuator.controller, "kp") (#2449).
SensorTiledCamera BVH lifecycle
Cameras no longer build their BVH implicitly. Call newton.geometry.build_bvh_shape() / build_bvh_particle() once after setup, then refit_bvh_shape() / refit_bvh_particle() before rendering frames whose geometry changed (#2544).
Mesh SDF: texture_data replaces sparse_volume / coarse_volume
Mesh SDFs build via the texture-based sparse path only and sample via SDF.texture_data. The SDF.sparse_volume and SDF.coarse_volume paths are removed (#2475).
Raycast return shape
All raycast functions now return distance and normal information; callers that previously unpacked only the hit position need to update (#2482).
Implicit MPM defaults and warmstart syntax
SolverImplicitMPM.Config.solver warmstart syntax moves from +-separated strings to ordered sequences: solver=("cg", "gauss-seidel") instead of solver="cg+gauss-seidel". The default solver changes from "gs" to "auto" (selects "gs" for trilinear bases, "gs-batched" for higher-order); set solver="gs" explicitly to restore the previous behavior. The default collider_basis changes from "Q1" to "S2" for improved contact quality (#2489).
VBD cable / rod stretch_stiffness and bend_stiffness
The default stretch_stiffness in add_joint_cable(), add_rod(), and add_rod_graph() is reduced from 1.0e9 to 1.0e5. stretch_stiffness and bend_stiffness in add_rod() / add_rod_graph() are now direct per-joint stiffness values, matching add_joint_cable() and other joint stiffness APIs (#2327).
SolverVBD rigid_contact_hard=True default
The VBD solver uses augmented-Lagrangian hard constraints for body-body contacts by default. Pass rigid_contact_hard=False to restore the previous (soft) behavior (#2327).
SolverVBD.collect_rigid_contact_forces() signature
SolverVBD.collect_rigid_contact_forces() now takes current and previous body transforms explicitly: (body_q, body_q_prev, contacts, dt) instead of (state, contacts, dt). Snapshot solver.body_q_prev before step(), then pass the post-step body transforms (#2327).
:::python
body_q_prev = wp.clone(solver.body_q_prev)
solver.step(state_in, state_out, control, contacts, dt)
body0, body1, point0, point1, force_on_body1, contact_count = solver.collect_rigid_contact_forces(
state_out.body_q,
body_q_prev,
contacts,
dt,
)
Additional SolverVBD rigid-constraint default tuning
In addition to rigid_contact_hard=True, several SolverVBD rigid-constraint defaults changed. Users depending on Newton 1.1 rigid VBD tuning should set the old values explicitly (#2327).
| Parameter | Newton 1.1 default | Newton 1.2 default |
|---|---|---|
rigid_avbd_beta |
1.0e5 |
0.0 |
rigid_avbd_gamma |
0.99 |
0.999 |
rigid_joint_linear_ke |
1.0e9 |
1.0e5 |
rigid_joint_angular_ke |
1.0e9 |
1.0e5 |
rigid_joint_linear_k_start |
1.0e4 |
1.0e2 |
rigid_joint_linear_kd |
1.0e-2 |
0.0 |
newton.utils.create_cable_stiffness_from_elastic_moduli() signature
create_cable_stiffness_from_elastic_moduli() now requires segment_length and returns per-joint stiffness values, matching the new add_rod() / add_rod_graph() stiffness semantics (#2327).
:::python
# Before
stretch_stiffness, bend_stiffness = newton.utils.create_cable_stiffness_from_elastic_moduli(E, radius)
# After
stretch_stiffness, bend_stiffness = newton.utils.create_cable_stiffness_from_elastic_moduli(
E, radius, segment_length
)
Joint-to-world collision_filter_parent behavior
collision_filter_parent is now honored for joints whose parent is the world (parent=-1). add_joint_fixed(parent=-1, ...) now defaults to filtering child shapes against world-static shapes; pass collision_filter_parent=False to restore the previous collision behavior for fixed-to-world joints (#2664).
python -m newton.examples default behavior
Running python -m newton.examples with no example name now launches basic_pendulum instead of printing the example list and exiting. Use python -m newton.examples --list to print available examples (#2572).
Deprecations
SensorRaycastdeprecated in favor ofSensorTiledCamera. Migrate toSensorTiledCamera.utils.compute_pinhole_camera_rays()andcreate_depth_image_output()for single-camera depth rendering; theSensorRaycastclass docstring carries a complete migration example.SensorTiledCamera.update(state=None, refit_bvh=...)is deprecated. Manage camera BVHs explicitly withnewton.geometry.build_bvh_*()/refit_bvh_*(), callSensorTiledCamera.sync_transforms(state), then callupdate()with explicit camera transforms and rays.worlds_per_row=0in sensor RGBA flattening helpers is deprecated. Passworlds_per_row=Nonefor automatic layout.rigid_enable_dahl_frictiondeprecated and ignored onSolverVBD. Dahl friction is now auto-detected frommodel.vbd.dahl_eps_max/model.vbd.dahl_tau.newton-actuatorspackage dependency deprecated. All actuator functionality is built intonewton.actuators; the dependency is kept for backward compatibility and will be removed in a future release. Migrate imports fromnewton_actuatorstonewton.actuators.- Legacy actuator call styles are deprecated. The old
newton_actuators-styleModelBuilder.add_actuator(ActuatorPD, input_indices=...)path is still accepted for compatibility, but users should migrate tonewton.actuators.ControllerPD/ControllerPID. Legacygearvalues and mismatchedoutput_indicesare ignored with warnings; fold gear scaling into controller gains or effort limits instead.
Dependency updates
See the system requirements section of the installation guide for supported Python versions, GPU compute capabilities, CUDA driver minimums, and tested platform configurations.
| Scope / extra | Dependency | Newton 1.1 constraint | Newton 1.2 constraint | Notes |
|---|---|---|---|---|
| Core | warp-lang |
>=1.12.0 |
>=1.13.0,<1.14 |
Raises the minimum Warp runtime for Newton 1.2 and caps below the unreleased 1.14 line. |
sim |
mujoco |
~=3.6.0; python_version < '3.14' |
~=3.8.0 |
Updates the MuJoCo integration baseline. The Python-version marker was removed. |
sim |
mujoco-warp |
~=3.6.0; python_version < '3.14' |
>=3.8.0.3,~=3.8.0 |
Requires the patched 3.8.0 series; 3.8.0 itself is avoided. |
sim |
newton-actuators |
>=0.1.0 |
>=0.1.0 |
Constraint unchanged, but the dependency is deprecated and kept only for backward compatibility. Migrate imports to newton.actuators. |
importers, remesh |
open3d |
>=0.18.0 |
>=0.19.0 |
Used for Gaussian .ply import and Poisson reconstruction where wheels are available. |
importers |
meshio |
>=5.3.0 |
>=5.3.5 |
Avoids meshio versions that call np.string_, which was removed in NumPy 2.0. |
importers |
usd-core |
>=25.5 |
>=25.5,<26.5 |
Caps USD to avoid deprecation warnings introduced in 26.5. |
importers |
newton-usd-schemas |
>=0.1.0 |
>=0.2.0 |
Adds experimental actuator schemas and re-aligns friction defaults. |
examples |
GitPython |
>=3.1.44 |
>=3.1.47 |
Picks up the fix for GHSA-x2qx-6953-8485. |
examples |
Pillow |
>=9.0.0 |
>=11.3.0 |
Raises the image-processing dependency floor. |
docs |
GitPython |
not listed directly | >=3.1.47 |
Added for tutorial asset downloads, with the same GHSA fix as above. |
docs, notebook |
viser |
>=1.0.16 in docs |
==1.0.26 |
Pins backend and web client to one Viser build for stable playback/client behavior. |
notebook |
jupyterlab |
>=4.4.10 |
>=4.5.7 |
Picks up the fix for CVE-2026-40171. |
notebook |
jupyter-server-proxy |
not listed | >=4.5.0 |
Added for notebook/Viser integration. |
Acknowledgments
Thanks to the Newton Project Members and to the external contributors below for this release.
- @aneangel (#2566).
- @devshahofficial (#2464).
- @han-xudong (#2433, [#2615]).
- @jsw7460 (#2332, [#2487]).
- @oursland (#2220).
For a complete list of changes, see the full changelog.