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.
- From July 2023 on,
conda-libmamba-solverwill 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
classicwill 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.
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.
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=libmambaCLI flag anymore),
- keep the
classicsolver code included in
conda, to be able to "switch back”, if circumstances require it, via
- create a plan to retire the
classicsolver 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.