close Warning: Can't synchronize with repository "(default)" (/project/ucw/svn does not appear to be a Subversion repository.). Look in the Trac log for more information.

toc | forward -> Add-ons


First off UCW doesn't do version numbers. Some people may remember it did and it did, but it doesn't anymore. Still there are two versions of UCW to choose from: ucw_dev and ucw_public, both held in a Darcs repository. ucw_dev is controlled by Marco Baringer, creator of ucw. Ucw_public is world writable. At the moment I would advise to go with ucw_dev which is also the focus of this intro. _public is not always in sync with _dev, although lately it does a good job of keeping up.

The (experimental) easy way

There's a shortcut nowadays. Marco Baringer made a UCW candybox with all the dependencies boxed up and ready to fire. At the moment it's quite experimental, but if it doesn't work at least you've got all the dependencies in one go. Try:

wget tar -zxf ucw-boxset.tar.gz cd ucw-boxset YOURLISPHERE (-)-load start.lisp

This will start UCW with the built in httpd server backend. But if you want to get the dependencies seperately or want a different initial setup, read and get some of the following:

The (old and boring) hard way

To get _dev or _public, install Darcs on your computer and execute:

darcs get


darcs get

Daily snapshots for ucw_dev are available at

Daily snapshots for ucw_public are available at

Now it is time for the dependencies. A word of caution: ucw has it's own versions for a number of libraries so even if you already have the latest version of some package, check this documentation or the readme supplied with the sources. As a rule of thumb, get the latest of everything and the ucw version if supplied.

At the moment UCW requires the following dependencies:

A note on compatibility: Some configurations of implementation and server work better than others. Just report your bugs in the mailinglist, the list is quite responsive. As a pointer, an implementation/server-pair of sbcl or openmcl and mod_lisp seem too see the heaviest testing. The built-in httpd server also works well but isn't fit for production use.


Pick one in the list above.


Someone from Debian (Luca Capello) is working hard to to support ucw out of the box, but he is not quite there yet. Keep an eye on the cl-debian mailing list (UCW status, seeing the light at the end of the tunnel) for the latest developments.



Arnesi is a Common Lisp utility suite. It contains various "bits 'n pieces" of code which were useful while developing other code. It can be found on

You will need the latest version:

darcs get

Daily snapshots are available at


yaclml is a collection of macros and utilities for generating XML/HTML like markup from lisp code. It can be found on

You will need the latest version:

darcs get

Daily snapshots are available at:

parenscript - ucw version

Parenscript is a javascript compiler. You will need to get the latest development version:

darcs get

Daily snapshots are available at:


Iterate is an iteration construct for Common Lisp. It can be found on

Download link:

rfc2388 - ucw version

Rfc2388 is a lisp implemantation of RFC 2388, which is used to process form data posted with HTTP POST method using enctype "multipart/form-data".

UCW uses its own fork of rfc2388. You can get the latest code from the darcs repository located at

darcs get

Daily snapshots are available at

rfc2109 - ucw version

Rfc2109 is the lisp implementation of the cookie protocol. You can get it at:

darcs get

Daily snapshots are available at


splits sequences


download: (you might have to select a mirror first)

If said link is dead, go to to delete your CCLAN-SITE cookie and choose another mirror. At least some of them are definitely working.


The Superior Lisp Interaction Mode for Emacs.

Download and install the latest CVS version of SLIME from

To checkout from CVS you must first login to the repository:

cvs login

Enter anonymous when prompted for the password. You can then check out the latest version with:

cvs checkout slime

It's swank you want to add to your asd systems dir. To solve a current problem with cl-launch you might want to overwrite your swank.asd file with this one:

Check the description on cl-launch to see why.


Edi Weitz's regular expression library:

Download the latest version:


Networking library to create small server applications. Download the latest version from: (you might have to select a mirror first.

If said link is dead, go to to delete your CCLAN-SITE cookie and choose another mirror. At least some of them are definitely working.

Or use asdf install.


All of the backends (except araneida) depend on Franz's open-source net.uri library. It only works on Allegro but Kevin Rosenberg has made a portable version called PURI.

For allegro users, NET.URI can be downloaded from here (it may be included in your version of acl):

If you're not using allegro you'll need puri which can be downloaded from


A portable pathname library based on code from Peter Seibels book Practical Common Lisp.




A library consisting mostly of the time parsing routines from CMUCL that were removed from SBCL. Additionally it has a universal-time to rfc822 date converter.




A bash script to make your Lisp software easily invokable from the shell command-line.


download page:

Download and add to your shell executable search path so ucw can find it while loading. Cl-launch can either be called cl-launch or, ucw will check for both. Also cl-launch depends on swank behavior other than that of the current cvs code, at least under sbcl, eg via swank-loader it looks for files under the load path, which is not what you want if you made a symbolic link to another dir. The easiest way to get around this problem is to overwrite your swank.asd file (in the slime directory root), with this one:

The downside might be that swank won't work anymore as it should, although i haven't heard anyone about this yet. Another approach is to copy your swank*.fasls from the slime directory to the relevant shadow directory under ~/.cache/...

Check this thread for more info:

Yes, ucw is bleeding edge ;)

