| name | releasing |
| description | Release and version the project. Only invoke manually. |
| disable-model-invocation | true |
Releasing
Version Scheme
Published desktop, CLI, daemon, and runtimed Python artifacts share the same
base version. Python release jobs stamp the wheel version from the Rust release
source during the workflow, after cargo xtask bump has updated the checked-in
version files.
| Artifact | Version source |
|---|
| nteract desktop app | crates/notebook/tauri.conf.json |
runt CLI | crates/runt/Cargo.toml |
runtimed daemon | crates/runtimed/Cargo.toml |
runtimed Python package | python/runtimed/pyproject.toml, then stamped from crates/runt/Cargo.toml during release |
nteract Python package | python/nteract/pyproject.toml |
Internal Compatibility Markers
Two independent version numbers (incrementing integers, not semver):
- Protocol version (
PROTOCOL_VERSION in crates/notebook-protocol/src/connection/handshake.rs, re-exported by connection.rs) — Wire compatibility. Validated by magic bytes preamble at connection time.
- Schema version (
SCHEMA_VERSION in notebook-doc/src/lib.rs) — Automerge document compatibility. Stored in doc root.
These evolve independently from each other and from the artifact version.
Bumping Versions
cargo xtask bump patch
This updates all versioned artifacts in lockstep (Rust crates, Python packages,
frontend packages, plugin manifests, Tauri config) and runs cargo update -w to
refresh Cargo.lock. See crates/xtask/src/bump.rs for the complete target
list.
Commit the version bump, then tag to trigger the release.
Release Types
Stable Release
git tag v2.1.0-stable.202607020900
git push origin v2.1.0-stable.202607020900
Triggers release-stable.yml which:
- Builds desktop app (macOS, Windows, Linux)
- Builds
runt CLI binaries
- Builds Python wheels stamped to the base version from
crates/runt/Cargo.toml
- Publishes
runtimed wheels to PyPI (stable)
- Creates GitHub Release with all artifacts
- Updates
stable-latest Tauri updater channel
- Posts to Discord
Nightly Release
Runs automatically at 9am UTC daily via release-nightly.yml, or manually via workflow dispatch.
- Desktop version gets
-nightly.{timestamp} suffix
- Python wheels get alpha stamp:
2.0.1a202507150900 (PEP 440)
- App branded "nteract Nightly" with separate bundle ID
- GitHub Release marked as prerelease
- CLI binary named
runt-nightly
Install nightly Python: pip install runtimed --pre
Python Release Policy
runtimed Python wheels ship from the stable and nightly release workflows.
Nightly builds stamp the next patch alpha version (PEP 440), and stable builds
stamp the base version from crates/runt/Cargo.toml. cargo xtask bump still
updates python/runtimed/pyproject.toml; workflow stamping is a guardrail so a
stale pyproject cannot publish the wrong wheel version.
Tag Reference
| Tag pattern | Workflow | What it publishes |
|---|
v* | release-stable.yml | Desktop app + CLI + runtimed Python (stable) |
| (cron) | release-nightly.yml | Desktop app + CLI + runtimed Python (pre-release) |
Protocol Version Change Procedure
- Bump
PROTOCOL_VERSION in crates/notebook-protocol/src/connection/handshake.rs
- Update the
PROTOCOL_V* string constant if the version string changes
- Update
crates/notebook-wire/AGENTS.md
- Decide version bump type based on user impact
Magic bytes preamble rejects mismatched protocol versions at wire level, before JSON parsing.
Schema Version Change Procedure
- Bump
SCHEMA_VERSION in crates/notebook-doc/src/lib.rs
- Add migration logic in daemon's doc loading path (detect old schema, convert in-place)
- Update document schema comment in
notebook-doc/src/lib.rs
Schema changes don't require a protocol bump — wire format for sync frames stays the same.
CI Internals
release-common.yml accepts inputs:
github_release_prerelease: true — applies PEP 440 alpha stamp to Python version
github_release_prerelease: false — stamps Python version from crates/runt/Cargo.toml
Python wheels are always built (macOS arm64, macOS x64, Linux x64, Windows x64) and published.
Desktop version: {runt version}-{suffix}.{timestamp} stamped into tauri.conf.json and Cargo.toml at build time (not committed).
Trusted Publishing
PyPI uses OIDC trusted publishing (no API tokens). GitHub Actions workflow identity registered as trusted publisher on PyPI for runtimed package.
Pre-Release Checklist