Skip to content

Model a problem in Rust, then pick a solver.

vallmo is a Rust project for combinatorial optimisation, with Python and C++ bindings. It brings modelling, its own constraint programming and SAT solvers, and backends for other solvers together, and it builds on Campion.
Started 12 November 2026 · Rust · Python · C++ · Early development · Nothing released

vallmo is a project for combinatorial optimisation software. The aim is simple to state: a Rust programmer reaches for vallmo to model a small problem, then picks a solver to solve it. The core is written in Rust, with Python and C++ bindings. How the bindings will be built has not been decided.

vallmo builds on Campion, a sibling library of combinatorial algorithms and solvers. vallmo depends on Campion; Campion never depends on vallmo.

  • Modelling. A Rust modelling interface inspired by MiniZinc and cpmpy. One model can be solved by any of the solvers below.
  • FlatZinc. A reader for MiniZinc’s solver-level language, so vallmo can also act as a solver for MiniZinc.
  • A constraint programming solver. A readable solver in the mould of Gecode, with Campion’s algorithms turned into propagators.
  • A SAT solver. A configurable SAT solver designed with constraint programming in mind, meant to be embedded in other solvers.
  • Other solvers. Backends for Gecode and OR-Tools CP-SAT.
  • Portfolios. Several solvers working on the same problem and sharing what they find.

The name is the Swedish word for poppy. It is written in lowercase: vallmo. Like Campion and Gecode Iris, it is named after a flower.

vallmo has just started. Nothing has been released: there are no Rust crates, Python packages or C++ libraries to install, and every interface may change. The source is in the zayenz/vallmo repository on GitHub, which is private for now. This page will link to documentation and releases when they exist.