Conda

ID

conda

Home page

https://conda.org

Upstream stars

⭐ 7,485

Last commit

2026-08-13

Version requirement

>= 4.6

Platforms

🐧 Linux · 🍎 macOS · 🪟 Windows

Operations

installed · outdated · search · install · upgrade · upgrade_all · remove · cleanup

purl types

pkg:conda

CLI name

conda

Issues and PRs

📦 manager: conda-based

Source

meta_package_manager/managers/conda.py

Conda cross-language package and environment manager.

Reads go through conda’s --json mode: installed packages come from conda list --json and search from conda search "*query*" --json. conda has no dedicated outdated command, so the upgrade the solver would perform is simulated with conda update --all --dry-run --json and its UNLINK (current) and LINK (candidate) sets are diffed by name: a name in both is an in-place upgrade, while a LINK-only entry is a freshly pulled dependency and is not reported.

Note

Every operation targets conda’s currently active environment, which is base when none is activated. mpm neither activates nor switches environments: it inspects and mutates whatever environment conda resolves from the inherited CONDA_PREFIX / CONDA_DEFAULT_ENV, exactly as a bare conda call in the same shell would. Per-environment targeting is not supported yet.

Note

The >=4.6.0 floor is the release where update --dry-run --json settled on an actions mapping whose LINK / UNLINK values are package dicts, the shape the outdated diff parses. Much older conda wrapped actions in a list and emitted bare channel::name-version-build strings instead.

What mpm adds to conda

Through mpm, conda gains --exact and --extended search, to narrow to exact names or match descriptions.

Bigger still, mpm reaches across every manager at once: mpm installed and mpm outdated cover conda alongside pixi and any other manager you run in one table, mpm upgrade --all updates them together, and mpm sbom exports the whole machine as one bill of materials.

Every mpm command also gains --dry-run and --plan previews, cross-scheme version comparison and purl identifiers. See manager augmentations for how each one is built.

Your conda commands, in mpm

You already know conda: each operation maps one-to-one onto mpm, in an interface shared by every manager.

To…

With conda

With mpm

List what’s installed

conda list --json

mpm --conda installed

List outdated packages

conda update --all --dry-run --json

mpm --conda outdated

Search for a package

conda search "*pytz*" --json

mpm --conda search <pkg>

Install a package

conda install --yes pytz

mpm install pkg:conda/pytz

Upgrade one package

conda update --yes pytz

mpm --conda upgrade pytz

Upgrade everything

conda update --all --yes

mpm --conda upgrade --all

Remove a package

conda remove --yes pytz

mpm remove pkg:conda/pytz

Clear caches

conda clean --all --yes

mpm --conda cleanup --cache

Prefix any command above with --dry-run to simulate the underlying manager calls without touching the system: the safe way to watch what mpm would do before trusting it.

Operations

Operation

Supported

Notes

installed

outdated

orphans

search

exact and extended search backfilled by mpm

install

upgrade

upgrade_all

remove

sync

cleanup

doctor

Selecting and configuring conda

Deselect conda for a single run with --no-conda, or persist the choice in your configuration:

[mpm]
conda = false

Keep it enabled but tune how mpm drives it with a per-manager override:

[mpm.managers.conda]
timeout = 900

mpm config-template conda prints every overridable attribute as a ready-to-paste block.

Recipes

A few jobs you would otherwise script around conda, one mpm command each:

  • Snapshot and clone a machine: mpm --conda dump conda.toml, then mpm restore conda.toml on the next one.

  • Export a compliance SBOM: mpm --conda sbom (CycloneDX by default, --spdx for SPDX).

Privilege escalation

mpm runs this manager as the current user and never prepends sudo by default. Flip the policy for its privileged operations with --sudo or the per-manager sudo override.

See privilege escalation for the full policy.

Concurrency

mpm never runs conda at the same time as mamba or micromamba: they act on one environment prefix and one package cache, and conda honors none of the locks mamba takes on them. Each mutating operation waits for the previous one, even with a higher --jobs, while managers outside this group keep running in parallel.

