Skip to content
kennytilton edited this page Sep 14, 2010 · 14 revisions

Welcome to qooxlisp

What is qooxlisp? In brief, we drive a kick-ass Javascript RIA Web application framework from a Lisp application running on the server, managing in the end to turn a thick client into a slave programmed wholly from a server-side application.


  • The Grand Re-Unification of application code, with everything on the server side, including the code that has to run on the client-side. Thank you, content-type “text/javascript” and eval.

  • All the power of a big programming language and all the libraries it can reach. Javascript is neat (and Lispy!) but just a toy.

  • All the power specifically of Common Lisp. You have no idea, but this might help. And I do not even mention macros!

  • The performance of a natively compiled language. Yes, Virginia, many Common Lisp implementations compile natively.


  • qooxdoo: a great Web application development framework.

  • Lisp: the only way to program.

  • Cells: dataflow aka functional reactive programming aka constraints. The only thing better than Lisp. Fans of OpenLaszlo, FrTime, Python Trellis, or qooxdoo’s own databinding scheme will understand. Basically, one gets a declarative programming paradigm in which data dependencies are established transparently and arbitrary invariants enforced automatically, as if one were using a spreadsheet such as VisiCalc or Lotus 1-2-3.


We pause a moment to recommend qooxdoo. Documented here is how one developer setlled on qooxdoo after a long search involving serious work with jQuery, Dojo, Yui, and a glance at GWT. That blog includes in the first paragraph links to two prequel articles completing the story. Or just consider this list:
  • bottom line first: built applications work unbelievably well. That itself breaks down three ways:
    • functionality as measured in in glitch absence, visually or in widget behavior
    • speed
    • attractiveness
  • Internal code quality Sometimes the best way to figure out how to use a widget is look at the code. And sometimes widgets don’t work and one really needs to get into the code. qooxdoo’s is amazingly good (and I am a ball-buster about Other People’s Code)
  • Comprehensiveness qooxdoo is huge.
  • Look, Ma! No HTML! Any big framework like Dojo or Yui makes us go to school on it. qooxdoo does, too, but it gives back: now we do not need to learn or code HTML (unless we really want to)
  • Power With qooxlisp these things do not matter as much, but qooxdoo offers a better OO atop JS’s, a cool internal messaging scheme, a databinding scheme similar in spirit to Cells or FRP, and prolly more I am forgetting
  • Support Approaching a dozen obviously very good engineers paid full-time to work on qooxdoo
  • Documentation See “huge” above, and the demo/example browser

How qooxlisp works

We add just a few lines to the application shell JS built for us when we ask qooxdoo to create a new web application. Some data:
var clDict = [];
var sessId;

And some code right at the end of the generated main function:
      clDict[\0] = this.getRoot();
      (new"/begin","GET", "text/javascript")).send();

The server-side Lisp application then responds with the Javascript needed to build the desired interface. The developer, however, is working only in Lisp, creating instances of Lisp classes which mirror the JS instances/classes needed on the client. Glue code behind the scenes takes care of generating the necessary JS code, including (where the Lisp programmer has provided a Lisp handler for a JS event) the glue to arrange for the Lisp callback to be invoked should the JS event fire.

Too easy? Check this out The "lisp" in qooxlisp

apropos, the demo/starter qooxlisp application

The included file INSTALL.txt explains how to build and run the starter application, which is a Web app recreation of a neat little utility found in AllegroCL, my preferred Lisp implementation. Screen shots of the dialog itself and Classic and Modern versions of the starter app can be found in the Downloads section of this GitHub project. Here is the Modern version:

In case you are wondering, Lisp is a big language and we can build large applications with it. Lisp includes a meta-function called “apropos-list” which lets me see all names of functions, classes, or variables that include a specified substring, and AllegroCL wraps that in a nifty dialog that lets me filter and sort the results when there are too many matches to scan easily. For our purposes, it has the advantage of using quite a few kinds of widgets, including a datagrid that pulls rows over from the server as the user scrolls.

apropos the web app has been tested successfully on Safari, Chrome, FireFox, and IE on Windows. It appears OK on Opera on Windows and functions somewhat, but no search results are returned. I have work to do elsewhere so not investigating just yet.

The starter app uses the free trial version of AllegroCL because that is what I use in commercial work and I have to get back to that. Contribs broadening the choice of implementation stack are welcome.

Final thought: oops, I forgot to add Licensing info. I will do that shortly, but it will be MIT-style.