Changelog#
26.5.2.post3 (2026-06-15)#
Runtime#
Add
conda-exec >=0.3.0to the default runtime package set.Raise the default runtime package floors to
conda-completion >=0.3.0andconda-workspaces >=0.7.0.
26.5.2.post2 (2026-06-11)#
Distribution#
Build CI and release artifacts with conda-ship
0.3.0.Document conda-ship
0.3.0runtime metadata, completion, and Windows ARM64 support boundaries.
26.5.2.post1 (2026-06-03)#
Distribution#
Rebuild the PyPI wheels with single
manylinux2014platform tags for Linux, so PyPI accepts the linux-64 and linux-aarch64 wheel uploads.
26.5.2 (2026-06-03)#
Versioning#
conda-express now follows the conda runtime version. The
26.5.2release bootstraps conda26.5.2.conda-express-only rebuilds should use post-release versions such as
26.5.2.post1.
Runtime#
Pin the runtime conda package exactly to
26.5.2across linux-64, linux-aarch64, osx-64, osx-arm64, and win-64.Keep the managed runtime prefix at
~/.conda/expressand keep the base prefix protected with the CEP 22 frozen marker after bootstrap.Include
conda-completion >=0.2.0andconda-workspaces >=0.5.0in the default runtime package set, alongsideconda-rattler-solver,conda-spawn,conda-pypi,conda-self, andconda-global.
Distribution#
Build the published
cxandcxzruntime binaries with conda-ship instead of the old repository-local Rust builder.Build with conda-ship
0.2.1and derive the generated runtime version from project metadata, so release tags drive both the Python package version and the stamped binary version.Keep conda-express focused on the
cx/cxzdistribution. Custom runtime builds now belong in conda-ship.Continue publishing GitHub Release artifacts, installer scripts, Docker images, the Homebrew tap formula, and PyPI wheels.
Stop publishing new crates.io releases.
Attest release artifacts before publishing the immutable GitHub Release.
Upgrade Notes#
Early
cxreleases used~/.cx; current releases use~/.conda/express. Upgrading the binary does not migrate that old prefix. Keep~/.cxuntil you have recreated or archived any environments you still need, then remove it manually.If an old Cargo-installed
cxis still earlier onPATH, remove it and installcxthrough one of the current distribution channels.
Installer Scripts#
Pass
CX_BUNDLEandCX_OFFLINEthrough tocx bootstrapduring installer bootstrapping, so scripted offline installs use the documented bundle and network settings.
Documentation#
Rework the docs around conda-express as a distribution built with conda-ship, with conda-ship linked as the tool for custom runtimes.
Add focused guides for installer-style conda distributions, offline and air-gapped use, release artifact verification, and upgrading from early
cxreleases.
0.6.0 (2026-05-06)#
Features#
Slim
build.rs— Replace the 440-linebuild.rswith a small script that copies pre-generatedcx.lockandpayload.tar.zstto$OUT_DIR, reducing duplicate build-dependency compilation.cx-buildcrate — Add an internal build tool withprepare,payload, andconfiguresubcommands for derivingcx.lock, downloading package archives, and configuring custom builds.cx-envPixi feature — Define the bootstrap package set as a Pixi environment sopixi locksolves dependencies instead ofbuild.rs.conda-global— Added to the default package set alongside existing conda plugins.conda-workspaces >=0.4.0— Added to the default package set with version pin.sccache — Local and CI build caching via
RUSTC_WRAPPER=sccache.
Fixes#
Stop self-deleting the
cxbinary oncx uninstall— now prints a hint for the user to remove it manually.Clean subenvironment artifacts (envs, pkgs cache) on uninstall.
Precompile Python bytecode after bootstrap to avoid first-run
.pyccompilation delays.Remove unused
default_channelsfrom generated.condarc.Pin
reqwest-middlewareandsha2versions to match rattler’s transitive requirements.Fix
getrandom0.3 usage in cx-wasm to match ahash’s transitive dependency.Fix JupyterLite
yarn.lockTypeScript compatibility patch hash.
Build#
Move exclude filtering from runtime to build time; the
cxbinary trusts its pre-filteredcx.lock.Remove
--excludeand--no-excludefromcx bootstrap.Update
action.ymlto use thecx-build configure,pixi lock,cx-build prepare, andcargo buildpipeline.Rename the
xtaskcrate tocx-build.
Docs#
Updated
DESIGN.md,README.md,docs/configuration.md, anddocs/index.mdto reflectcx-buildrename,conda-globaladdition, and updated version pins.Updated stale size and package count figures across all docs: lockfile 39 KB → ~130 KB, package counts 86/113 → ~95/~125, py-rattler wheel sizes ~28-31 MB → 13-33 MB.
Embedded remaining demo GIFs in docs and README.
Added VHS demos for conda-workspaces, quickstart, status, and passthrough.
Documented conda-workspaces in features, README, and index pages.
CI#
Allow Codecov upload to fail on PRs.
Add
CHANGELOG.mdandPLAN.mdto docs CI paths filter; drop release trigger from docs workflow.Only deploy GitHub Pages from
mainbranch.Add Dependabot configuration for GitHub Actions, Cargo, npm, and pip.
Fix
CX_EMBED_PAYLOADenv var for Windows PowerShell compatibility.Scope
cargo publishto theconda-expresscrate only.Make Trivy CVE scan non-blocking for upstream base image vulnerabilities.
Enable sccache GitHub Actions cache backend for persistent build caching.
Dependencies#
Bump rattler ecosystem and other Rust dependencies.
Bump npm dependencies in cx-jupyterlite.
Bump GitHub Actions to latest versions.
0.5.3 (2026-03-31)#
Fixes#
Add
channels: [conda-forge]to the generated.condarc. conda 25.x requireschannelsto be set explicitly —default_channelsalone is not sufficient, causingNoChannelsConfiguredErroron commands likeconda create.
Docs#
Fix
features.mdASCII diagram: payload size was unlabeled, cx binary label was duplicated in the cxz column.Add air-gapped/cxz card to
index.mdlanding page and mention cxz in the intro.Add cxz context to
background.mdrationale sections.Add cxz binaries to
quickstart.mdrelease download table.Add cxz tip to
installer.mdoffline options.
0.5.2 (2026-03-30)#
Fixes#
Fix file ownership in
Dockerfile.cxz: use--chown=nonroot:nonrootwhen copying the bootstrapped prefix so the nonroot user in the distroless image can readconda-meta/files.
0.5.1 (2026-03-30)#
Fixes#
Allow
cxzbinaries throughdocker/.dockerignoreso thedocker-cxz-imagesrelease job can copy them into the build context.
Docs#
Update binary size estimates across all documentation to match actual 0.5.0 release artifacts:
cx7-11 MB (platform-dependent),cxz50-95 MB, payload increase 40-85 MB.
0.5.0 (2026-03-30)#
Features#
Offline bootstrap — New
--payload DIRand--offlineflags forcx bootstrapenable fully air-gapped installations from pre-downloaded.conda/.tar.bz2archives. Also available viaCX_PAYLOADandCX_OFFLINEenvironment variables for use in native installer post-install scripts (macOS PKG, Windows MSI) and CI pipelines.Self-contained binary (
cxz) — Build withCX_EMBED_PAYLOAD=1to bundle all locked package archives directly into the binary. One 50-95 MB file (varies by platform), zero network access — drop it anywhere and runcxz bootstrap. Auto-detects the embedded payload at runtime; all othercxflags and subcommands work identically.Docker cxz image — Pre-bootstrapped multi-arch Docker image built on
gcr.io/distroless/cc-debian12:nonroot, published alongside the existingcximage on GHCR.GitHub Action
embed-payloadinput — Buildcxzbinaries via the Action or reusable workflow withembed-payload: "true".Release profile optimizations —
lto = "fat",codegen-units = 1,opt-level = "z"reduce thecxbinary from ~17 MB to 7-11 MB (varies by platform).
Improvements#
SHA256 verification of all packages downloaded during
cxzbuild, with automatic re-download on checksum mismatch.Embedded payload temp directory is cleaned up after extraction.
New
lockfile_records()helper deduplicates lockfile parsing acrossfrom_lockfile,from_lockfile_with_payload, andfrom_lockfile_offline.cx statusshowscxzas the binary name and embedded payload size when applicable.Use idiomatic
&Pathinstead of&PathBufin build script function signatures.
Tests#
Parameterized
CX_OFFLINEenv var parsing tests (7 truthy/falsy cases).CX_PAYLOADenv var forwarding test.cx statusbinary name and version output test.--offline --no-lockrejection and bad--payloaddirectory tests.Online-gated integration tests for full offline and payload bootstrap workflows.
Docs#
CLI reference for
--payload,--offline, andcxz bootstrapexamples.Configuration reference for
CX_PAYLOAD,CX_OFFLINE, andCX_EMBED_PAYLOAD.Features page with
cxzsection and ASCII architecture diagram.Custom builds guide for building
cxzlocally, via GitHub Action, and via reusable workflow.Docker quickstart tab for the pre-bootstrapped
cxzimage.
CI#
cxzbuild and smoke test in CI (Linux x86_64).Release workflow:
cxzbuild matrix (Linux, macOS, Windows), pre-bootstrapped Docker image build and push.
0.4.1 (2026-03-30)#
Fixes#
cx create / cx env create — Avoid piping conda stdout when stdin is a TTY and
-y/--yesis not set. Conda prints confirmation prompts to stdout without a trailing newline, then reads stdin; line-oriented output filtering blocked the prompt and made input appear swallowed. Activation-hint filtering still runs for non-interactive use (-y/--yes) or when stdin is not a terminal.Add unix integration test reproducing conda’s stdout/stdin prompt pattern (
BufRead::read_lineandlines()).
Tests#
Uninstall integration tests — Use explicit
--prefixfor the interactive uninstall test on Windows (dirs6 resolves home via known-folder profile, notHOME/USERPROFILE). Parametrize status vs uninstall missing-prefix cases with rstest; add a unix-only test for default prefix whenHOMEpoints at a synthetic layout.
0.4.0 (2026-03-31)#
The browser/WebAssembly features from this historical release now live in
conda-wasm. See the
conda-wasm changelog for the moved cx-wasm, conda-emscripten,
cx-jupyterlite, cx-wasm-kernel, and JupyterLite demo history.
Features#
Docker — minimal multi-arch images on GHCR for
cxin containers.
0.3.1 (2026-03-06)#
Fixes#
Fix crates.io publish —
build.rswrites lockfiles during compilation, whichcargo publish --verifyrejects. Skip verification since builds are already validated by CI.Fix
build.ymlreusable workflow validation error on push events — pin action reference to@maininstead of dynamicinputs.refin theuses:field.
0.3.0 (2026-03-06)#
No changelog entry was added for this release.
0.2.0#
Features#
Add
cx uninstallsubcommand — removes the conda prefix, all named environments, the cx binary, and PATH entries from shell profiles. Requires interactive confirmation (or--yesto skip).Add reusable GitHub Action (
action.yml) for building custom cx binaries with configurable packages. Useuses: jezdez/conda-express@mainwithpackages,channels, andexcludeinputs.Add reusable workflow (
.github/workflows/build.yml) that builds custom cx binaries for all 5 platforms viaworkflow_call.Support build-time environment variable overrides (
CX_PACKAGES,CX_CHANNELS,CX_EXCLUDE) inbuild.rsfor custom builds without editingpixi.toml.Add Homebrew formula (
Formula/cx.rb) as a same-repo tap. Install withbrew tap jezdez/conda-express https://github.com/jezdez/conda-expressfollowed bybrew install jezdez/conda-express/cx.Homebrew is now the recommended installation method for macOS and Linux; shell scripts are repositioned as an alternative for CI and Windows.
Release workflow automatically updates the Homebrew formula with new version and checksums on each tag push.
Fixes#
Fix Homebrew formula update in release workflow — shell variables were not expanded inside the single-quoted Python heredoc, resulting in placeholder checksums.
Documentation#
Restructure docs following the Diataxis framework (tutorials, how-to guides, reference, explanation).
Add GitHub Action reference page (
docs/reference/github-action.md).Add custom builds how-to guide (
docs/guides/custom-builds.md).Add sphinx-design enhancements: badges on Action inputs, dropdowns for CLI output examples, octicon icons on landing page cards.
Consolidate installation tabs (merge PyPI and crates.io into one tab).
0.1.7#
Internal#
Fix release workflow to fall back to
gh release uploadwhen release already exists
0.1.6#
Fixes#
Fix PyPI wheel versioning — use dynamic version from
Cargo.tomlinstead of a hardcoded version inpyproject.tomlRemove Windows ARM64 (
aarch64-pc-windows-msvc) target (conda not available on conda-forge for win-arm64)
0.1.5#
Features#
Use clap’s built-in help system for
cx helpandcx --helpinstead of hand-crafted output —cx help bootstrapnow works automaticallyAdd
cx shellas a proper clap subcommand (alias forconda spawn)Replace misleading
conda activatehints aftercx create/cx env createwithcx shellguidance via output filteringRename
cx infotocx statussocx infopasses through toconda infoAdd
get-cx.sh(macOS/Linux) andget-cx.ps1(Windows) installer scripts served from GitHub Pages
Documentation#
Add installer reference page (
docs/reference/installer.md)Improve GitHub Releases install instructions with platform tables and one-liner commands
Add installer script as the recommended installation method
Fix binary size references (~10 MB → ~17 MB)
Fix copyright year to 2026
Correct GitHub URLs and workflow references throughout
Internal#
Extract
ensure_bootstrapped()helper to deduplicate auto-bootstrap logicMove installer scripts to
scripts/directoryServe installer scripts from GitHub Pages instead of raw.githubusercontent
Move changelog to repo root with symlink into docs
Add
rust-cacheto wheel and crates.io publish jobs
0.1.3#
Changes#
Consolidated release, PyPI, and crates.io publishing into a single workflow triggered on tag push
Fixed GitHub Release asset upload (immutable releases compatibility)
Fixed manylinux compliance for Linux PyPI wheels
Fixed Windows checksum generation (
sha256suminstead ofshasum)
0.1.2#
First published release.
Features#
Single-binary conda bootstrapper powered by rattler
Compile-time lockfile (rattler-lock v6) for deterministic bootstraps
Post-solve exclusion of
conda-libmamba-solverand 27 native dependenciesconda-rattler-solver as default solver
conda-spawn activation model with
cx shellaliasDisabled
activate,deactivate, andinitcommandsAuto-bootstrap on first conda command
CEP 22 frozen base prefix protection
PyPI distribution via maturin platform wheels (
pip install conda-express)crates.io distribution (
cargo install conda-express)Trusted publishing (OIDC) for both PyPI and crates.io
Sphinx documentation with conda-sphinx-theme, published to GitHub Pages
CI/CD#
Multi-platform builds: linux-x64, linux-aarch64, macos-x64, macos-arm64, windows-x64
All GitHub Actions pinned to commit SHAs
Swatinem/rust-cache for faster CI builds
Checked-in
cx.lockeliminates network solve in CIThin LTO and parallel codegen for faster release builds
GitHub Pages deployment for documentation