An incremental constraint solver for .NET
Cassowary.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.
Cassowary.net is free software: it is licensed under the GNU LGPL.
Quoting the 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 Cassowary.net 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.
I created this software for my Master's thesis, in which I used it to support constraint-based layout management.
The only requirement is version 2.0 (or higher) of a .NET platform. Cassowary.net was tested with Microsoft's .NET implementation as well as with the free Mono implementation. It can also be used on the Compact version of the .NET platform.
The current stable version is 0.2.3:
The code repository is available at Cassowary.net's Launchpad page.
Cassowary.net passes the original ClTests test case from the Java version, and an additional layout management test case. In my experience it is very stable. Of course, there might still be a few bugs around. If you experience strange behavior, I would appreciate a bug report.