Site menu:


You will find my own Garnet porting to recent Lisp environments at that place. It runs with recent clisp, sbcl and cmucl. Tips for the various implementations:

The graphical look and feel of Garnet may be old-fashioned, but there is one thing in it which still shines IMHO: the constraint programming part. Other Lisp constraints tools are cells and it graphical extension cells-gtk.

Installation method

Garnet (and CLX) had peculiar installation methods, which I changed a bit. Hum, a lot. It's an autoconf/asdf mixture at the moment:

CL=<your-lisp-binary-name> ./configure --prefix=$HOME
make install
<your-lisp-binary-name> can be clisp, cmucl or sbcl currently. Garnet installs a script file <your-lisp-binary-name>-garnet, which loads a memory image of Garnet.

Some examples

Custom widgets can be found here. Installation is similar to Garnet itself:

CL=<your-lisp-binary-name-with-garnet> ./configure --prefix=$HOME
make install
<your-lisp-binary-name-with-garnet> can be clisp-garnet, cmucl-garnet or sbcl-garnet currently. To run the examples:
(asdf:oos 'asdf:load-op :garnet-widgets)
and you will get a window as the one below:

Demo of framed-aggregate

If you modify one value in the frame "Electromagnetism", the code uses circular constraints (energy depends on length, frequency depends on energy and length depends on frequency) to update the remaining fields in the frame. I would like to hear if this is possible with cells, and how.