Conda and the libmamba solver: Roll-out plan 2023
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.
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 stillclassic
. 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 inconda
, 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.