CUDF (for Common Upgradeability Description Format) is a format for describing upgrade scenarios in package-based Free and Open Source Software distribution.

In every such scenario there exists a package universe (i.e. a set of packages) known to a package manager application, a package status (i.e. the currently installed packages), and a user request (i.e. a wish to change the set of installed packages) that need to be fulfilled.

  • CUDF permits to describe an upgrade scenario in a way that is both distribution-independent and package-manager-independent

  • CUDF offers a rigorous semantics of dependency solving that enables to independently check the correctness of upgrade solutions proposed by package managers.

CUDF adoption would enable to share dependency solver components across different package managers, both intra- and inter-distributions.



libCUDF is a library to manipulate CUDF documents; libCUDF acts as the reference implementation of the CUDF specifications.

Using libCUDF you can parse, pretty print, and evaluate (e.g. check dependencies or solution correctness) CUDF documents that represent upgrade scenarios in package-based FOSS distributions. The library is written in OCaml, but offers bindings for other programming languages such as plain C (without any need of having OCaml at runtime).



  • packages are available for (at least) the following distributions: debian, ubuntu

  • development happens on the CUDF project GitLab repository.

Related work

  • DUDF (pdf) - a document structure to collect, within distributions, user upgrade scenarios a-la popcon
  • EDSP (External Dependency Solver Protocol) for APT - a CUDF-derived protocol, implemented by Debian's APT, to enable package manager front-ends to use extenal dependency solvers. EDSP-enabled versions of APT can use CUDF-based solvers via apt-cudf