Skip to main content

Conda and the libmamba solver: Roll-out plan 2023

· 4 min read
Jannis Leidel
Steering council member
Jaime Rodríguez-Guerra
Steering council member

Over a year ago, the conda team at Anaconda, together with conda developers at Quansight and QuantStack, announced the release of a new solver for conda based on the libraries that the mamba project had developed on top of the venerable libsolv project.

Update

The default solver change for conda will be occurring in a special 23.10.0 release (not in 23.9.0). See the special announcement here.

TL;DR

  • From July 2023 on, conda-libmamba-solver will be part of the various installers. The default conda solver is still classic. Look out for the release of miniconda, Anaconda Distribution and miniforge soon.
  • From September 2023 on, the default conda solver will be libmamba. classic will be available via --solver=classic, if needed.
  • At some point in the future, we'll discuss whether the classic solver is kept around, maintained as a separate plugin, and/or deprecated for good. Feedback welcome!

Why we're doing this

The dependency solver can be considered one of the main pillars in the conda client (next to the network and IO stack, or the command line interface). It has been a source of many performance and user experience issues over the years, given the growth of the conda ecosystem. In particular, users of conda-forge and other larger conda channels struggle with the current solver implementation, based on pycosat.

In December 2022, we announced a new plugin package, conda-libmamba-solver, which integrates the mamba solver in conda itself. With this early release we aimed to obtain feedback from actual usage in real-world scenarios. If you have tried it and want to say something, we are still happy to hear from you in the conda-libmamba-solver repository on GitHub.

Roll-out Plan

We're happy to announce the roll-out plan for the next phase for the solver, to get the conda-libmamba-solver in the hands of more people.

The July 2023 editions of the Anaconda Distribution and miniconda installers will include the conda-libmamba-solver package in the base environment.

This will make switching to the solver much easier for end users, as it will require only adding --solver=libmamba (for one-time runs) or conda config --set solver libmamba (for persistently switching via the .condarc file) and not require additional installation steps. More details on that in the conda-libmamba-solver getting started guide.

We expect many more users to try it out that way to get more feedback where we can improve it further. If you’d like to send us your feedback now, please don’t hesitate to open a ticket in the conda and conda-libmamba-solver repositories on GitHub accordingly.

Changing the default solver

Afterwards, in the September 2023 release window for conda (23.9.0 per CEP 8), we'll also:

  • switch the default solver configuration to libmamba (no need to use the --solver=libmamba CLI flag anymore),
  • keep the classic solver code included in conda, to be able to "switch back”, if circumstances require it, via --solver=classic, and
  • create a plan to retire the classic solver in the far-future.

The long-term plan for the classic solver will include a timeline for deprecation from the main conda code base based on CEP 9 and additional public discussions with users if it's worth keeping the solver maintained in a separate conda plugin package (for example).

We understand that there are users who have built their workflows around the classic solver, and we want to provide ample time and support for them to migrate to the new solver. In case you have any input on our plans, please let us know! We look forward to working closely with the rest of the conda community to ensure a smooth transition.