Changelog#
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)#
Features#
cx-wasm — WebAssembly build of the rattler solver and package extractor for use in the browser (
crates/cx-wasm/).conda-emscripten — conda plugin for Emscripten:
CxWasmSolver(CONDA_SOLVER=cx-wasm), WASM extraction,%cx/%condaIPython magics, MEMFS-oriented patches (downloads, subprocess no-op, extractor), shared-library loading for C extensions after install.cx-jupyterlite — JupyterLite federated extension rewrites bare
condacell commands so the kernel magics handle them.cx-wasm-kernel — conda recipe packaging WASM artifacts and
cx_wasm_bridge(async repodata shard prefetch at kernel startup for fast solves).JupyterLite demo (
lite/) — static site with xeus-python; demo notebooks underlite/files/notebooks/demos/; GitHub Pages deploy at/demo/.Async shard prefetch — two-phase fetch (parallel
fetch()at startup) + sync solve; large solve-time improvement when using sharded repodata (CEP-16).Docker — minimal multi-arch images on GHCR for
cxin containers.Docs — browser/WASM guide, Diátaxis-aligned docs updates, DESIGN/PLAN refresh for WASM; Background & rationale page; Implementation plan and changelog included in Sphinx; GitHub issue templates (
type::feature, epic, bug).
Fixes#
cx-wasm / conda-emscripten: cross-channel transitive dependency resolution, pyjs coercion, repodata URL derivation, session-level shard caching, and related install-path fixes.
Demo notebooks: WASM-friendly examples (e.g.
lz4,np.linalg.eigh), runtimeconda installwhere appropriate, scipy in kernel env.
Notes#
Default embedded stack still uses conda-rattler-solver and excludes conda-libmamba-solver; lockfile updated in step with conda-forge pins (e.g. conda-rattler-solver / py-rattler bumps as recorded in commits).
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