Download Latest Version Release v1.2.0 source code.tar.gz (6.8 MB)
Email in envelope

Get an email when there's a new version of Newton

Home / v1.2.0
Name Modified Size InfoDownloads / 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 / neural MLP or LSTM) with an optional Delay and zero or more Clamping post-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 standalone newton-actuators package is deprecated and moved into core Newton as newton.actuators, and gains full USD schema support (NewtonActuator prim + composable NewtonActuatorDelayAPI, 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.examples under newton/examples/kamino/ and runnable through the standard example browser (#2518).

Screenshot from 2026-05-11 22-23-06

  • SolverMuJoCo performance. 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 with SolverMuJoCo (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% on example_robot_anymal_d with 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).

Screenshot from 2026-05-11 21-48-39

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

  • SensorRaycast deprecated in favor of SensorTiledCamera. Migrate to SensorTiledCamera.utils.compute_pinhole_camera_rays() and create_depth_image_output() for single-camera depth rendering; the SensorRaycast class docstring carries a complete migration example.
  • SensorTiledCamera.update(state=None, refit_bvh=...) is deprecated. Manage camera BVHs explicitly with newton.geometry.build_bvh_*() / refit_bvh_*(), call SensorTiledCamera.sync_transforms(state), then call update() with explicit camera transforms and rays.
  • worlds_per_row=0 in sensor RGBA flattening helpers is deprecated. Pass worlds_per_row=None for automatic layout.
  • rigid_enable_dahl_friction deprecated and ignored on SolverVBD. Dahl friction is now auto-detected from model.vbd.dahl_eps_max / model.vbd.dahl_tau.
  • newton-actuators package dependency deprecated. All actuator functionality is built into newton.actuators; the dependency is kept for backward compatibility and will be removed in a future release. Migrate imports from newton_actuators to newton.actuators.
  • Legacy actuator call styles are deprecated. The old newton_actuators-style ModelBuilder.add_actuator(ActuatorPD, input_indices=...) path is still accepted for compatibility, but users should migrate to newton.actuators.ControllerPD / ControllerPID. Legacy gear values and mismatched output_indices are 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.

Source: README.md, updated 2026-05-12