March 2015 Quicklisp dist update now available

New projects:
  • arrow-macros — arrow-macros provides clojure-like arrow macros and diamond wands. — MIT
  • buffalo — A LALR(1) parser generator for Common Lisp — MIT/X11
  • burgled-batteries — Lisp-Python interface — MIT
  • burgled-batteries.syntax — Embedded Python syntax for burgled-batteries — MIT
  • cl-libyaml — A binding to the libyaml library. — MIT
  • cl-mlep — cl-mlep is a Common Lisp Machine Learning library for Educational Purposes. — MIT
  • cl-mtgnet
  • cl-netstring-plus — A simple library for sending and receiving messages with a netstring-like encoding
  • cl-reddit — Reddit client api library — BSD
  • cl-yaml — A YAML parser and emitter. — MIT
  • cl4store — 4store — BSD
  • clavier — Clavier: A Common Lisp validation library — MIT
  • clipper — File attachment library. — MIT
  • clods-export — Common Lisp OpenDocument spreadsheet export library — MIT
  • common-doc-plump — Translate a Plump DOM into a CommonDoc document and back. — MIT
  • descriptions — A domain model meta level description library — MIT
  • eazy-process — Yet Another Portable Library for Process Handling / Subshell Invokation — MIT
  • hl7-client — hl7-client - send HL7-Messages over TCP/IP with MLLP — BSD
  • hl7-parser — Decoder and Encoder for ER7 formatted HL7-Messages — BSD
  • hyperluminal-mem — High-performance serialization library, designed for untrusted data — LLGPL
  • linewise-template — Linewise file/stream processor for code generation etc. — BSD-3-Clause
  • lisp-namespace — Provides LISP-N --- extensible namespaces in Common Lisp. — LLGPL
  • media-types — Query and compare media types. — MIT
  • ryeboy — Riemann client — BSD
  • shellpool — A library for running external programs from Common Lisp — MIT/X11-style
  • transparent-wrap — A signature-preserving wrapper generator for functions and macros. — LLGPL
  • trivial-debug-console — A library for a well-behaved debug console
  • vertex — A markup language with TeX syntax. — MIT
  • weft
  • workout-timer — Workout timer — MIT
Updated projects: architecture.service-provider, asdf-linguist, avatar-api, basic-binary-ipc, binge, blackbird, caveman, chanl, chillax, chrome-native-messaging, cl+ssl, cl-acronyms, cl-ana, cl-ansi-term, cl-async, cl-autowrap, cl-charms, cl-cli, cl-colors, cl-conspack, cl-csv, cl-custom-hash-table, cl-db3, cl-dbi, cl-devil, cl-fsnotify, cl-gobject-introspection, cl-gss, cl-i18n, cl-l10n, cl-libuv, cl-marshal, cl-messagepack, cl-mock, cl-murmurhash, cl-mysql, cl-openal, cl-opengl, cl-prime-maker, cl-python, cl-rabbit, cl-read-macro-tokens, cl-readline, cl-redis, cl-rethinkdb, cl-rlimit, cl-sdl2, cl-slug, cl-speedy-queue, cl-twitter, cl-webkit, cl-xul, cl-yaclyaml, clack, clack-errors, clfswm, clim-widgets, clip, clos-fixtures, closer-mop, clot, clpmr, clsql, clss, clx, cobstor, colleen, com.informatimago, common-doc, common-html, commonqt, corona, crane, defclass-std, defenum, dissect, djula, drakma-async, eazy-gnuplot, eazy-project, eco, esrap, esrap-liquid, external-program, fast-http, form-fiddle, gbbopen, gendl, http-body, hunchensocket, integral, iolib, lisp-executable, lparallel, lquery, lucerne, mgl-pax, micmac, mime4cl, mk-string-metrics, modularize-interfaces, myway, named-readtables, net4cl, nibbles, optima, osicat, packet, pgloader, piping, plump, pooler, qlot, qmynd, qtools, quri, racer, rcl, rock, scalpl, sclf, sdl2kit, serapeum, sheeple, simple-currency, skippy, smtp4cl, south, spinneret, squirl, st-json, staple, stmx, stumpwm, sxql, talcl, trivial-arguments, trivial-benchmark, trivial-download, trivial-extract, trivial-mimes, trivial-update, unix-options, until-it-dies, utils-kt, utm, verbose, weblocks, weblocks-utils, woo, wookie.

