conda-workspaces#
Project-scoped multi-environment workspaces and task runner for conda, with pixi manifest compatibility.
Define environments, features, dependencies, and tasks in a single manifest.
conda-workspaces reads conda.toml, pixi.toml, or pyproject.toml and
delegates solving and installation to conda — no extra solver, no new
package manager, just workspaces and tasks on top of the tools you already use.
Install#
conda install -c conda-forge conda-workspaces
pixi global install conda-workspaces
Define a workspace#

Create a conda.toml in your project root:
[workspace]
name = "my-project"
channels = ["conda-forge"]
platforms = ["linux-64", "osx-arm64", "win-64"]
[dependencies]
python = ">=3.10"
numpy = ">=1.24"
[feature.test.dependencies]
pytest = ">=8.0"
[environments]
default = []
test = { features = ["test"] }
Then install and use your environments:
conda workspace install # solve + install + generate conda.lock
conda workspace run -e test -- pytest -v # run a command in an environment
conda workspace shell -e test # spawn a shell with test env activated
conda workspace install --locked # reproducible install from conda.lock
conda workspace list # list packages in default env
conda workspace envs # list defined environments
conda workspace info # workspace overview
Define tasks#

Add tasks to the same manifest:
[tasks]
test = { cmd = "pytest tests/ -v", depends-on = ["build"] }
build = "python -m build"
lint = "ruff check ."
[tasks.check]
depends-on = ["test", "lint"]
Then run them:
conda task run check # resolves dependencies, runs build → lint → test
conda task list # shows all available tasks
conda task run test # builds first, then tests
Tasks run in your current conda environment by default, or target a
workspace environment with -e myenv.
Why conda-workspaces?#
pixi introduced an excellent project model for managing multi-environment workspaces and tasks, but it brings its own solver and installation machinery. conda-workspaces reuses that same manifest format while delegating all solving and installation to conda’s existing infrastructure.
This means:
Workspaces and tasks read from
conda.toml,pixi.toml, orpyproject.toml— one manifest, multiple toolsEnvironments are solved by conda / libmamba and installed as regular conda prefixes
Lock files (
conda.lock) capture exact package URLs for reproducible installs without re-solvingTask dependencies, caching, Jinja2 templates, and platform overrides all work out of the box
Ships as a conda plugin (
conda workspace/conda ws,conda task) and standalonecw/ctCLIs
Read more in Motivation.
Set up your first workspace and tasks in under a minute.
Your first project, migrating from conda / pixi / anaconda-project / conda-project, CI setup.
Environments, features, platform overrides, PyPI dependencies, task dependencies, caching, templates, and more.
All manifest fields and file formats (conda.toml, pixi.toml,
pyproject.toml).
Complete conda workspace and conda task command-line documentation.
Python API for models, manifests, resolver, context, environments, and task execution.
conda.toml specificationNormative reference for the conda.toml manifest format and JSON
schema.
Answers to common questions about format compatibility, prior art, and unknown keys.