detachtty - ucw version

A screen-like detachment tool to be able to detach and re-attach the lisp server from and to a console. Ucw uses a custom detachtty version, e.g. detachtty-9 plus a patch by Kevin Rosenberg. It accepts an eval argument when invoking a lisp, with obvious benefits. Get it through Darcs:

darcs get

Go to the directory root and compile and install:

make install

the backend

Ucw supports all the popular lisp backends. Whichever floats your boat. If you've got no clue which to choose I'd advice to go for mod_lisp. It works well with other languages, you get the benefit of apaches options and extras and all it does is pump the code straight to ucw so there's no trouble with quirks in the intermediate layer. Apache requires some work to function correctly, read the text below. The other backends should work out of the box, as long as they're recognized by asdf. aserve as well as portable aserve are in the package systems of gentoo and debian. Gentoo also supports mod_lisp and mod_lisp2 for apache and araneida. Read this blog post by Bill Clementson to form a more balanced opinion.

mod_lisp/mod_lisp2 for apache

You can choose between apache 1 and 2. First of course you have to have a Apache web server up and runnnig; then you have to add the mod-lisp module by Marc Battyani which you find at

First download the mod_lisp c file. Watch out, don't follow the logic of the website. Except for the windows version the info is outdated concerning the apache 1 version and info about apache 2 is non-existent. Go to subversion from the download page or click the links below:

  • apache 1 .c file - mod_lisp.c
  • apache 1 binaries for windows - there is a link on the site for version 2.32 but it leads to nowhere
  • apache 2 .c file - mod_lisp2.c
  • apache 2 windows binary -

As stated in the intro, if you want to use ucw on a windows machine you're on your own. I have got no experience or information.

If you went for the c module on a unix clone, use the command.

apxs -i -c mod_lisp.c


apxs2 -i -c mod_lisp2.c

for respectively apache 1 or 2. This will install the module in the appropriate apache directory. Debian users using apt-get should get one of the apache dev versions to get apxs(2) installed. Then add the following lines to 'httpd.conf' or other relevant configure file in your apache configuration directory for both apache 1 and 2. Just be sure to change to for apache 2.

LoadModule lisp_module /path/to/modules/directory/
LispServer 3001 ucw
<LocationMatch "/path/.*\.ucw">
               SetHandler lisp-handler

This means that ucw INTERNALLY talks to apache on port 3001 at the internet address (so in this case your localhost). The locationmatch part redirects all traffic from (in this case) with prefix "/path/" and files ending on .ucw to ucw. So as well as will be redirected, but not or .

allegroserve or portableaserve

Should you want to use the aserve backend you will need to download and install either the AllegroServe if you use acl or portableaserve for any other. AllegroServe doesn't seem to have an asdf file, you're going to have to load it manually or however AllegroServe handles it's own files. Portableaserve does however.

AllegroServe can be downloaded from here (it may be included in your version of acl):

portableaserve is hosted on sourceforge:

portableaserve download:

To use portableaserve you'll also need the Allegro Common Lisp compatibility package (acl-compat). It's part of portableaserve and so it's home is also the before-mentioned sourceforge site.

acl-compat download:


Should you want to use the araneida backend you will need to download araneida. Get the latest version just to be on the safe side. Originally araneida was meant to live behind apache and it can of course still be configured as such. Explaining this is beyond the scope of this document but have a look at this site for more info.



or use darcs, although the connection seems a bit slow:

darcs get

Ucw's in-house server. It's a simple server bundled with ucw. Nice for testing.


To download it or read up on it go to

Asdf makes sure common lisp packages and the files in those packages get loaded in the correct order. I would suggest you read the manual at Really the first link is all you need to know right now.

Basically every lisp package you downloaded so far has defined an .asd file. Usually in the root of the directory. This file has to appear in the search path of asdf, which is a list of directories defined by the special variable asdf:*central-registry*. The directories are typically called "systems". Under a unix clone, make a symbolic link to a systems dir as described in the document or as shown below. If a package defines more than one .asd file, just shove the whole dir on the *central-registry*, again as described in the document or as shown below.

For example: on some linux installations the directory /usr/share/common-lisp/systems is in the list of asdf:*central-registry*. Now create a symlink from a particular .asd file to /usr/share/common-lisp/systems :

ln -s /path/to/library/lib.asd /usr/share/common-lisp/systems

To shove a whole directory on the *central-registry* do the following in your lisp startup file or in the repl:

(push #P"/path/to/asd/files/" asdf:*central-registry*)

All the required packages need to be recognized by asdf if you don't want to load every file by yourself.

toc | forward -> Add-ons

Last modified 13 years ago Last modified on 07/25/06 10:28:29