Removed projects: 3bil, cl-binaural, cl-openstack, cluck, lisphys, oct.

I removed 3bil because it is effectively unmaintained and apparently unused. cl-openstack is no longer maintained; a replacement library will soon be available. I can't build cl-binaural, cluck, lisphys, or oct on SBCL any more.

Sorry to skip a release in February. A holiday and a number of library problems conspired to hold off the release. As a result there are a larger number of updates this month than usual. If you have any problems, please don't hesitate to discuss them on the mailing list or email me directly.

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


February 2015 download stats

Here are the top 100 download for last month:

 4270   alexandria
 2825   trivial-features
 2753   cl-ppcre
 2740   babel
 2464   closer-mop
 2316   cl-fad
 2309   bordeaux-threads
 2211   cffi
 2126   iterate
 2103   trivial-garbage
 2063   slime
 2042   flexi-streams
 1944   trivial-gray-streams
 1867   split-sequence
 1771   anaphora
 1744   chunga
 1651   cl+ssl
 1646   usocket
 1601   local-time
 1558   cl-base64
 1441   metabang-bind
 1327   trivial-backtrace
 1304   named-readtables
 1292   drakma
 1277   nibbles
 1249   puri
 1234   ironclad
 1230   md5
 1206   optima
 1152   chipz
  988   trivial-types
  948   hunchentoot
  893   cl-utilities
  885   cl-unicode
  813   rfc2388
  784   let-plus
  777   quicklisp-slime-helper
  777   stefil
  753   cl-interpol
  745   trivial-utf-8
  729   cl-syntax
  724   cl-annot
  714   quri
  706   postmodern
  658   parse-number
  630   fiveam
  611   cl-colors
  591   salza2
  561   cl-json
  542   log4cl
  514   cl-ansi-text
  511   lparallel
  500   cl-who
  482   prove
  482   ieee-floats
  481   zpb-ttf
  473   zpng
  461   vecto
  453   cl-sqlite
  437   uuid
  433   cl-vectors
  425   cl-yacc
  423   st-json
  417   asdf-system-connections
  403   osicat
  394   parenscript
  385   metatilities-base
  383   cl-containers
  374   clx
  368   buildapp
  367   closure-common
  364   clack
  355   yason
  346   command-line-arguments
  345   fare-utils
  341   iolib
  335   cxml
  335   cl-marshal
  324   static-vectors
  312   fare-quasiquote
  309   xsubseq
  308   dynamic-classes
  304   py-configparser
  301   cl-markdown
  299   fast-http
  297   asdf-finalizers
  293   cl-log
  288   external-program
  286   trivial-indent
  286   cl-abnf
  282   garbage-pools
  279   plump
  279   cl-mssql
  274   contextl
  271   cl-opengl
  268   trivial-mimes
  264   html-template
  262   fast-io
  251   array-utils
  249   zs3


January 2015 download stats

