Metadata-Version: 2.4
Name: conda-workspaces
Version: 0.1.0
Summary: Project-scoped multi-environment workspace management for conda, with pixi compatibility
Project-URL: documentation, https://conda-incubator.github.io/conda-workspaces
Project-URL: repository, https://github.com/conda-incubator/conda-workspaces
License-Expression: BSD-3-Clause
License-File: LICENSE
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Requires-Python: >=3.10
Requires-Dist: platformdirs>=3.0
Requires-Dist: tomlkit>=0.13
Description-Content-Type: text/markdown

# conda-workspaces

[![License](https://img.shields.io/github/license/conda-incubator/conda-workspaces)](https://github.com/conda-incubator/conda-workspaces/blob/main/LICENSE)
[![Python](https://img.shields.io/badge/python-3.10%E2%80%933.14-blue)](https://github.com/conda-incubator/conda-workspaces)

Project-scoped multi-environment workspace management for conda, with pixi
manifest compatibility.

Define environments in your project manifest, compose them from reusable
features, and let conda handle the solving and installation. Works with
existing pixi manifests -- no new package manager required.

## Quick start

Create a `conda.toml` in your project root:

```toml
[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"
pytest-cov = ">=4.0"

[environments]
default = { solve-group = "default" }
test = { features = ["test"], solve-group = "default" }
```

Install and manage your environments:

```console
$ cw install           # solve + install + generate conda.lock
$ cw run -e test -- pytest
$ cw list
$ cw install --locked  # reproducible install from conda.lock
```

## Why?

Conda handles environments and packages. [pixi](https://pixi.sh) introduced
a great project manifest format with multi-environment workspaces, but it
brings its own solver and environment management.

conda-workspaces reads pixi-compatible manifests and delegates solving and
installation to conda's own infrastructure. You get workspace management
inside the conda CLI without switching tools.

## What it does

- Reads `pixi.toml`, `conda.toml`, and `pyproject.toml` workspace manifests
- Multi-environment support with composable features
- Project-local environments in `.conda/envs/`
- Lockfile generation (`conda.lock`) in rattler-lock v6 format for reproducible installs
- Solve-groups for version consistency across environments
- Per-platform dependency overrides via `[target.<platform>]`
- PyPI dependency parsing (delegated to conda-pypi)
- Standalone `cw` CLI and `conda workspace` plugin subcommand

## Installation

```bash
conda install -c conda-forge conda-workspaces
```

## CLI

conda-workspaces registers as `conda workspace` and provides `cw` as a
standalone shortcut.

| Command | Description |
|---|---|
| `cw init` | Initialize a new workspace manifest |
| `cw install` | Create/update workspace environments |
| `cw install --locked` | Install from lockfile (skip solving) |
| `cw lock` | Generate/update `conda.lock` |
| `cw list` | List defined environments |
| `cw info [ENV]` | Show environment details |
| `cw add SPECS...` | Add dependencies |
| `cw remove SPECS...` | Remove dependencies |
| `cw run -e ENV -- CMD` | Run a command in an environment |
| `cw shell [ENV]` | Spawn a shell with an environment activated |
| `cw activate [ENV]` | Print activation instructions |
| `cw clean` | Remove installed environments |

## What it doesn't do

conda-workspaces is a workspace manager, not a package manager replacement.
It does not bundle its own solver or bypass conda's installation machinery.
If you want a fully integrated tool that handles both, see
[pixi](https://pixi.sh).

## Documentation

https://conda-incubator.github.io/conda-workspaces/

## Development

```bash
pixi install
pixi run test
pixi run lint
```

## Acknowledgements

The workspace and manifest system in conda-workspaces is directly inspired by
the work of the [prefix.dev](https://prefix.dev) team on
[pixi](https://github.com/prefix-dev/pixi). Their design of workspace
manifests, features, environments, and platform targeting provided the blueprint
for this plugin.

## License

BSD 3-Clause. See [LICENSE](LICENSE).
