Australian Cassowary Flightless Bird Cassowary Constraint Solving Toolkit

Please see 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

As of 18 November 2005, the Cassowary source (CVS) is now hosted at Cassowary project at


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



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.

Bug Reports



Native JavaScript/Ecmascript implementation of the library and the Quadrilateral Demo (N.B., the JavaScript implementation is included in the CVS repository at SourceForge

Squeak port of Cassowary by Joshua Channing Gargus. If the URL changes, try SqueakMap at

Port of the Java version of Cassowary to the .NET platform, by Jo Vermeulen, Universiteit Hasselt, Belgium.



Greg J. Badros, <>

Alan Borning,


The UIST paper referenced above contains the original description of Cassowary, as well as a description of QOCA, a closely related solver that finds least-squares solutions to linear constraints. The QOCA developers expect to provide a public distribution of that system as well, and we will be collaborating with them to support as well as possible a common interface to all our solvers, allowing researchers to experiment with the different techniques.

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.


Online Demos

The Bounded Quadrilateral Demo written in JavaScript


Applications Using Cassowary

See Scwm, the Scheme Constraints Window Manager.

Prototype version of Amaya web browser supporting our constraint cascading style sheets

Greg J. Badros / U Washington Computer Science and Engineering /