Here are the top 100 downloads for last month:
  5231   alexandria
  3821   cl-ppcre
  3799   trivial-features
  3664   babel
  3050   cffi
  2923   cl-fad
  2848   closer-mop
  2821   flexi-streams
  2770   slime
  2765   bordeaux-threads
  2632   iterate
  2631   trivial-gray-streams
  2629   trivial-garbage
  2276   split-sequence
  2221   named-readtables
  2172   chunga
  2147   anaphora
  2024   local-time
  1972   usocket
  1965   cl+ssl
  1931   md5
  1849   cl-base64
  1812   trivial-backtrace
  1573   metabang-bind
  1567   nibbles
  1531   ironclad
  1517   drakma
  1511   hunchentoot
  1429   puri
  1389   trivial-types
  1360   let-plus
  1282   cl-unicode
  1261   rfc2388
  1255   cl-syntax
  1245   chipz
  1235   cl-colors
  1184   cl-annot
  1171   cl-ansi-text
  1106   trivial-utf-8
  1074   optima
  1068   cl-interpol
  1057   cl-utilities
  1032   prove
   978   postmodern
   956   log4cl
   912   stefil
   897   cl-json
   871   quicklisp-slime-helper
   797   st-json
   787   parse-number
   753   cl-marshal
   692   fast-http
   674   http-body
   674   cl-sqlite
   668   cl-who
   656   osicat
   646   trivial-mimes
   610   circular-streams
   584   xsubseq
   576   quri
   571   trivial-arguments
   571   fiveam
   544   clack
   543   clx
   538   iolib
   536   salza2
   528   lparallel
   484   cl-dbi
   482   ieee-floats
   482   sxql
   464   parenscript
   454   closure-common
   448   symbol-munger
   447   asdf-system-connections
   437   fare-utils
   436   cl-opengl
   428   cxml
   409   cl-containers
   397   uuid
   395   metatilities-base
   391   static-vectors
   385   zpb-ttf
   373   yason
   369   html-template
   362   buildapp
   360   fare-quasiquote
   355   vecto
   351   ningle
   351   fast-io
   337   cl-yacc
   337   cl-async
   330   cl-vectors
   324   esrap
   319   command-line-arguments
   317   zpng
   313   do-urlencode
   310   myway
   309   map-set
   301   arnesi
   301   external-program


Some problems when adding libraries to Quicklisp

Here are a few of the problems I encounter when trying to add a library to Quicklisp, as well as how to prevent or fix them.

Library does not build without warnings. As mentioned a little while ago, ql:quickload normally muffles warnings, even, unfortunately, for non-Quicklisp projects. The Quicklisp dist build environment does not muffle any warnings, and any that occur will break the build for the library. Make sure you use the :verbose t option to ql:quickload to see any warnings that crop up during compilation.

Library does not build at all.
 I think this happens when someone sees a library that seems cool, they find it is absent from Quicklisp, and they request its addition without trying it first. Please try it first! It's easy to try libraries: fetch the code, put it into ~/quicklisp/local-projects/, look for *.asd files, and use ql:quickload to load one. If it doesn't load, it may prove difficult for me to try to add it to Quicklisp. And if it doesn't have *.asd files, I can't add it to Quicklisp at all.

Library is missing critical metadata. Make sure the library has :author, :description, and :license in each ASDF system definition.

Library depends on another library that is not available in Quicklisp. It's fine to request the addition of multiple related libraries. It helps if you specify the order in which they need to be added to work.

Library system name conflicts with existing system. This happens sometimes when a library bundles its own private copy of a library already present in Quicklisp. In that case, it is usually best to unbundle the private copy, but I can also work around it on my end if necessary. Conflict also happens when someone just doesn't know that a system name is already in use. To check for conflicts, use (ql-dist:provided-systems t) to get a list of existing systems in Quicklisp.


Getting a library into Quicklisp

If there's a library you like, and you'd like to see it available to download and install via the standard Quicklisp dist, here's what to do.

First, make sure the license terms of the code allow for its redistribution. I can't add things with restrictive licenses or with licenses that are missing or unclear.

Second, make sure it works on more than just one implementation of Common Lisp. Quicklisp is for portable libraries. (In the future, I hope to make it easy to create separate new dists specifically for implementation-specific code, but even then, the main Quicklisp dist will be for portable libraries.)

As a side-effect of how I build and test the dist, it must also work on SBCL on Linux/AMD64. That means, unfortunately, that a great portable library that works on three different Windows CL implementations, but not on Linux, cannot be added. I hope to fix this limitation in the future.

Third, make sure the library has certain ASDF system definition metadata: :license, :author, and :description. It also should have a README file in some form or another. A note about the README: it should give at least short overview of what the library is for. "The Foo library is an implementation of Ruby's Snorfle in Common Lisp" is not a good overview; give me an idea of what it actually does, instead, e.g. "The Foo library fetches and parses movie showtime information." It's good to also provide information about how to report bugs and how to contact the author.

