Design#
conda-express is the opinionated native conda distribution that ships the
cx binary and its compressed-bundle sibling, cxz.
The reusable builder and browser-specific projects now live elsewhere:
conda-ship: generic build system for ready-to-run conda bootstrap binariesconda-wasm: browser, WebAssembly, Emscripten, and JupyterLite pipeline
This repository keeps the distribution policy for cx: the package set,
default prefix behavior, activation policy, release artifacts, and user-facing
documentation.
Runtime Model#
cx is a single native Rust binary built by conda-ship. It embeds:
a runtime lock derived from the committed source-environment lock
build-time metadata from the conda-express distribution defaults
optionally, a compressed package bundle for
cxz
On the first conda command, cx installs conda into the target prefix, writes
prefix metadata, configures the selected solver and plugins, freezes the base
prefix, and delegates the original arguments. Later invocations delegate
directly to the installed conda executable.
Distribution Policy#
conda-express intentionally keeps opinions that do not belong in conda-ship:
binary names:
cxandcxzdefault prefix:
~/.conda/expressdefault conda channel:
conda-forgedefault package set: conda, conda-rattler-solver, conda-spawn, and selected conda ecosystem plugins
frozen base prefix behavior
cx spawnas the conda-spawn based activation commanduser-facing install methods such as Homebrew, shell scripts, Docker, PyPI, and GitHub Releases
PyPI wheels consume release artifacts built with conda-ship; they do not rebuild or vendor the runtime source in this repository.
Build Flow#
The distribution flow backed by conda-ship is:
conda-expresssupplies distribution defaults: theruntimesource environment, exclusions, artifact names, release policy, and downstream packaging.CI, release, and release-prep workflows invoke the pinned conda-ship action.
conda-ship owns the lock, bundle, build, inspect, and artifact metadata steps.
CI and release jobs build
cxandcxzby invoking conda-ship rather than the former in-repo builder path.
This repository does not carry the generic runtime or builder source. Changes to that implementation belong in conda-ship.
Bootstrap Flow#
When the managed prefix is absent, the runtime automatically:
Determines the target prefix from its stamped policy and
CX_PREFIX.Validates the stamped lock and the
CX_BUNDLEandCX_OFFLINEcontrols.Uses the stamped runtime lock.
Installs packages through rattler using locked package records.
Pre-populates the package cache from an external or embedded bundle when requested.
Writes runtime ownership metadata (for
cx,.cx.json) and.condarc.Writes the CEP 22
conda-meta/frozenmarker for the base prefix.
It then runs the installed conda executable with the original arguments.
Activation#
conda-express keeps activation as distribution behavior, not builder
behavior. The default user workflow is:
cx spawn myenv
That command delegates to conda-spawn and avoids shell-profile initialization. Other conda commands pass through to the installed conda executable after bootstrap.
Repository Boundaries#
This repo should not contain:
WebAssembly crates
Emscripten conda patches
JupyterLite extensions or demo sites
generic builder product naming
Constructor-style
.sh,.pkg, or.msioutput generation
Those belong in conda-wasm, conda-ship, or downstream distribution channels.