Release Process#
This document describes how to prepare, publish, and follow up on a Newton release. It is intended for release engineers and maintainers.
Overview#
Newton follows PEP 440 versioning as described in the versioning section of the installation guide.
Releases are published to PyPI and documentation is deployed to GitHub Pages.
Version source of truth#
The version string lives in the [project] table of pyproject.toml.
All other version references (PyPI metadata, documentation) are derived from
this file. At runtime, newton/_version.py reads the version from
installed package metadata via importlib.metadata.
Dependency versioning strategy#
pyproject.toml specifies minimum compatible versions
(e.g. warp-lang>=1.12.0). uv.lock pins the latest known-good
versions for reproducible installs.
Exception: on the release branch, mujoco and mujoco-warp use
compatible-release pins (e.g. mujoco~=3.5.0) to allow patch
updates while locking the minor version. MuJoCo follows
semantic versioning from 3.5.0 onward,
so patch releases are safe to pick up automatically. main uses a
version floor like other dependencies.
Deprecation timeline#
Following Warp’s deprecation policy, a deprecated feature is maintained for two full minor release cycles after deprecation (e.g. deprecated in 1.2.0 → removed in 1.4.0). Deprecations and removals only happen in minor releases, never in patch releases.
Pre-release planning#
☐ |
Determine target version ( |
☐ |
Confirm dependency versions and availability: warp-lang, mujoco, mujoco-warp, newton-usd-schemas, newton-actuators. |
☐ |
Set timeline: code freeze → RC1 → testing window → GA. |
☐ |
Conduct public API audit:
|
☐ |
Communicate the timeline to the community. |
Code freeze and release branch creation#
☐ |
Create |
☐ |
On main: bump the version in |
☐ |
On release-X.Y: bump the version in |
☐ |
On release-X.Y: update dependencies in |
☐ |
Push tag |
☐ |
RC1 published to PyPI (approve in GitHub environment). |
Release candidate stabilization#
Bug fixes merge to main first, then are cherry-picked to
release-X.Y. Cherry-pick relevant commits from main onto a feature
branch and open a pull request targeting release-X.Y — never push
directly to the release branch.
For each new RC (rc2, rc3, …) bump the version in
pyproject.toml and run docs/generate_api.py, then tag and push.
Resolve any cherry-pick conflicts or missing dependent cherry-picks that
cause CI failures before tagging.
Testing criteria#
The release engineer and maintainers decide which issues must be fixed before GA and which can ship as known issues documented in the release notes. Features explicitly marked experimental have a lower bar — regressions in experimental APIs do not necessarily block a release.
As a guideline, an RC is typically ready for GA when:
All examples run without crashes, excessive warnings, or visual artifacts (
uv run -m newton.examples <name>).Testing covers Windows and Linux, all supported Python versions, and both latest and minimum-spec CUDA drivers (see system requirements in the installation guide).
PyPI installation of the RC works in a clean environment:
pip installsucceeds,import newtonworks, and examples and tests can be run from the installed wheel (pip install newton==X.Y.ZrcN).No unexpected regressions compared to the previous release have been identified.
☐ |
All release-targeted fixes cherry-picked from |
☐ |
Testing criteria satisfied. |
☐ |
No outstanding release-blocking issues. |
Final GA release#
Before proceeding, obtain explicit go/no-go approval from the maintainers. Do not start the final release steps until sign-off is confirmed.
All steps below are performed on the release-X.Y branch unless noted otherwise.
☐ |
Go/no-go approval obtained from maintainers. |
☐ |
Finalize
|
☐ |
Update |
☐ |
Verify all dependency pins in |
☐ |
Regenerate |
☐ |
Bump the version in |
☐ |
Commit and push tag
|
☐ |
PyPI publish approved and verified: |
☐ |
GitHub Release un-drafted and published. |
☐ |
Docs live at |
☐ |
Release announcement posted. |
Post-release#
☐ |
Merge back the changelog from |
☐ |
Verify PyPI installation works in a clean environment. |
☐ |
Verify published docs render correctly. |
Patch releases#
Patch releases continue cherry-picking fixes to the existing
release-X.Y branch. For example, 1.0.1 follows 1.0.0.
Follow the same Final GA release flow — bump version, update changelog,
tag, and push. There is no need to create a new branch or bump main.