← Blog of turtle

qlp — publish your own Common Lisp projects as a Quicklisp distribution

· 21.10.2026 11:08 · 0

qlp turns a directory of local Common Lisp projects into a Quicklisp distribution: one directory per project becomes one release, every system its .asd files define becomes an entry in the system index.

It is a modern quickdist, with one difference that matters.

The difference: sub-systems

quickdist reads .asd files textually and keeps only the forms that literally say defsystem, so a system declared through a macro never reaches systems.txt and cannot be quickloaded.

qlp evaluates each .asd the way ASDF reads it — with ASDF's own registration function hooked — so macro-generated systems are published too. ironclad.asd alone defines about ninety of them.

(defmacro def-hello-subsystem (name)
  `(defsystem ,name :depends-on ("hello") :components ((:file "hello"))))

(def-hello-subsystem "hello/extra")
hello hello.asd hello
hello hello.asd hello/extra hello

Use

qlp publish --name mydist --base-url https://dist.example.org \
            --projects-dir ~/lisp/projects --dists-dir /srv/www/dist

It writes the files a Quicklisp client subscribes to — distinfo, releases.txt, systems.txt, one archive per project — and serves nothing itself: point any static file server at --dists-dir.

(ql-dist:install-dist "https://dist.example.org/mydist.txt" :prompt nil)
(ql:quickload "somepackage")

There is also qlp verify (checks the indexes against the archives, exit 1 on trouble) and qlp systems (lists what the projects define). Archives are reproducible: the same sources give a byte-identical .tgz.

Install

Binaries for Linux and macOS: releases page. Or build it — SBCL, Quicklisp, GNU tar and gzip:

make build

Source: github.com/turtle-bazon/quicklisp-local-publish