Changelog#
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to calendar versioning in the
YY.M.MICROformat.
25.11.0 (2025-11-24)#
✨ Special Announcement ✨#
This release includes preliminary support for fetching CEP 16 sharded repodata, a substantially more efficient way of distributing the necessary metadata to install packages in your environments.
You can try it by:
Enabling it in your settings with
conda config --set plugins.use_sharded_repodata trueSetting this environment variable:
CONDA_PLUGINS_USE_SHARDED_REPODATA=1
Note that sharded repodata requires that the target channels expose the necessary metadata too, so it will only work with CEP-16-ready deployments. conda-libmamba-solver will fallback to traditional (monolithic) repodata if not available, so you can mix sharded and non-sharded channels without problems.
Enhancements#
Add experimental support for CEP 16 sharded repodata. Enable it with
conda config --set plugins.use_sharded_repodata trueorCONDA_PLUGINS_USE_SHARDED_REPODATA=1. (#684, #695, #696, #715 via #722, #730, #748, #736, #756, #762)When sharded repodata is enabled, the solver checks every channel for an index,
repodata_shards.msgpack.zst, and re-checks every 7 days if not found. It builds a subset of repodata by recursively traversing the dependencies of all installed and requested packages, using shards to fetch only the package metadata that could possibly be part of the solution from each channel. This smaller amount of package metadata is sent to the solver. Sharded repodata can save a significant amount of bandwith, memory, and parse time when installing packages.Cache shards in a sqlite database in
${CONDA_PREFIX}/pkgs/cache/repodata_shards.db.This implementation does not use shards for
conda searchor other repodata uses that do not include a solve.
Add support for CEP 17
python_site_packages_path. (#560 via #628)Add new messaging for when
condais outdated, environment is frozen, andconda-selfis installed. (#753 via #766)Add a codspeed benchmarking GitHub action and a few benchmarks. (#754 via #755)
Bug fixes#
Constrain the torchvision version in
test_pytorch_gpu. (#659 via #661)Correctly record channel platform in conda-meta record files. (#662 via #663)
Import
CondaSolverfrom its canonical location inconda.plugins.types. (#691)The
cpuonlymutex now correctly prevents CUDA packages from being installed, matching classic solver behavior. (#131 via #741)
Deprecations#
Replace deprecated
conda.core.index._supplement_index_with_systemwithconda.core.index.Index().system_packages. (#654 via #655)Drop support for Python 3.9. (#747)
Docs#
Update documentation to reflect that the cudatoolkit/cpuonly issue has been resolved for the libmamba solver. (#131)
Document the sharded repodata implementation. (#756, #745)
Other#
Improve repository server in test suite. (#700)
Add Python 3.13 to the CI matrix. (#747)
Test osx-64 with
conda-forge, and osx-arm64 withdefaults, since Anaconda does not build osx-64 dependencies anymore. (#729, #747)
Contributors#
@agriyakhetarpal made their first contribution in conda/conda-libmamba-solver#741
@dholth
@jaimergp
@jezdez
@jjhelmus
@kenodegard
@stacynoland made their first contribution in conda/conda-libmamba-solver#766
@travishathaway
25.4.0 (2025-04-25)#
Enhancements#
Use
conda.reporters.get_spinner()to support conda reporter plugins. (#641)
Bug fixes#
Always percent-encode spaces in
file://channel URLs. (#640)Fix a bug where auto-selection of GPU variants of
pytorchandtorchvisiondidn’t work as expected. (#646 via #647)Avoid
libmambaMatchSpecparsing errors by skipping nameless channel information in passed specs. (#645 via #648)
Contributors#
@jaimergp
25.3.0 (2025-03-14)#
Bug fixes#
Fix issue with content trust post-solve hooks that prevented signatures from being verified when the solved package records didn’t include subdir information in their channel metadata. (#616 via #617)
Protect against
conda.base.context.context.restore_free_channeldeprecation by usinggetattr. (#629)Remove all packages with
--no-deps, not just the last one to be analyzed. (#632)
Docs#
Mention conda ecosystem’s adaptation of
libsolv. (#624)
Contributors#
@jaimergp
@jjerphan
@kenodegard
25.1.1 (2025-01-24)#
Bug fixes#
Consider whether the full spec matches anything installed (not just name) when
--satisfied-skip-solveis in use. (#605 via #606)
Contributors#
@jaimergp
25.1.0 (2025-01-21)#
Bug fixes#
Fix dependency handling in
conda env update --prune. (#595 via #596)Accept both
pathlib.Path()andstrforLibMambaSolver()prefix. (#586)
Contributors#
@dholth
@jaimergp
24.11.1 (2024-12-04)#
Bug fixes#
Ensure
PackageRecordURLs are percent-decoded before passing them back toconda. (#583)
Contributors#
@jaimergp
24.11.0 (2024-11-27)#
🚀 This release ships compatibility for libmamba 2.x. It’s a major rewrite! Make sure to check the changelog entry for 24.11.0rc for more details.
Bug fixes#
Load SOLV repodata cache in offline mode too. (#570)
Contributors#
@jaimergp
24.11.0rc (2024-10-31)#
Enhancements#
Require
libmambapyv2. This is a big refactor inlibmambainternals, which also allowed us to remove a lot of code inconda-libmamba-solver. (#457)
Deprecations#
CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLEDhas no effect anymore. Channels coming from installed packages are no longer added to the channel list. (#411 via #457)Removed
conda_libmamba_solver.state.BaseIndexHelper. The base class is nowconda_libmamba_solver.index.IndexHelper. (#457)Verbose logging in
libsolvhas a big overhead inlibmambav2, so we have disabled it by default (even if the user adds-vvvflags to the CLI). To opt-in, please setCONDA_LIBMAMBA_SOLVER_DEBUG_LIBSOLVto a truthy value. (#457)Python 3.8 is no longer supported. The minimum version is now 3.9. (#457)
Contributors#
@jaimergp
24.9.0 (2024-09-25)#
Bug fixes#
Use
Solverinstance configuration to initialize thelibmambacontext without implicitly relying on thecondacontext settings. (#525)Fix conda-build compatibility regression where arch-specific outputs can’t be found in the test phase if a
noarchoutput was built first. (#531)
Docs#
Add installation workarounds FAQ with conda-standalone. (#505 via #511)
Update user guide to reflect conda-libmamba-solver being the default solver in conda. (#516 via #517)
Include
mamba-org/mambaas a required cloned repository for setting up a dev environment. (#528)
Contributors#
@jaimergp
@jjhelmus made their first contribution in conda/conda-libmamba-solver#528
@justmarkham made their first contribution in conda/conda-libmamba-solver#510
24.7.0 (2024-07-17)#
Bug fixes#
Allow wildcards in package names for
conda remove(e.g.conda remove "python-*"). (#434 via #435)Avoid duplicate channel listing when using channel-pinned specs like
channel::package. (#449)Fix a performance regression where
.solvrepodata cache files were not being loaded when available. (#481 via #482)Do not ignore virtual packages as input specs. (#480 via #485)
Pin
libmambapy <2to defend against upcoming API changes. (#492)
Docs#
Document development workflows with devcontainers. (#451)
Other#
Add DevContainer configurations for local development workflows. (#451)
Contributors#
@jaimergp
@tl-hbk made their first contribution in conda/conda-libmamba-solver#449
@zklaus made their first contribution in conda/conda-libmamba-solver#476
24.1.0 (2024-01-29)#
Enhancements#
Prioritize explicitly requested specs with stricter constraints over implicit ones or name-only specs (e.g. a CLI-specified
name=version=buildwill be sent to the solver before CLI-specifiedname=versionandname). This happens to fix #391. (#381)Load
pkgs_dirsrecords when called in offline mode. (#396 via #423)
Bug fixes#
Fix a regression introduced in #378, where certain solves would hard crash due to the given specs input order. (#391 via #381)
Properly propagate customized local channels (conda-build workspaces). Requires
libmamba 1.5.6or above. (#398 via #401)Do not raise an error if an unsupported
MatchSpecfield can be safely dropped instead. Currently ignoringurl,md5andsha256. (#418 via #421, #427 via #429).Do not crash if a stateless repodata cache is accessed with
--offlineor--use-index-cache. (#396 via #423).
Other#
Remove old
SolverOutputState.specspreparation logic fromstate.py, which was no longer in use since 23.9.0. Instead, enumerate all known specs in a certain order (see Enhancements for details). This list is then consumed bySolver._specs_to_tasks()as usual. (#381)
Contributors#
@isuruf made their first contribution in conda/conda-libmamba-solver#401
@jaimergp
23.12.0 (2023-12-12)#
Enhancements#
Add some boundary checks to
CONDA_LIBMAMBA_SOLVER_MAX_ATTEMPTS. (#394, #403)
Bug fixes#
Instantiate
IndexHelperin offline mode for compatibility with conda-build. Otherwise the index can get out of sync during long build processes. (#386 via #395)
Docs#
Use new conda-sphinx-theme for documentation site. (#367 via #370)
Reorganize the layout of the documentation site. (#370)
Contributors#
@dholth
@jaimergp
@jezdez
@travishathaway made their first contribution in conda/conda-libmamba-solver#370
23.11.1 (2023-11-16)#
Enhancements#
Raise a friendlier
InvalidSpecerror instead ofRuntimeErrorwhen libmamba detects a problem in the configured solver jobs. (#352 via #357)Ensure specs,
SolverInputState.installedandSolverInputState.virtualcontainers are consistently sorted. (#378)
Bug fixes#
Configure pinned specs just once to avoid solver bugs related with their persistence (i.e. inability to downgrade environments if pinned specs are present and a transient dependency needs to be removed). (#354 via #355)
Detect whether a channel is part of a multichannel so the latter is used in the
PackageRecordentries for conda-build. Fixes an issue with conda-build and custom multichannels. (#363 via #365)Allow authenticated URLs in
default_channelsand other multichannels. (#364 via #366)Preserve authentication while reloading local channels. (#366)
Contributors#
@jaimergp
23.11.0 (2023-11-02)#
Bug fixes#
Do not use
libmamba’s default signal handler so users canCtrl-Cfromconda. (#337 via #340)Defer conda-build-specific exception definition and import until it is needed by the solver. (#342)
Interpret “excluded by strict priority” solver errors as proper satisfiability conflicts and avoid printing related yet uninformative warnings. (#343)
Ensure that historic specs are kept in the environment, even if that means raising a conflict. (#341 via #345)
Docs#
Document environment variables used for advanced configuration. (#349)
Other#
Require
libmambapy >=1.5.3for improved signal handling andMatchSpecsyntax compliance. (#347)
Contributors#
@dholth
@jaimergp
23.9.3 (2023-10-24)#
Bug fixes#
Massage bracket-containing specs (e.g.
ca-certificates[version='>=2023']) so they are understood bylibmambapy.Query, fixing a bug wherecondawould erroneously complain about no package records matching the configured pinned specs. (#327 via #328)
Contributors#
@jaimergp
23.9.2 (2023-10-19)#
Bug fixes#
Use the conda version reported at runtime (instead of the one reported by
conda list) to figure out whether there are conda updates available. (#316)Allow the index to be empty in
--offlineruns with no local cache available for the configured channels. (#323)
Contributors#
@costrouc
@jaimergp
23.9.1 (2023-09-29)#
Enhancements#
Increase performance of
notify_conda_outdatedlogic. (#298)
Bug fixes#
Prevent solver from bouncing between two compatible solutions when the same command is run twice in a row. (#302)
Contributors#
@costrouc
@jaimergp
23.9.0 (2023-09-28)#
Enhancements#
Expose libmamba’s
repoquerysearch features as a conda subcommand plugin. (#258)Rewrite how we create tasks for
libsolv, making use oflibmamba’sadd_pinfeatures. Requireslibmambapy >=1.5.1. (#270, #288)Name-only pins will lock the corresponding package if installed. (conda#13031 via #289)
Use the
.solvcache for repodata if available and recent. (#295)
Bug fixes#
Handle commands with no channels passed gracefully. (#256)
Workaround for missing
noarchfield in returnedPackageRecordpayload. (#257)Port logic from conda/conda#9614, which fixes a bug where the
--pruneflag was not working correctly inconda env updatecommands. (#270)Ensure environments are not aggressively updated to higher priority channels under some conditions. (#240 via #270, #285)
Do not inject those channels from installed packages that do not exist or are unavailable. (#262 via #274)
Correctly print all configured channels in
PackagesNotFoundErrorexceptions. (#284)Do not crash if a
MatchSpecwith a build string is specified in the CLI and there’s a pinned spec for the same package name. (#286 via #289)Only apply
defaults::pkgworkarounds for the default valuedefault_channels. (#292)
Deprecations#
Users won’t be able to override pinned specs with incompatible CLI specs anymore. Instead they must modify their pinned specs explicitly. (conda#9016 via #289, #294)
Docs#
Document intentional deviations from conda’s
classicsolver behavior. (#289)
Other#
Explain why
defaults::pkg_nameis broken libmamba 1.5.x (details). (#266)
23.7.0 (2023-07-31)#
Enhancements#
Add basic integrations for local channels in conda-build. (#194)
Bug fixes#
Add backwards-compatible support for the new namespaced settings in
libmamba.Context. (#192 via #193)Fixes an error where a user-supplied package in the CLI would get dropped if the argument happened to match a larger string in the argument list. (#221 via #222)
Fix authentication in package downloads. (#216 via #226)
Fix unhandled channels coming from injected virtual packages in
conda-lock. (#230 via #234)Handle URL-encoded channels correctly with recent
libmambaversions. (#247 via #248)
Docs#
Added notes about development workflows with libmamba from source. (#191)
Other#
Adding libmamba/libmambapy as development dependencies within docker images. (#191)
Contributors#
@costrouc
@jaimergp
@conda-bot
@pre-commit-ci[bot]
23.5.0 (2023-05-25)#
Enhancements#
Provide a
CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLEDenvironment variable to prevent channels from being injected from installed packages. This is useful for air-gapped environments where outside channels are not available. (#108 via #184)Simplify
libmambapy.Contextinitialization so we only set the bits that we use. (#209)Use the new
RepoInterfaceand remove theSubdirDatasubclass workarounds, which requiresconda 23.5.0. (#210)
Bug fixes#
Fix an issue where running
conda update <package>would result in the package being downgraded if no newer versions were available. (#71 via #158)Ensure unauthenticated channels are not re-injected in the channel lists from installed packages if an authenticated equivalent is already present. (#108 via #184)
Honor
context.repodata_threads. (#200)Do not set
quietmanually whencontext.jsonis true. (#187)
Deprecations#
Remove unneeded user-agent tests. (#183)
Docs#
Document known solver behavior differences. (#115, #131 via #197)
Update development docs to reflect changes in build system and other inaccuracies. (#208)
Other#
Add tests reproducing the known solver differences. (#115, #131 via #197)
Skip tests on libmamba 1.4.2 temporarily to workaround some test failures. Tracked by #186. (#187)
Contributors#
@jakirkham made their first contribution in conda/conda-libmamba-solver#189
@costrouc
@jaimergp
@jezdez
@kenodegard
@conda-bot
@pre-commit-ci[bot]
23.3.0 (2023-03-31)#
Enhancements#
Simplify exception parsing and enable new (experimental) conflict reports in
libmamba. (#102 via #103, #160)Use
conda’sSubdirDatafor all repodata fetching and caching. (#59, #68 via #65, #171)
Bug fixes#
Disable lockfiles within libmambapy to conform with conda’s behavior of not using them. (#120)
Fix JSON serialization errors in some exceptions. (#140 via #142)
Fix API breakage upstream:
SubdirData.cache_path_jsonproperty changed fromstrtoPrefixPath. Depend directly onboltons.setutils.IndexedSet. (#151)Updated bundled conda recipe and corresponding CI workflow. (#166)
Bumped minimum conda version from 22.11.1 -> 23.3.0 due to change in boltons IndexedSet. (#170)
Add workaround for
defaults::<pkg_name>specs. (#173 via #172)
Deprecations#
Python 3.7 is no longer supported. The minimum version is now 3.8. (#174)
Other#
Change the build-system to
hatchling+hatch-cvsfor asetuptools-scm-like versioning setup. (#128 via #127)Add conda-forge based CI environments. (#133)
Fix cache directory in flaky test. (#157)
CI: Pin
minioto2023-03-13T19-46-17Zto avoid breaking changes. (#159)Require
libmamba 1.4.1or greater and remove unused code paths. (#165)
Contributors#
@AlbertDeFusco made their first contribution in conda/conda-libmamba-solver#142
@costrouc
@jaimergp
@jezdez
@conda-bot
@pre-commit-ci[bot]
23.1.0 - 2023-01-31#
Bug fixes#
Fix “Packages Not Found” error messages to be more accurate and informative. (#96 via #101)
Ensure solves are deterministic and input order independent. (#75 via #111)
Fix compatibility errors with newer conda versions >=23.1.0 since we are using an internal API SubdirData. (#118 via #119)
Docs#
Mention expected versions and how to upgrade from experimental builds. (#89 via #93)
Other#
CI: Add scheduled runs with self-reported issues. (#60 via #106)
Fix typo in workflow documentation so it is consistent with the setup page. (#110)
Contributors#
@costrouc made their first contribution in #110
@jaimergp
@jezdez
@conda-bot
@pre-commit-ci[bot]
22.12.0 - 2022-12-01#
Upgrade notice#
To upgrade to conda-libmamba-solver 22.12.0 please update to conda 22.11.0 using the “classic” solver first:
$ CONDA_EXPERIMENTAL_SOLVER=classic conda install -n base conda=22.11.0
and then install a new version of conda-libmamba-solver:
$ CONDA_EXPERIMENTAL_SOLVER=classic conda install -n base conda-libmamba-solver=22.12.0
Afterwards, please use the new CONDA_SOLVER environment variable and --solver as mentioned below.
Added#
Added a new documentation site: https://conda.github.io/conda-libmamba-solver/ (#58)
Added CEP 4 compatible plugin for conda’s
solversplugin hook. (#63)
Changed#
The
conda-libmamba-solverpackage is now generally available, removes theexperimentallabel. (#53)The index will also load channels only listed as part the installed packages in the active prefix. (#52)
Updated compatibility to mamba 1.0.0 and conda 22.11.0. (#78)
Deprecated#
Deprecate support for Python 3.6.x.
Fixed#
Fixed a wrong dependency on libmambapy. (#90)
If missing or empty, package records will have their
subdirfield populated by the channel platform. (#53)
22.8.1 - 2022-08-25#
Fixed#
Amend packaging metadata (#51)
22.8.0 - 2022-08-24#
Added#
Check if conda is outdated with
libmambainstead of relying on conda’s implementation (#46)
Changed#
Rely on conda’s
SubdirDataas a fallback for channel protocols not supported bylibmamba(#49)
Deprecated#
Deprecate
libmamba-draftsolver variant (#45)
Removed#
Remove legacy debugging code and file-logging based on stream capture (#48)
22.6.0 - 2022-06-28#
Added#
Custom user agent (#29)
Compatibility with conda-build (#30)
Changed#
Enable support for user-defined
repodata_fnwhile ignoringcurrent_repodata.json(#34)Faster Python version changes (#33)
Remove base environment protection (#43)
Fixed#
Fix libmamba 0.23 compatibility (#35)
Fix handling of
*-enabled build strings (#36)Fix
escape_channel_urlproblems (#32)Fix error reporting if S3-backed channels are used (#41)
22.3.1 - 2022-03-23#
Fixed#
Make sure
noarchpackages get reinstalled if Python version changed (#26)Accept star-only version specs (e.g.
libblas=*=*mkl) and fix support forchannel::packagesyntax (#25)Enable support for authenticated channels (#23)
22.3.0 - 2022-03-09#
First public release
22.2.0 - 2022-02-01#
Internal pre-release as a separate repository.