Please see https://overconstrained.io for links to current Cassowary projects and resources.
(Last real update of this page 12 February 2003; last minor update in 2018 to fix some links and add a pointer to overconstrained.io.)
As of 18 November 2005, the Cassowary source (CVS) is now hosted at Cassowary project at SourceForge.net
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. Version 0.50 of the solving toolkit adds support for a one-way finite domain subsolver.
A technical report is included in the distribution that describes the algorithm, interface, and implementation of the Cassowary solver. Additionally, the distribution contains toy sample applications written in Smalltalk, C++, Java, and Python, and a more complex example Java applet, the "Constraint Drawing Application".
The code for Cassowary is no longer supported. However, we would still be pleased to hear about new applications of the solvers -- let us know which implementations(s) you're using and what your application is, by e-mail to the authors, Greg Badros (badros) and Alan Borning (borning), both at cs.washington.edu.
July 2011: The Cassowary constraint solver is now used as the layout engine in the Macintosh Lion OS! Here is some documentation from Apple:
February 2014: Cassowary is being used in Grid Style Sheets, a replacement for CSS layout.
July 2014: Cassowary is one of the solvers available in implementations of the Babelsberg object constraint language. Papers on Babelsberg are available via Alan Borning's publications page, and also on the publications page from the Software Architecture Group at Hasso Plattner Institute, Potsdam, Germany.
Latest version is v0.60. The original implementation in OTI Smalltalk is in the public domain; the ports to other languages are now licensed under the Lesser/Library GPL.
You must use a reasonably-well-conforming C++ compiler to build the C++ implementation of Cassowary. Consider using the freely-available GNU C++ compiler.
Contains all implementations and examples, README, the technical report referenced below, the NEWS file listing all user-visible changes, the ANNOUNCE file, LICENSE, COPYING.LGPL and more.
For the finite domain subsolver in Cassowary v0.50 and later, you need the Graph Template Library (GTL) built and installed before configuring Cassowary. Cassowary was tested against GTL-0.3.1, but may work against later versions.
Retrieve distributions via ftp.
Squeak port of Cassowary by Joshua Channing Gargus. If the URL changes, try SqueakMap at map.squeak.org.
Port of the Java version of Cassowary to the .NET platform, by Jo Vermeulen, Universiteit Hasselt, Belgium.
The technical report is derived from the UIST paper, but is intended to be self-contained. It includes material on Cassowary from the UIST paper, plus a description of the Java, C++, and Smalltalk implementations and their interfaces, along with additional details, corrections, and clarifications.
See Scwm, the Scheme Constraints Window Manager.
Prototype version of Amaya web browser supporting our constraint cascading style sheets