Skip to content

Fast package resolver written in Rust (CDCL based SAT solving)

License

Notifications You must be signed in to change notification settings

baszalmstra/resolvo

 
 

Repository files navigation

banner

Resolvo: Fast package resolver written in Rust

License crates.io Build Status Project Chat Docs

Resolvo implements a fast package resolution algorithm based on CDCL SAT solving.

Projects using resolvo

  • rip: An async package resolver and installer for Python PyPI packages
  • rattler: Conda package resolver and installer (non-async)
  • resolvo-rpm: Experimental RPM resolver for Fedora / RedHat / OpenSUSE ... RPM packages
  • ... add yours!

Features

If resolvo is unable to find a solution it outputs a human-readable error message:

The following packages are incompatible
├─ bluesky-widgets >=0, <100 can be installed with any of the following options:
│  └─ bluesky-widgets 42 would require
│     └─ suitcase-utils >=0, <54, which can be installed with any of the following options:
│        └─ suitcase-utils 53
└─ suitcase-utils >=54, <100 cannot be installed because there are no viable options:
   └─ suitcase-utils 54, which conflicts with the versions reported above.

Resolve provides a generic interface which allows integrating the solver with a variety of package managers. For instance resolvo is used in rattler and pixi to solve packages from the conda ecosystem.

Originally resolvo started out as a port/fork of libsolv but it has since then diverged substantially. However, the same CDCL algorithm based on MiniSats An Extensible SAT-solver is still used underneath. Major differences compared to libsolv are:

  • Resolvo does not come with built-in support for several packaging ecosystems but instead provides a generic interface to allow it to be used in different scenarios.
  • Resolvo has support for incremental/lazy solving. This allows users to quickly find solutions in ecosystems where retrieving package metadata is expensive.
  • Resolvo is considerably faster than libsolv in large complex cases.
  • Resolvo can easily be used in multithreaded environments.
  • Resolvo provides human-readable error messages out-of-the-box.
  • Resolvo optionally provides an async interface to allow concurrent metadata fetching.
  • However, Libsolv is more extensive and supports more complex queries.

Contributing 😍

We would love to have you contribute! See the CONTRIBUTION.md for more info. For questions, requests or a casual chat, we are very active on our discord server. You can join our discord server via this link.

About

Fast package resolver written in Rust (CDCL based SAT solving)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 87.8%
  • C++ 9.0%
  • CMake 2.3%
  • Jupyter Notebook 0.9%