March 2014 dist update now available

New projects: chirp, cl-flowd, defvariant, delta-debug, random.

Updated projects: access, alexandria, architecture.hooks, asdf-dependency-grovel, asdf-encodings, babel, caveman, cffi, cffi-objects, cl+ssl, cl-6502, cl-algebraic-data-type, cl-ana, cl-autorepo, cl-autowrap, cl-blapack, cl-charms, cl-colors, cl-data-format-validation, cl-dbi, cl-emb, cl-erlang-term, cl-indeterminism, cl-isaac, cl-lastfm, cl-launch, cl-murmurhash, cl-nxt, cl-olefs, cl-plplot, cl-prime-maker, cl-qprint, cl-quickcheck, cl-randist, cl-rethinkdb, cl-sdl2, cl-sendmail, cl-smtp, cl-syslog, cl-yaclyaml, cl-zmq, clache, clack, clack-errors, cletris, clfswm, climc, climon, clinch, closer-mop, clsql, coleslaw, com.informatimago, common-lisp-stat, dartsclhashtree, define-json-expander, defmacro-enhance, defstar, drakma, elf, ernestine, esrap-liquid, fare-memoization, fare-quasiquote, fare-utils, firephp, fnv, fset, gbbopen, gendl, graph, gtk-cffi, hu.dwim.def, hu.dwim.logger, hu.dwim.util, inferior-shell, integral, iolib, jsown, lambda-reader, lisp-matrix, lisp-unit2, lisp-zmq, lla, lquery, mcclim, monkeylib-prose-diff, more-conditions, optima, paiprolog, pgloader, postmodern, projectured, qmynd, repl-utilities, rutils, scribble, secure-random, single-threaded-ccl, slime, stumpwm, sxql, teepeedee2, trivial-channels, trivial-gray-streams, trivial-ldap, vgplot, weblocks, weblocks-examples, weblocks-stores, weblocks-utils, wookie, xml.location.

To update your libraries, use (ql:update-dist "quicklisp"). Enjoy!


Init files for Quicklisp

Certain files in ~/quicklisp/local-init/ are loaded (with cl:load) during Quicklisp initialization. Files matching "*.cl" or "*.lisp" and that do not start with a "." are loaded in cl:string< order of their names. (If two files foo.lisp and foo.cl both exist, the order in which they are loaded is undefined.)

This feature has been present for a long time, but I haven't used it myself and haven't written about it. If you try it and encounter any problems, please let me know.


February 2014 Quicklisp dist update now available


New projects: architecture.service-provider, cl-ana, cl-cron, cl-sdl2, cl-yaclyaml, define-json-expander, esrap-liquid, hermetic, hu.dwim.web-server, integral, montezuma, projectured, secret-values, swap-bytes, trivial-download.

Updated projects: antik, asdf-package-system, asdf-system-connections, buildapp, caveman, chanl, cl+ssl, cl-autowrap, cl-bacteria, cl-csv, cl-dbi, cl-emb, cl-epmd, cl-erlang-term, cl-i18n, cl-isaac, cl-larval, cl-murmurhash, cl-mustache, cl-olefs, cl-permutation, cl-ppcre, cl-project, cl-quickcheck, cl-redis, cl-rmath, cl-smtp, cl-syslog, cl-test-more, cl-webdav, clack, clack-errors, cleric, clinch, closer-mop, clsql-helper, collectors, commonqt, envy, fare-quasiquote, gbbopen, glaw, glop, group-by, http-parse, hu.dwim.asdf, hu.dwim.rdbms, hunchentoot, hunchentoot-cgi, ieee-floats, inferior-shell, iolib, iterate, lisp-gflags, lisp-unit2, local-time, lparallel, mcclim, mel-base, more-conditions, osicat, pgloader, policy-cond, portableaserve, postmodern, protobuf, pzmq, repl-utilities, rfc2109, rutils, sclf, smackjack, spinneret, stumpwm, sxql, teepeedee2, trivial-gray-streams, vgplot, weblocks-stores, wookie.

Removed projects: none


To get this or any future update, use (ql:update-dist "quicklisp").

To install exactly this version, use:

  (ql-dist:install-dist "http://beta.quicklisp.org/dist/quicklisp/2014-02-11/distinfo.txt" :replace t)

To revert to the previous version after update, use:

  (ql-dist:install-dist "http://beta.quicklisp.org/dist/quicklisp/2014-01-13/distinfo.txt" :replace t)

For more information about reverting, see Going back in (dist) time.


  • Montezuma is back in Quicklisp after it was adopted by sharplispers and patched to build on the latest SBCL
  • iolib has been updated from 0.7.0 to the current git; there are substantial changes, including using g++ to grovel constants and requiring an external C library (libfixposix)
  • system metadata indexes have been generated with a new program, so please let me know if you have any problems loading anything
Feel free to send me feedback via zach@quicklisp.org or the Quicklisp mailing list.



