Skip to main content

A lightweight, single-binary conda bootstrapper — powered by rattler

Project description

conda-express (cx)

A lightweight, single-binary bootstrapper for conda, powered by rattler. The cx binary is short for conda express.

cx replaces the miniconda/constructor installation pattern with a ~10 MB static binary that bootstraps a fully functional conda environment in seconds.

Quick start

# Bootstrap a conda installation (first run only, ~3–5 s)
cx bootstrap

# Use conda normally — cx delegates transparently
cx install -n myenv numpy pandas
cx create -n science python=3.12 scipy

# Activate environments using conda-spawn (no shell init needed)
cx shell myenv

On first use, cx automatically installs conda and its plugins into ~/.cx from an embedded lockfile. Subsequent invocations hand off directly to the installed conda binary with no overhead.

What gets installed

cx installs a minimal conda stack from conda-forge:

Package Role
python >= 3.12 Runtime
conda >= 25.1 Package manager
conda-rattler-solver Rust-based solver (replaces libmamba)
conda-spawn Subprocess-based environment activation
conda-pypi PyPI interoperability
conda-self Base environment self-management

The conda-libmamba-solver and its 27 exclusive native dependencies (libsolv, libarchive, libcurl, spdlog, etc.) are excluded by default, reducing the install from 113 to 86 packages.

Installation

From GitHub Releases

Download the binary for your platform from the latest release, then place it somewhere on your PATH.

From PyPI

pip install conda-express

From crates.io

cargo install conda-express

The package is published as conda-express on PyPI and crates.io.

Building from source

Requires pixi (recommended) or Rust (edition 2024).

With pixi (recommended)

pixi manages the Rust toolchain from conda-forge for reproducible builds:

git clone https://github.com/conda-incubator/conda-express.git
cd conda-express

pixi run build          # cargo build --release
pixi run test           # cargo test
pixi run lint           # fmt-check + clippy

With system Rust

git clone https://github.com/conda-incubator/conda-express.git
cd conda-express

# Build (first build solves packages at compile time — needs network)
cargo build --release

# Binary is at target/release/cx
./target/release/cx --help

The first build runs a compile-time solve via build.rs, generating a rattler-lock v6 lockfile that gets embedded into the binary. Subsequent builds reuse the cached lockfile unless pixi.toml changes.

Configuration

Package specs, channels, and exclusions live in the [tool.cx] section of pixi.toml:

[tool.cx]
channels = ["conda-forge"]
packages = [
    "python >=3.12",
    "conda >=25.1",
    "conda-rattler-solver",
    "conda-spawn",
    "conda-pypi",
    "conda-self",
]
exclude = ["conda-libmamba-solver"]

Edit this section to customize what cx installs, then rebuild.

CLI reference

cx bootstrap [OPTIONS]           Bootstrap a fresh conda installation
  --force                        Re-bootstrap even if prefix exists
  --prefix DIR                   Target directory (default: ~/.cx)
  --channel CH                   Channels (default: conda-forge)
  --package PKG                  Additional packages to install
  --exclude PKG                  Packages to exclude (default: conda-libmamba-solver)
  --no-exclude                   Disable default exclusions
  --no-lock                      Ignore embedded lockfile, do a live solve
  --lockfile PATH                Use an external lockfile instead

cx info [--prefix DIR]           Show installation info
cx shell [ENV]                   Alias for conda spawn (activate via subshell)
cx <conda-args>                  Passed through to conda

Disabled commands

cx uses conda-spawn instead of traditional shell-based activation. The following commands are intentionally disabled:

Command Instead
conda activate / deactivate cx shell myenv
conda init Add condabin to your PATH (see below)

Frozen base prefix

The ~/.cx prefix is protected with a CEP 22 frozen marker after bootstrap. This prevents accidental modification of the base environment (e.g., conda install numpy into base). Users should create named environments for their work:

cx create -n myenv numpy pandas
cx shell myenv

Updating the base installation is handled by conda self update (via conda-self).

How it works

  1. Compile time: build.rs reads [tool.cx] from pixi.toml, solves dependencies using rattler, filters excluded packages, and writes a rattler-lock v6 lockfile embedded into the binary.

  2. First run: cx parses the embedded lockfile, downloads packages from conda-forge, and installs them into the prefix. No repodata fetch or solve needed at runtime.

  3. Subsequent runs: cx detects the existing prefix and replaces its own process with the installed conda binary, passing all arguments through.

