An incremental constraint solver for .NET is a port of the University of Washington's Cassowary constraint solving toolkit to the .NET platform. It is based on the Java version by Greg J. Badros, which in turn is based on the Smalltalk version by Alan Borning.

I created this software for my Master's thesis, in which I used it to support constraint-based layout management. is free software: it is licensed under the GNU LGPL.

Quoting the original Cassowary website:

Cassowary is an incremental constraint solving toolkit that efficiently solves systems of linear equalities and inequalities. Constraints may be either requirements or preferences. Client code specifies the constraints to be maintained, and the solver updates the constrained variables to have values that satisfy the constraints.

Note: It is important to keep in mind that Cassowary is not a traditional linear programming solver. Cassowary is optimized for user interface applications, and uses a modified (incremental) version of the simplex algorithm which might yield different results compared with traditional linear programming tools. I have been contacted before by people who were using as a regular LP solver, but were getting strange results. For more details about the underlying algorithm, have a look at the Cassowary TOCHI paper by Badros, Borning and Stuckey.


The only requirement for Cassowary is the .NET framework version 2.0 (or higher). was tested with Microsoft's .NET framework as well as with the free Mono implementation. It can also be used with the Compact version of the .NET framework.


The current stable version is 0.2.3:

The code repository is available on Github. passes the original ClTests test case from the Java version, and an additional layout management test case. I consider it to be quite stable. Of course, there might still be a few bugs around. If you experience strange behavior, I would appreciate a bug report.

Related Publications

Kris Luyten, Jo Vermeulen and Karin Coninx.
Constraint Adaptability of Multi-Device User Interfaces.
In Proc. of MAFOC '06, CHI '06 workshop.
pp. 40-45.