Recovering from yesterday's update

Yesterday's client update has a problem. If you upgrade from an existing installation, a critical file named client-info.sexp is missing. Its absence causes errors when trying to update again.

On SBCL, the error looks like this:

    error opening #P".../client-info.sexp":
      No such file or directory

On Clozure CL, it looks like this:

    > Error: No such file or directory : #P".../client-info.sexp"

Other implementations present similar error messages.

If you are encountering this problem, evaluate this:

(ql-http:fetch "http://beta.quicklisp.org/client/2014-01-28/client-info.sexp" (ql-setup:qmerge "client-info.sexp"))

If you aren't having any problems, there's no need to use this bit of code.

After fetching client-info.sexp, you should be able to evaluate (ql:update-client) without encountering any errors.

I've uploaded a fixed version of the client that compensates for the missing file, so future updates should not signal this missing file error. If you have any problems or issues with Quicklisp, please feel free to email me, email the mailing list, or discuss it on freenode #quicklisp.



Client update now available, and a bit of GPG

Client updates

edit There is a problem with the update. If you're having a problem related to client-info.sexp, I'll post a fix shortly. Sorry about the hassle!

The Quicklisp client updates I described last week are now part of Quicklisp. If you install Quicklisp from scratch with today you will be using the new client versioning system. To update an existing Quicklisp installation, use(ql:update-client).

This update provides several new options in quicklisp-quickstart:install:
  • :dist-url can be used to specify the initial dist version to use at installation time. Valid URLs can be obtained from an existing Quicklisp installation by evaluating one of the new functions (ql:dist-url "quicklisp") or (ql:available-dist-versions "quicklisp")
  • :client-url can be used to specify the initial client version to use at installation time. Valid URLs can be obtained from an existing Quicklisp installation by evaluating one of the new functions (ql:client-url) or (ql:available-client-versions)
There is also a new function, (ql:install-client :url url), that can be used to change the client version of an existing Quicklisp installation.

The ability to easily install (or go back to) a known-working client sets the stage for a pretty big Quicklisp client change. In the next few days I'm going to update Quicklisp to require ASDF 3, which it will fetch automatically if needed. If that change breaks your project, you will have a safety net: you can always go back to the previous version of the Quicklisp client. (If it breaks too many projects, Quicklisp itself will go back to a previous version of ASDF.)

If you have any trouble with this new Quicklisp setup, please let me know at xach@clozure.com. You can also discuss it on the mailing list or talk to me in realtime (if I'm around) in #quicklisp on freenode.

GPG signatures

I have created a new GPG key, release@quicklisp.org, for signing Quicklisp-related programs and metadata. You can get the key from various keyservers, i.e. "gpg --keyserver pgp.mit.edu --recv-keys 028B5FF7", or from http://beta.quicklisp.org/release-key.txt.

Here are some examples of signed files:
In general, if a the file at URL "http://beta.quicklisp.org/whatever" has a signature, it is the same URL with ".asc" appended, e.g. "http://beta.quicklisp.org/whatever.asc". If you fetch both files, you can verify the signature with "gpg --verify whatever.asc whatever".

The Quicklisp client code does not yet verify signatures, but you may use these signatures to independently verify the Quicklisp code and metadata you have fetched. A future Quicklisp update will provide more built-in cryptographic verification.



Consistent configuration with Quicklisp

I've been working on two new capabilities in Quicklisp. The default setup won't change, but there will be new options to use when you need them.

First, the quickstart process (downloading and loading quicklisp.lisp) will let you select exactly which dist to use at installation time.

If your project critically depends on the state of the Quicklisp library world from July, you can get your project development environment set up almost instantly with the correct version at installation time. (This was always possible after installation, but now you can skip a number of tedious manual steps.)

Second, you can also choose what version of the Quicklisp client software to use at installation time. You can also install an older version after initial installation.

This has been difficult to do in the past without saving the software and keeping track of it yourself. But now you can use a specific version with a simple option at installation time or a single function call after installation.

What are these capabilities for?

If you're starting a new project, it's reasonable to use the latest of everything – Quicklisp and libraries together. That's the default setup of Quicklisp. But the Quicklisp code and the libraries change over time. If you install Quicklisp fresh on another computer, or update Quicklisp on your original computer, it may bring different code and newer libraries that interact with your project in unexpected ways. It's good to have both an easy way to make a new install with a configuration consistent with your original installation, and a way to go back to that consistent configuration if an update goes wrong.

This work is nearly done, but needs some testing to knock off the rough edges. If you're interested in helping me test things out, please send me an email at xach@clozure.com. edit If you'd like to see the code, it's in the "versions" branches of https://github.com/quicklisp/quicklisp-client/ and https://github.com/quicklisp/quicklisp-bootstrap/.

The work has been supported by my employer, Clozure Associates. If you need Quicklisp support or enhancement, or have other Lisp consulting needs, get in touch!