Activation model

cx ships with conda-spawn instead of traditional conda activate. There is no need to run conda init or modify shell profiles.

# Add cx to PATH (one-time setup)
export PATH="$HOME/.cx/condabin:$PATH"

# Activate an environment (spawns a subshell)
cx shell myenv

# Deactivate by exiting the subshell
exit

Lockfile format

The embedded lockfile uses the rattler-lock v6 format (same as pixi.lock). It can be:

  • Read by pixi
  • Imported by conda-lockfiles
  • Checked into version control for reproducibility auditing

License

BSD 3-Clause. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

conda_express-0.1.3.tar.gz (101.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

conda_express-0.1.3-py3-none-win_amd64.whl (8.0 MB view details)

Uploaded Python 3Windows x86-64

conda_express-0.1.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

conda_express-0.1.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

conda_express-0.1.3-py3-none-macosx_11_0_arm64.whl (7.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

conda_express-0.1.3-py3-none-macosx_10_12_x86_64.whl (7.7 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file conda_express-0.1.3.tar.gz.

File metadata

  • Download URL: conda_express-0.1.3.tar.gz
  • Upload date:
  • Size: 101.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for conda_express-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f9a33d40f8a844b61e8d72bbe53c0cdf506356f8f801d317360ca04e5f5774bc
MD5 b130d61a40f93c624ecbc55b46236a62
BLAKE2b-256 1ccd3e45299bb75b29c1173f383e072445b5d3ba8a78a629d1c7b4bd973ea651

See more details on using hashes here.

Provenance

The following attestation bundles were made for conda_express-0.1.3.tar.gz:

Publisher: release.yml on jezdez/conda-express

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file conda_express-0.1.3-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for conda_express-0.1.3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 2f18e15747f3b1eb89e07bceec881c369fe93c1c839c086a3aa5f94c12340a3c
MD5 d5369ba85f5d8e42ee426685564f1e4a
BLAKE2b-256 f1d34239f3c3d57806b621e222ea37281613562d6678644f82a94b911f4307ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for conda_express-0.1.3-py3-none-win_amd64.whl:

Publisher: release.yml on jezdez/conda-express

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file conda_express-0.1.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for conda_express-0.1.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 97952eec947ee75d8c237828de1b995517a5dd0ea17f9de246e357804c8a27fa
MD5 c82a1c4fd76324d1247ea21aa1a5f6f9
BLAKE2b-256 0bf28dcfb51cfe46cccec63c04b8242547abf899409ce4fc305b45acf76121c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for conda_express-0.1.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on jezdez/conda-express

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file conda_express-0.1.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for conda_express-0.1.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 434408f916876c071dcdecbb6dbe0dcb0ed175e8c7a438a52f2bb270a1876d33
MD5 fff3b2083e19f1c77961eaa9b3958125
BLAKE2b-256 ec9ad72bb60d3f1a7f80be2409b83fd8a6502dd651ebb9e6ea52588b80a3915d

See more details on using hashes here.

Provenance

The following attestation bundles were made for conda_express-0.1.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on jezdez/conda-express

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file conda_express-0.1.3-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for conda_express-0.1.3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 74d49f5a7bd6ead4f21e31ec9a34b1f134912546e4a5808588a6183f0fa856c7
MD5 9e6066af3cf8f91396a6f76ebbef1722
BLAKE2b-256 99e5376de1ebfdaf1a5a66a143845e16a98b0a7119ba1307cf151bfbfa6b0925

See more details on using hashes here.

Provenance

The following attestation bundles were made for conda_express-0.1.3-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on jezdez/conda-express

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file conda_express-0.1.3-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for conda_express-0.1.3-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 88e291fa7a9f2de2e2b53b3ea7f292221df48e254ae07ff759e74b2e3cf4ea2c
MD5 576fb163e3990c5c138e6a03d814cbec
BLAKE2b-256 ed24ac616e91e9b6ce497dd2762e9757be991f7016b4724556193ef6ef67bd52

See more details on using hashes here.

Provenance

The following attestation bundles were made for conda_express-0.1.3-py3-none-macosx_10_12_x86_64.whl:

Publisher: release.yml on jezdez/conda-express

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page