Fourth, make sure it builds with ASDF, rather than an external-to-Lisp build mechanism. I can't add libraries that require special configuration or action outside of ASDF. For example, if you have to edit a source file to configure library or resource directories before building, I can't add it to Quicklisp. If the library can be loaded with just (asdf:load-system ...), it's good.

Finally, let me know about it. I prefer to track requests via github's issue system, but you can also send me an email as well. It suffices to write something like "Please add the foo library, which is available from http://www.example.com/foo.tgz. The homepage is http://www.example.com/foo/."

It's important to note that I don't consider a library's quality or purpose when adding it to Quicklisp. It doesn't matter if you're submitting your own library. If you want it added, and it fits the above criteria, I will almost certainly add it.

There are a few exceptions: projects that require complicated or obscure foreign libraries, projects that can only be downloaded via some ad-laden link system like SourceForge, projects that use CVS, and anything else that makes it difficult for me to fetch or build the project.

When you open a github issue for a library, I'll occasionally update the issue's status. I will add issue comments if I have any problems building, or if any required bit of information (license, ASDF metadata, README) is missing.

Barring any problems, when the github issue for a library is closed, the latest Quicklisp dist has been released and it includes the new library. (Sometimes I mess this up, so if it seems like the library is still missing after a dist update, feel free to get in touch.)

How about updates? Many libraries do not need any extra work to get updated regularly in Quicklisp. For example, if a library can be downloaded from an URL like "http://example.com/cool-project/cool-project-latest.tgz", Quicklisp will detect when a new file is posted. For libraries downloaded from version control systems like git, updates are also automatically fetched. Only when a library uses a fixed URL per version is it necessary to open a github issue for updates.

Quicklisp dist updates happen about once per month. If the library is updated upstream, those updates will only be reflected after the next Quicklisp dist update. Each dist update freezes the state of the Quicklisp library "world" until the next monthly update.

If you'd like to see the process in action, watch the quicklisp-projects issue page for a month to see how things typically work.

If you have any questions about the process, feel free to get in touch.


December 2014 download stats

Here are the top 100 downloads from Quicklisp for last month:

  3052   alexandria
  2743   cl-ppcre
  2619   babel
  2009   cffi
  1886   cl-fad
  1829   flexi-streams
  1757   trivial-features
  1670   bordeaux-threads
  1597   slime
  1552   closer-mop
  1541   trivial-gray-streams
  1523   chunga
  1390   trivial-garbage
  1267   cl+ssl
  1239   anaphora
  1152   usocket
  1106   hunchentoot
  1097   drakma
  1092   trivial-backtrace
  1085   cl-base64
  1083   iterate
  1077   local-time
  1011   split-sequence
   987   md5
   963   nibbles
   920   ironclad
   848   let-plus
   820   cl-unicode
   792   puri
   761   rfc2388
   736   cl-colors
   696   chipz
   690   quicklisp-slime-helper
   683   named-readtables
   653   metabang-bind
   635   cl-json
   626   cl-who
   624   cl-ansi-text
   561   parse-number
   556   prove
   548   cl-interpol
   533   postmodern
   506   clx
   501   yason
   443   log4cl
   440   lparallel
   436   trivial-utf-8
   422   salza2
   413   cl-csv
   406   optima
   392   osicat
   390   rt
   381   asdf-system-connections
   369   clack
   368   trivial-types
   368   parenscript
   358   iolib
   356   cl-containers
   356   cl-syntax
   347   metatilities-base
   340   cl-utilities
   340   cl-opengl
   323   cl-annot
   316   ieee-floats
   307   esrap
   294   uuid
   289   cl-sqlite
   281   vecto
   274   html-template
   273   cl-async
   271   zpb-ttf
   269   closure-common
   262   restas
   262   buildapp
   258   external-program
   257   command-line-arguments
   254   uiop
   250   cl-yacc
   249   caveman
   244   asdf-finalizers
   241   weblocks
   240   cl-async-future
   238   dynamic-classes
   233   cl-markdown
   232   zpng
   229   cxml
   226   static-vectors
   225   py-configparser
   224   uffi
   219   mcclim
   219   cl-vectors
   216   fiveam
   210   quri
   209   cl-closure-template
   208   cl-log
   208   cl-libevent2
   206   cl-abnf
   204   cl-dbi
   204   cl-db3
   203   ningle

