Releases: conda-incubator/conda-workspaces
Releases · conda-incubator/conda-workspaces
Release list
0.7.0
Immutable
release. Only release title and notes can be modified.
What's Changed
- Run docs workflow for changelog updates by @jezdez in #82
- Resolve target dependencies per platform during lock by @jezdez in #89
- Support Pixi rich platform system requirements by @jezdez in #90
- Bump codecov/codecov-action from 6.0.1 to 7.0.0 in the actions group by @dependabot[bot] in #85
- Preserve manifest channels when merging lock fragments by @jezdez in #91
- Add workspace archive receipts by @jezdez in #84
- Document and fix archive receipt workflows by @jezdez in #92
- Verify lockfile package integrity during install by @jezdez in #93
- Restrict workspace environment names to local prefixes by @jezdez in #95
- Validate archive output paths by @jezdez in #96
- Validate imported conda-project environment files by @jezdez in #97
- Reject unsafe unarchive targets by @jezdez in #98
- Exclude sensitive files from non-git archives by @jezdez in #99
- Require archive verification before cache priming by @jezdez in #100
- Preserve task command argument boundaries by @jezdez in #101
- Quote imported anaconda-project task values by @jezdez in #102
- Compare cache digests before reusing outputs by @jezdez in #103
- Validate lockfile merge package metadata by @jezdez in #104
- Add WorkspaceArchive public API by @jezdez in #107
- Support Pixi named rich platforms by @jezdez in #106
- Prepare changelog for 0.7.0 by @jezdez in #105
- Update release metadata by @jezdez in #108
- Fix conda-forge README badge by @jezdez in #109
- Refresh conda integration docs by @jezdez in #110
- Make release workflow immutable-release compatible by @jezdez in #111
Full Changelog: 0.6.0...0.7.0
0.6.0
0.6.0 — 2026-06-05
Added
conda workspace unarchive --installcan install a selected environment to an explicit final prefix with-e/--environmentand--prefix.--deststages files below a filesystem root while preserving the requested runtime prefix inside the installed environment, and warns if installed files still reference the staging prefix. (#77, #78)- Added
[workspace.dependencies]inheritance for conda, pixi, and pyproject manifests, matching the workspace dependency feature added in pixi 0.70.0. (#80, #79)
0.5.0
0.5.0 — 2026-06-02
Added
- User-level task definitions: tasks defined in
~/.conda/tasks.tomlare now available across all projects without repeating them in every manifest. Project tasks override user tasks on name collision.conda task listannotates user-sourced tasks with(user)in text output and"source": "user"in JSON output. XDG paths are also supported ($XDG_CONFIG_HOME/conda/tasks.toml). (#53, #54) conda workspace archivepackages a workspace into a portable archive. Git repositories include tracked files by default, while non-git projects include workspace files filtered by built-in exclusions,[workspace.archive]settings, and--exclude..tar.zstis the default output format;.tar.gzand.tar.bz2are also supported. (#57, #63)conda workspace archive --lockrefreshesconda.lockbefore writing the archive, and--bundleincludes package archives from the local conda package cache for offline or air-gapped installs. Bundled package archives are checked against lockfile SHA-256 hashes when hashes are available. (#57, #63, #71)conda workspace unarchiverestores an archived workspace, andconda workspace unarchive --installextracts the workspace and installs its environments from the bundled or local package cache in one step. (#57, #63)conda workspace installnow checks whetherconda.locksatisfies the manifest before deciding whether to solve. In local use it prefers the lockfile when it is still valid and solves when it is not. In CI (CI=true) the default behaves like a locked install and fails fast when the lockfile is missing or unsatisfiable. (#61, #67)conda workspace install --no-lockforces a solve even when the existing lockfile satisfies the manifest. (#61, #67)conda workspace infonow reports lockfile status (up-to-date,out-of-date, ormissing) in text output and aslockfile_statusin JSON output. (#61, #67)conda wsis now a short alias forconda workspace, with the same subcommands, flags, arguments, and help text. (#68, #69)- Added tutorials and reference material for workspace archives, PyPI dependencies, multi-platform locking, and the
conda.tomlspecification. (#51, #56, #65, #66)
Changed
- The minimum supported conda dependency is now
conda >=26.3, and the minimumconda-pypidependency is nowconda-pypi >=0.9.0. conda-workspaces also uses the current conda environment specifier and exporter plugin metadata APIs. (#65) - Projects that declare PyPI dependencies now receive a clearer runtime warning when
conda-rattler-solveris not installed.conda-rattler-solverremains an explicit dependency in the pixi development environments. (#65)
Fixed
.tar.zstarchive creation and extraction now work on every supported Python version. Python 3.10 through 3.13 usebackports.zstd; Python 3.14+ uses the standard library zstd support. (#72)- Workspace archive file collection uses POSIX archive paths on Windows, so archives are portable across platforms. (#57, #63)
- Lockfile loading now raises the project-specific platform mismatch error for missing-platform cases instead of a generic
ValueError. (#65)
Security
- Task templates now render with Jinja2's sandboxed environment, which blocks template attribute traversal attacks from malicious task definitions. Task argument names can no longer shadow the reserved
condaandpixitemplate context keys. (#55) - Archive extraction validates every tar member before extraction, rejecting absolute paths,
..path traversal, symlink escapes, and special file types such as device nodes and FIFOs. On Python 3.12+ extraction also uses the standard libraryfilter="data"defense. (#57, #63) - Bundled archive package cache priming verifies package SHA-256 hashes against
conda.lockbefore copying archives into the local conda package cache. (#57, #63, #71)
0.4.0
Highlights
- One-step workspace bootstrap with
conda workspace quickstart - Multi-platform lockfiles by default, with matrix-CI-friendly
--platform,--output, and--mergeflags - Three new manifest exporters:
conda-toml,pixi-toml,pyproject-toml add/removeinstall and refresh the lockfile by default, matchingpixi add/pixi remove--jsonis now accepted on every subcommand
Added
Quickstart
conda workspace quickstart [specs...]composesinit,add,install, andshellinto one command (#39, closes #22)--copy(alias--clone) copies an existing workspace's manifest from a directory or file (#39)--no-shellskips the final shell step, implied by--json(#39)
Multi-platform locking
conda workspace locksolves every platform declared by each environment by default, not just the host platform (#31, closes #4, #33)--platform <subdir>(repeatable) restricts to a subset of declared platforms; unknown platforms raisePlatformErrorbefore any solve (#31)--skip-unsolvablekeeps locking remaining(environment, platform)pairs when one solve fails; aborts withAllTargetsUnsolvableErroronly if every pair fails (#31)--output <path>writes the lockfile anywhere, e.g.conda.lock.linux-64for per-platform CI fragments (#38, closes #34)--merge <glob>(repeatable) stitches fragments back into a singleconda.lockwithout re-solving; output is byte-identical to a single-run lock (#38)SolveErrornames the target platform when known, so per-platform CI failures stand out (#36, closes #32)conda workspace info --jsonexposes the reachable platform set asknown_platforms(with a matchingKnown Platformsrow in text output) (#36)
Export
- New
conda-toml,pixi-toml, andpyproject-tomlexporters forconda workspace export(#44, closes #41) pyproject-tomlsplices its content under[tool.conda]and preserves peer tables ([project],[build-system],[tool.ruff],[tool.pixi], ...) when the target file already exists (#44)
Other
--jsonis now accepted by everyconda workspaceandconda tasksubcommand; side-effect-only commands (init,activate,run,shell) no longer crash when CI wrappers pass the flag globally (#46)- Inside
conda workspace shell,add/remove/installprint a hint to re-spawn the shell when a new package drops activation scripts into\$PREFIX/etc/conda/activate.d/(#28, closes #21) - New
demos/multi-platform.{tape,gif,mp4}recording;demos/lockfilerefreshed to show multi-platform default output (#45)
Changed
conda workspace addandconda workspace removeinstall into affected environments and refreshconda.lockby default, matchingpixi add/pixi remove; opt out with--no-install,--no-lockfile-update,--force-reinstall, or--dry-run(#28, closes #21)add,remove, andinstallshare a single solve/install/lock pipeline (#28)conda task run <task>(andct run) falls back to the workspace'sdefaultenvironment when a task doesn't declaredefault_environment, instead of inheriting the active conda env (#27)conda_workspaces.parsersrenamed toconda_workspaces.manifests(named after the subject, not the verb); class names and public re-exports unchanged (#29, closes #4)conda_workspaces.env_specshrunk to theconda.tomlenv-spec plugin;CondaLockSpecreplaced byconda_workspaces.lockfile.CondaLockLoader(#35)- Canonical lockfile
FORMATrenamed toconda-workspaces-lock-v1;conda-workspaces-lockandworkspace-lockremain as aliases (#37, closes #14) conda workspace lockandconda exportnow produce byte-identical output via a sharedmultiplatform_exporthook (#35, #38)conda.lockis documented as a derivative of rattler-lock v6 (pixi.lock): same schema family, distinct filename and on-disk version byte (#29, #35)conda-spawnminimum version raised from>=0.0.5to>=0.1.0, picking up fish/csh/tcsh/xonsh support and several shell-integration fixes (#49)
Fixed
conda workspace quickstartcrashed withAttributeError: 'Namespace' object has no attribute 'verbose'after conda renamed the argparse dest toverbosity(#46)conda workspace quickstart --jsonno longer leaks Rich status lines into stdout; the JSON payload is the only thing emitted on stdout (#46)
Full Changelog: 0.3.0...0.4.0
0.3.0
Added
conda workspace importcommand to convertenvironment.yml,anaconda-project.yml,conda-project.yml,pixi.toml, andpyproject.tomlmanifests toconda.toml- Progress output during import (reading, format detection, write status)
- Syntax-highlighted TOML preview in
--dry-runmode conda task addandconda task removesupport forpixi.tomlandpyproject.tomlmanifests- Codecov integration and coverage badge
- CI, docs, PyPI, and conda-forge badges to README
- Documentation for
CONDA_PKGS_DIRShardlink optimization in CI/Docker - Diataxis-organized documentation sidebar
Changed
- Import format detection uses human-readable labels instead of class names
- Importers use
packaging.Requirementfor robust pip dependency parsing - Simplified importer registry to a single
find_importerfunction - Unified installation docs (conda install and pixi global install)
Fixed
--dry-runoutput no longer strips TOML section headers in non-terminal environments- Trailing dot suppressed in import status when output is in the current directory
0.2.0
Added
conda tasksubcommand withrun,list,add,remove, andexportconda workspace runcommand for one-shot execution in environments- Task dependencies with topological ordering (
depends-on) - Jinja2 template support in task commands (
{{ conda.platform }}, conditionals) - Task output caching with input/output file declarations
- Per-platform task overrides via
[target.<platform>.tasks] - Task arguments with default values
- Rich terminal output for all CLI commands (tables, status, errors)
- Structured error rendering with actionable hints
- Integration tests for CLI workflows
- Demo recordings for terminal screencasts
Changed
- Verb-based status messages (Installing, Installed, etc.) replace symbol-based markers
- All CLI output routed through Rich console for consistent formatting
- Documentation standardized to use
conda workspace/conda taskas primary CLI forms (cw/ctnoted as aliases) - Aligned parsers with pixi workspace semantics for broader manifest compatibility
- Exception hierarchy expanded with type annotations and actionable hints
Fixed
- JSON output in
conda task list --jsonno longer includes ANSI escapes - Activation script handling on Windows uses correct path validation
- Solver output noise suppressed during lockfile generation
- Stdout flushed after conda solver and transaction API calls
0.1.1
0.1.0
Added
- Initial implementation of conda-workspaces plugin
conda workspacesubcommand withinit,install,list,info,
add,remove,clean,run, andactivatesubcommandscwstandalone CLI shortcut- Parser support for
pixi.toml,conda.toml, andpyproject.toml
manifests - Multi-environment workspace model with composable features
- Solve-group support for version coordination across environments
- Per-platform dependency overrides via
[target.<platform>] - PyPI dependency parsing (requires conda-pypi for installation)
- Project-local environments under
.conda/envs/ - Sphinx documentation with conda-sphinx-theme
- PyPI release workflow with trusted publishing