Only mutations are held back. The read-only queries (installed, outdated, search) take no backend lock and stay fully concurrent.

Cooldown

State of Conda’s release-age gating, from the cooldown support table:

  • Status: 🚧 Proposed

  • Mechanism: --exclude-newer / exclude_newer (open issue + PR)

  • Reference: conda/conda#15759

A cooldown only pays off where a compromised release can be withdrawn while the clock runs, and can only be emulated where the registry dates its releases. From the retraction table:

  • Registry: anaconda.org / conda-forge (pkg:conda)

  • Retraction: Relabel: “we do not allow edits or the deletion of packages on conda-forge” (immutability); a bad artifact is labelled broken and “Users will no longer be able to install them by default” (procedure)

  • Publish date: ✅ upload_time, with the broken label carried in labels (API)

With --cooldown set, mpm skips this manager’s install and upgrade operations rather than run them unguarded (fail-closed); --allow-unsupported-managers opts back in.

Version probe

The version is probed by running:

$ conda --version
conda 24.5.0

and extracted with:

r"conda\s+(?P<version>\S+)"

Reference traces

Raw native outputs captured in the manager source: the reference mpm’s parsers were written against. If you know Conda well and a transcript below looks wrong, or a newer release changed its output format, report it.

$ conda list --json
[
  {
    "base_url": "https://repo.anaconda.com/pkgs/main",
    "build_number": 0,
    "build_string": "py312hca03da5_0",
    "channel": "pkgs/main",
    "dist_name": "pip-24.0-py312hca03da5_0",
    "name": "pip",
    "platform": "osx-arm64",
    "version": "24.0"
  },
  {
    "base_url": "https://repo.anaconda.com/pkgs/main",
    "build_number": 0,
    "build_string": "py312_0",
    "channel": "pkgs/main",
    "dist_name": "pytz-2024.1-py312_0",
    "name": "pytz",
    "platform": "osx-arm64",
    "version": "2024.1"
  }
]
$ conda update --all --dry-run --json
{
  "actions": {
    "FETCH": [],
    "LINK": [
      {
        "base_url": "https://repo.anaconda.com/pkgs/main",
        "build_number": 0,
        "build_string": "py312_0",
        "channel": "pkgs/main",
        "dist_name": "pytz-2024.2-py312_0",
        "name": "pytz",
        "platform": "osx-arm64",
        "version": "2024.2"
      }
    ],
    "UNLINK": [
      {
        "base_url": "https://repo.anaconda.com/pkgs/main",
        "build_number": 0,
        "build_string": "py312_0",
        "channel": "pkgs/main",
        "dist_name": "pytz-2024.1-py312_0",
        "name": "pytz",
        "platform": "osx-arm64",
        "version": "2024.1"
      }
    ],
    "PREFIX": "/opt/conda"
  },
  "dry_run": true,
  "prefix": "/opt/conda",
  "success": true
}
$ conda update --all --dry-run --json
{
  "message": "All requested packages already installed.",
  "success": true
}

Feed any of these through mpm and the raw output becomes one uniform table, the same shape for every manager: filter it, project columns, or export it (mpm --conda installed --output json, or csv, toml, yaml), each package carrying a purl and a version comparable across managers.

Upstream project

Metrics

conda/conda

Activity

commit activity commits since open issues open pull requests

Popularity

forks watchers contributors

Metadata

latest release release date license main language

Changelog

  • 8.0.0.dev0 (unreleased)

    • Stop running conda, mamba and micromamba concurrently. They act on one environment prefix and one package cache, and conda honors none of the locks mamba takes on them.

    • Resolve the pkg:conda and pkg:nuget purl types, which both raised instead of routing: a type declared with no manager short-circuits the fallback that would otherwise match it against the manager IDs. pkg:conda now fans out to conda and pixi, and pkg:nuget reaches dotnet.

  • 7.1.0 (2026-07-07)

    • Add Conda package manager with installed, outdated, search, install, upgrade, remove, and cleanup support, cross-platform on Linux, macOS, and Windows; requires conda >=4.6.0.