I just started systematically managing Quicklisp HTTP logs, so I will soon present information like this on a regular basis.


January 2015 Quicklisp dist update now available

New projects:
  • asdf-contrib — Extensions to ASDF — MIT
  • asdf-flv — ASDF support for file-local variables. — GNU All Permissive
  • chrome-native-messaging — A package to communicate with a Chrome extension as the native application — MIT License
  • cl-ansi-term — library to output formatted text on ANSI-compliant terminals — GNU GPL v.3
  • cl-binaural — Utilities to generate binaural sound from mono — GPL
  • cl-hash-util — A simple and natural wrapper around Common Lisp's hash functionality. — MIT
  • cl-hue — Client for Philips Hue light controller — Apache 2
  • cl-junit-xml — Small library for writing junit XML files — MIT
  • cl-mop — Simple, portable tools for dealing with CLOS objects. — Expat (MIT-style)
  • cl-readline — Common Lisp bindings to GNU Readline library — GNU GPL v.3
  • cl-slug — Small library to make slugs, mainly for URIs, from english and beyond. — LLGPL
  • clim-widgets — small collection of clim widgets — BSD Simplified
  • common-doc — A framework for representing and manipulating documents as CLOS objects. — MIT
  • common-html — An HTML parser/emitter for CommonDoc. — MIT
  • defclass-std — A shortcut macro to write DEFCLASS forms quickly. — LLGPL
  • defenum — C++ and Java styled 'enum' in Common Lisp — MIT
  • generic-comparability — CDR-8 implementation — LLGPL
  • lev — libev bindings for Common Lisp — BSD 2-Clause
  • lucerne — A Clack-based microframework. — MIT
  • perlre — perl regular expression api - m// and s/// - for CL-PPCRE with CL-INTERPOL support — BSD Simplified --- the same as let-over-lambda
  • trivial-update — tools for easy modification of places with any given function — MIT
Updated projects: arc-compat, avatar-api, blackbird, buildnode, caveman, cl-acronyms, cl-ana, cl-ansi-text, cl-async, cl-autowrap, cl-base58, cl-creditcard, cl-dbi, cl-gss, cl-inflector, cl-libuv, cl-marshal, cl-mock, cl-mustache, cl-opengl, cl-pass, cl-rabbit, cl-randist, cl-random, cl-sdl2, cl-virtualbox, cl-webkit, clack, clack-errors, clos-fixtures, closer-mop, clss, clx, colleen, com.informatimago, commonqt, corona, crane, css-selectors, datafly, eco, esrap, exponential-backoff, fast-http, fset, gbbopen, gendl, hdf5-cffi, hermetic, http-body, hu.dwim.stefil, integral, introspect-environment, iolib, jsown, lambda-fiddle, lisp-unit2, local-time, lol-re, ltk, mk-string-metrics, modularize, modularize-hooks, modularize-interfaces, new-op, osicat, plump, plump-tex, pp-toml, prove, pzmq, quri, rock, rutils, scalpl, sdl2kit, serapeum, sheeple, slime, spinneret, stumpwm, sxql, template, trivial-arguments, trivial-download, trivial-extract, trivial-features, trivial-garbage, weblocks, weblocks-utils, websocket-driver, woo, wookie, wuwei, xsubseq.

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

To install exactly this update, use (ql-dist:install-dist "http://beta.quicklisp.org/dist/quicklisp/2015-01-13/distinfo.txt" :replace t).

This Quicklisp update is supported by my employer, Clozure Associates. If you need commercial support for Quicklisp, or any other Common Lisp programming needs, it's available via Clozure Associates.