Changelog#
All notable changes to conda-ship are documented here.
0.7.0 - 2026-07-24#
Added#
Added
v1/record-installationto record direct or external executable ownership, the installation kind, and the stable executable path in the existing runtime metadata file.
Changed#
Installed executable ownership is now independent of the stamped update source. One direct-capable runtime can be delivered by a standalone installer, Homebrew, a Python package, or another external manager.
New builds stamp only the update channel, package, and build number.
ownershipandinstructionare rejected as build settings. An installer or delivery integration records them throughv1/record-installation. Runtimes still read those fields from existing 0.6.x artifacts.External package-manager replacement preserves the recorded installation kind and verifies the replacement against the original runtime identity and update source.
Fixed#
Updated rattler so Linux builds use
quick-xml0.41, addressing RUSTSEC-2026-0194 and RUSTSEC-2026-0195.
0.6.4 - 2026-07-23#
Fixed#
Added native platform and architecture metadata to executable update packages so Anaconda.org receives their complete upload identity.
0.6.3 - 2026-07-23#
Fixed#
Fixed deferred Windows executable replacement when helper output is captured by preventing the update worker from inheriting the helper’s open handles.
0.6.2 - 2026-07-23#
Fixed#
Fixed verification of the released GitHub Action by configuring its required conda delegate.
0.6.1 - 2026-07-23#
Fixed#
Fixed verification of the released GitHub Action by providing the runtime identity required by its smoke build.
0.6.0 - 2026-07-23#
Added#
Added optional
[tool.conda-ship.update]metadata for runtimes that discover executable releases through conda channel repodata. Online and embedded artifacts can select direct or external executable ownership.Added
cs package-updateto wrap one finalized, stamped native executable in a dependency-free.condapackage. The GitHub Action now exposes the downloaded builder ascs-pathfor this packaging step.Added staged executable updates with package and stamp validation, cached offline resolution, Unix replacement, Windows deferred replacement, interrupted-update recovery, and reconciliation after external replacement.
Added a version-one environment-driven helper so downstream transaction coordinators can hold
.RUNTIME_NAME.update.lockacross check, stage, an inner transaction, and apply. Successful helper calls return one JSON object.Added
CONDA_SHIP_PREFIXas a common managed-prefix override for generated runtimes and update coordinators.
Changed#
A runtime named
condano longer interprets an activatedCONDA_PREFIXas its managed installation path. UseCONDA_SHIP_PREFIXfor an explicit override.Runtimes without update configuration retain their existing behavior. Update configuration does not restrict the configured delegate executable.
Fleet launcher ownership remains with Fleet callers and does not use the stamped executable update path automatically.
0.5.0 - 2026-07-21#
Added#
Added
condarc-fileandfreeze-basebuild settings. Both are disabled by default and let downstream distributions choose whether bootstrap writes a.condarcor CEP 22 frozen marker.Added Constructor-compatible
.installer.infoprefix metadata when a build configuresinstaller.Added
cs run --install-pathand a runtime-specific_PREFIXenvironment variable for choosing a managed prefix during local runs or deployment.Added the opt-in
conda_ship::fleetRust API behind the non-defaultfleetCargo feature. It installs and runs multiple locked prefixes without changing the stamped binary-template workflow.
Changed#
The selected source environment now defines the complete runtime package set. conda-ship no longer requires
conda,conda-rattler-solver, orconda-spawn. It only requires the configured delegate executable.A generated runtime now bootstraps automatically on first invocation and passes every argument to its configured delegate unchanged. The runtime no longer reserves private
bootstrap,status,shell, oruninstallcommands.Delegate execution no longer sets conda activation variables or rewrites delegate output. Prefix executables remain available through
PATH.Bootstrap now uses an adjacent process lock and an internal ownership marker. A later invocation can recover an interrupted bootstrap by reinstalling the complete locked package set without deleting unrelated prefix contents.
Migration#
Include the delegate and every optional command in the selected source environment. Conda-based distributions that want
shellcan include a conda-spawn version with itsshellalias. Include conda-self when the distribution should expose its reset or self-management commands.Replace use of the removed private runtime commands with the delegate’s commands. For a conda delegate, use
RUNTIME infofor runtime information and the applicable conda or conda-self command for management operations.Set
condarc-fileorfreeze-base = trueexplicitly if a distribution wants the configuration files that earlier conda-ship versions wrote by default.
0.4.0 - 2026-06-16#
Added#
Added
[tool.conda-ship].artifact-name,cs build --artifact-name,cs run --artifact-name, and the GitHub Actionartifact-nameinput for downstream distributions that want staged artifacts to use a distinct executable name for any layout.
Changed#
Renamed
[tool.conda-ship].runtime,cs build --runtime,cs run --runtime, and the GitHub Actionruntimeinput toruntime-name.Embedded builds no longer append
zto the runtime name automatically.artifact-layout = "embedded"now stages the configuredruntime-nameunless an explicit artifact name is provided.Renamed public configuration keys, CLI flags, and GitHub Action inputs for a clearer flat naming scheme.
Migration#
Inside
[tool.conda-ship], renameruntime = "demo"toruntime-name = "demo". Replace--runtime demowith--runtime-name demo, and useruntime-name: demoin GitHub Actions.Update the remaining renamed fields:
Old
New
delegate = "conda"delegate-executable = "conda"layout = "embedded"artifact-layout = "embedded"exclude = ["conda-libmamba-solver"]exclude-packages = ["conda-libmamba-solver"]install-method = "homebrew"installer = "homebrew"cs build --delegate condacs build --delegate-executable condacs build --layout embeddedcs build --artifact-layout embeddedcs build --install-method homebrewcs build --installer homebrewGitHub Action
delegate: condadelegate-executable: condaGitHub Action
layout: embeddedartifact-layout: embeddedGitHub Action
install-method: homebrewinstaller: homebrewIf you currently rely on the old
runtime = "demo"setting producingdist/demozfor embedded builds, setartifact-name = "demoz"in[tool.conda-ship], passcs build --artifact-name demoz, or set the GitHub Actionartifact-name: demozinput.If you do not need a distinct embedded executable name, no additional artifact-name setting is needed. Update release scripts and artifact upload patterns to use
demoinstead ofdemoz.
0.3.2 - 2026-06-15#
Fixed#
Set an explicit
conda-ship/<version>user agent for package archive downloads. This fixes 403 responses fromrepo.anaconda.comduring embedded bundle creation and online runtime bootstrap.
0.3.1 - 2026-06-15#
Added#
Added a
conda-ship-versionGitHub Action input so release workflows can pin the action source by full commit SHA while selecting the conda-ship release assets to download. Exact release-tag usage remains supported for backwards compatibility.
0.3.0 - 2026-06-10#
Added#
Added Windows ARM64 builder release assets and PyPI wheels for
aarch64-pc-windows-msvc. Full Windows ARM64 runtime bootstrap coverage remains gated by the conda package ecosystem.Generated runtimes now write constructor-compatible
conda-meta/historyandconda-meta/initial-state.explicit.txtduring bootstrap. Conda tooling can recognize the managed prefix as an environment, and runtimes that includeconda-selfcan reset back to the shipped package set.Runtime delegate environments now set
CONDA_COMPLETION_COMMAND_NAMEto the stamped runtime executable name for shell completion integrations.
Development#
CI linting now runs through
prek, with test, documentation, package, and platform canary jobs split so common checks finish sooner.
Fixed#
Fixed conda-workspaces
conda.lockparsing for lockfiles that use theversion: 1schema.
0.2.1 - 2026-06-03#
Fixed#
Fixed the GitHub Action path for
runtime-version = { from = "project-metadata" }. The action now detects when the Rustcsbinary needs project metadata resolution, sets up Python with the officialactions/setup-pythonaction, resolves the downstream version throughpypa/build, and retries the build with an explicit--runtime-version.Fixed the Windows runtime template release build warning path so release binary builds can deny compiler warnings across all targets.
0.2.0 - 2026-06-03#
Added#
Added standards-compliant dynamic Python project version resolution for runtime stamping. Projects can set
runtime-version = { from = "project-metadata" }in[tool.conda-ship], and the Pythonconda shipadapter resolves the concrete version through the PEP 517prepare_metadata_for_build_wheelhook before invokingcs.Added a quickstart tutorial and a compact README quickstart for the shortest local path from a solved conda-workspaces environment to a staged runtime.
Added terminal demo recordings for quickstart,
cs inspect,cs build --dry-run, staged artifact verification, and generated runtime CLI behavior. The recordings are embedded in the README and the relevant docs pages.
Changed#
Generated runtime metadata now requires a downstream runtime version. Builds use
[tool.conda-ship].runtime-version, static[project].version, an explicit--runtime-versionor GitHub Action input, or the Python adapter’s project metadata resolution. conda-ship no longer falls back to its own package version for generated runtimes.Documentation now describes the PyPI-first install flow, runtime version requirements, local preflight commands, artifact verification, and generated runtime CLI behavior in more detail.
Fixed#
Fixed builder output handling for closed stdout pipes so commands such as
cs inspect | heador filtered demo commands do not report Rust panics when the reader exits early.
0.1.0 - 2026-06-01#
Initial release of conda-ship, a generic builder for producing ready-to-run
conda runtimes from solved conda environments.
Added#
The
csbuilder CLI.cs inspectchecks the selected manifest, lockfile, source environment, exclusions, platforms, and package set without writing files.cs buildstages runtime artifacts.cs build --dry-runvalidates planned artifact work before downloading, stamping, or writing files.cs runbuilds a runtime and immediately runs it for local smoke tests.
The generic
cs-templateruntime template used to produce downstream runtime binaries.Platform PyPI wheels that install
cs,cs-template, and the Python adapter together.A Python adapter that exposes
conda shipas a conda-style shortcut forcs, including structured builder diagnostics so common failures can be reported predictably through conda.Build input from committed source manifests and lockfiles:
conda.tomlwithconda.lockpyproject.tomlwith[tool.conda]andconda.lockpixi.tomlwithpixi.lockpyproject.tomlwith[tool.pixi]andpixi.lock
[tool.conda-ship]build policy for generated runtimes, including the runtime name, runtime version, delegate executable, source environment, artifact layout, package exclusions, install scheme, install name, install method, and documentation URL.Three artifact layouts:
online, for small runtime artifacts that download packages during bootstrapexternal, for a runtime plus a separate compressed package bundleembedded, for a larger single runtime that carries the compressed package bundle inside the binary
Generated runtime commands for
bootstrap,status,shell, anduninstall, plus pass-through support to the configured delegate executable.Generated runtime version output, so downstream binaries such as
cxcan report their own distribution version instead of the generic conda-ship builder version.Runtime install ownership metadata so generated runtimes can protect managed prefixes from accidental use or removal by the wrong runtime.
Install schemes for
~/.conda/INSTALL_NAMEand platform user data directories, plus a runtime--pathoverride for local testing and advanced install paths.Staged runtime metadata files:
.runtime.lock.packages.txt.info.json.sha256optional
.bundle.tar.zstforexternalbuilds
Package exclusion after source-lock resolution, so downstream distributions can prune packages from a solved environment before building a runtime.
Validation that the selected runtime environment contains the packages required by generated runtimes:
conda,conda-rattler-solver, andconda-spawn.A composite GitHub Action for downstream release jobs. The action uses committed manifest and lockfile input, verifies downloaded conda-ship release assets, runs
cs build --dry-run, and exposesdist-pathfor publishing the complete generated artifact directory. Release jobs can override runtime metadata such as runtime name, runtime version, delegate, layout, install scheme, install name, install method, and documentation URL from workflow inputs or matrices.Tagged release assets for
cs,cs-template, andSHA256SUMS.
Security And Provenance#
Bundle builds require SHA256 package metadata.
Downloaded, cached, external, embedded, and offline package archives are verified before they are staged or installed.
Runtime templates refuse to run directly;
cs buildmust stamp a template before it becomes a downstream runtime.Runtime names, runtime versions, delegates, install names, install methods, target labels, and documentation URLs are validated before they are stamped into runtime binaries or artifact names.
The GitHub Action verifies artifact attestations for downloaded
cs,cs-template, andSHA256SUMSassets before running them.The
conda shipadapter only runs thecsexecutable installed in the same Python environment, unlessCONDA_SHIP_EXECUTABLEexplicitly selects another executable.Tagged GitHub releases publish immutable asset sets. If a release is wrong, publish a new version instead of replacing files under an existing tag.
GitHub workflows and the composite action use pinned actions, minimal permissions, explicit artifact verification, and no shell
evalfor user input.Release workflows use unprefixed version tags such as
0.1.0.Release checks include Rust advisory, license, dependency-ban, and source policy checks.
Notes#
This is an alpha 0.1.0 release. The project is ready for early downstream distribution work, but configuration details and artifact metadata may still evolve before 1.0.
conda-shipis not itself a conda distribution. Downstream projects choose package sets, channels, runtime names, delegates, install methods, release channels, signing policy, and user documentation.The GitHub Action should be used from a release tag. Branch refs do not have matching
csandcs-templaterelease assets. Use tags such as0.1.0, without a leadingv.Downstream release workflows should sign or attest the full
dist-pathoutput aftercs build.