Australian Cassowary Flightless Bird Cassowary Constraint Solving Toolkit

(Last real update 12 February 2003; last minor update in 2014 to add a reference to the Babelsberg language and to fix the link to the Squeak implementation.)

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.

---------------------------------------------------

News

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 the Viewpoints Research Institute writings page, and also on the publications page from the Software Architecture Group at Hasso Plattner Institute, Potsdam, Germany.

---------------------------------------------------

Distribution

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

---------------------------------------------------

Ports

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 map.squeak.org.

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

---------------------------------------------------

Authors

Greg J. Badros, <gjb@cs.washington.edu>
http://www.cs.washington.edu/homes/gjb

Alan Borning, http://www.cs.washington.edu/homes/borning
---------------------------------------------------

Papers

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

Michael Noth has written a constraint-based drawing application, which uses the Cassowary constraint solver: applet and instructions. (The applet needs Java 1.1 support to run -- for Netscape 4.04 you'll need the "Java Enhancement Pack", or for Internet Explorer a version that supports Java 1.1.)

The source code for the Constraint Drawing Applet is included in the Cassowary source code distribution. (It is no longer being maintained, however.)


---------------------------------------------------

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 / gjb@cs.washington.edu