Skip to content

A curated list of awesome Common Lisp frameworks, libraries and other shiny stuff.

License

Notifications You must be signed in to change notification settings

CodyReichert/awesome-cl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Awesome Common Lisp Awesome Assertible status

A curated list of awesome Common Lisp libraries.

For awesome software, see lisp-lang.org's success stories and the awesome-cl-software list.

All libraries listed here are available from Quicklisp unless stated otherwise. The ones marked with a ⭐ are so widespread and solid that they became community standards. You can't be wrong with them. This is the case for Quicklisp, BordeauxThreads and such. Libraries denoted with a 👍 are the ones we like and want to promote here at the Awesome-cl list. They proved solid, they may solve a problem better than a community standard but they aren't as widespread, or not considered as stable. For example, we prefer Spinneret over Cl-Who.

Add something new! See the contributing section for adding something to the list.

This is released under the GNU Free Documentation License - its text is provided in the LICENSE file. This repository is also mirrored on NotABug - a fully-free (as in libre) alternative to Github. Preference is given to free software and sellers who aren't evil for physical resources.

Table of Contents

Artificial Intelligence (AI, LLMs)

Around the OpenAI API:

demos: cl-rag-example and cl-chat, a LLM chat library and web UI.

Educational:

Audio

Music composition:

  • OM7 - a new implementation of the OpenMusic visual programming and computer-aided composition environment including a number of improvements on graphical interface, computational mode, and connection to external software libraries. GPL3.
    • an extension: rq - a library for rhythm transcription in OpenMusic (version 6.10 and later). demo video. GPL3.
  • Incudine - Music/DSP programming environment for Common Lisp. Useful to design software synthesizers or sound plugins from scratch. It is also a compositional tool that allows to produce high quality sounds controllable at the sample level, defining and redefining the digital signal processors and the musical structures on-the-fly.
  • CLM - Common Lisp Music is a music synthesis and signal processing package in the Music V family. It provides much the same functionality as Stk, Csound, SuperCollider, PD, CMix, cmusic, and Arctic — a collection of functions that create and manipulate sounds, aimed primarily at composers (in CLM's case anyway).
  • Slippery Chicken - Algorithmic composition library which outputs Midi, Common Music Notation, pdf-score via Lilypond and sound via Common Lisp Music. GPL3.
  • Common Music - the repository of an ancient version of Common Music (version 2.12.0), the presumably last version which ran on Common Lisp dating from around 2007-09, before work on Common Music shifted to (scheme-based) cm3.
    • note: old project but working.
    • cm-incudine - extends Common Music 2 with realtime capabilities. GPL2.
  • cl-patterns - a system for composing music via Lisp code, heavily inspired by SuperCollider’s patterns system, with aims to implement much of it, but in a more robust, expressive, consistent, reflective, and lispy way. Audio output through SuperCollider, with preliminary support for Incudine, and MIDI through ALSA.
  • Music - A framework for musical expression in Lisp with a focus on music theory (built from scratch, unrelated to Common Music).

Decoders, sound processing:

  • Harmony - A real-time sound processing and playback system. zlib.
    • "provides you with audio processing tools as well as an audio server to play back music, sfx, and so forth."
    • using cl-mixed for the mixing and sound processing library.
  • easy-audio - a collection of audio decoders and metadata readers.

others:

  • scheduler - The time based musical event scheduler for Common Lisp. Apache2.0.
  • Common Music Notation - Common Music Notation (CMN) provides a package of functions to hierarchically describe a musical score. Public domain.
  • osc - an implementation of the Open Sound Protocol. LGPL2.1.

bindings and clients to other software and libraries:

and more audio software targetting musicians on awesome-cl-software#audio (Opus Modus, OpenMusic…).

Build Systems

  • ASDF - Another System Definition Facility; a build system for Common Lisp. Expat. Quicklisp (see library manager) uses ASDF under the hood.
    • known ASDF extensions, such as asdf-system-connections, that lets you specify systems that are automatically loaded when two other systems are loaded, to connect them.
  • asdf-linguist - Extensions for ASDF. Expat.
  • asdf-viz - a tool to visualize the library dependencies of ASDF systems, the call graph of a function and the class inheritances. LLGPL.

See also:

  • modularize - A modularization framework for Common Lisp. zlib.
    • provides a common interface to segregate major application components.
    • for instance, by adding module definition options you can introduce mechanisms to tie modules together in functionality, hook into each other and so on.
    • acts as a wrapper around defpackage and integrates into ASDF.

Compilers, code generators

APL

  • April - The APL programming language (a subset thereof) compiling to Common Lisp. Replace hundreds of lines of number-crunching code with a single line of APL. Apache2.

C, C++

  • cmacro - Lisp macros for C. MIT.
  • C-mera - a source-to-source compiler that utilizes Lisp's macro system for meta programming of C-like languages. GPL3.
  • lispc - a powerful "lispsy" macrolanguage for C. MIT.
  • with-c-syntax - a fun package which introduces the C language syntax into Common Lisp. (Yes, this package is not for practical coding, I think.) WTFPL Licence.
  • ecrepl - an interactive REPL for the C language. BSD_2Clause.
  • Software-Evolution-Library - The SEL enables the programmatic modification and evaluation of software (C/C++ support using Clang, compiled assembler, and linked ELF binaries). GPL3.
  • vacietis - C to Common Lisp compiler. LGPL3.

Cryptography

  • Ironclad - A library of crypto functions for Common Lisp. Not considered secure, but is still useful for the message digest functions. Expat.
  • crypto-shortcuts - Collection of common crypto shortcuts. zlib.
  • trivial-ssh - An SSH client library. Expat.
  • cl-ssh-keys - Common Lisp system for generating and parsing of OpenSSH keys. BSD_3Clause.
  • cl-bcrypt - Common Lisp system for parsing and generating bcrypt password hashes. BSD_3Clause.
  • gpgme (GnuPG Made Easy) is the standard library to access GnuPG functions from programming languages. It provides an official Common Lisp system.
  • cl-frugal-uuid - Common Lisp UUID library with zero dependencies. MIT.

Cryptocurrencies

  • bitcoin-core-rpc - a (hopefully) complete Bitcoin Core RPC client. AGPL-3.0+
  • bp - Bitcoin Protocol components in Common Lisp. MIT.
  • cl-monero-tools - Common Lisp toolbox to work with the Monero cryptocurrency. GPL3. Not in Quicklisp.
  • peercoin-blockchain-parser - parse the blockchain contained in a file and export some of its data to a text file, a SQL script or a database. It can also create a database using the RPC of a Peercoin daemon as source of data instead of a blockchain file. LGPL3. Not in Quicklisp.
  • peercoin-calculator - This program gives you the probability of generating a POS or POW block within 10 minutes, 24 hours, 31 days, 90 days and 1 year, as well as the reward that can be expected. GUI in Qt. GPL3. Not in Quicklisp.
  • peercoin-vote - A voting system based on data from the blockchain (addresses and balances). GPL3. Not in Quicklisp.
  • stacks-api - a Stacks API client. AGPL-3.0

See also legochain, a simple educational blockchain; emotiq, a next-generation blockchain with an innovative natural-language approach to smart contracts built in Common Lisp (stopped).

Database

  • NEW endatabas - Schemaless SQL document database with full history. AGPL-3.0.
    • built in Common Lisp and Rust.
    • in development, alpha product scheduled for Q2 of 2024. roadmap.
  • cl-yesql - SQL statements live in their own files, in SQL syntax, and are imported into Lisp as functions. You are not limited to the features a DSL supports. Based on Clojure's Yesql. MIT.

ORMs

Persistent object databases

See also Clache, that can save any object on disk.

Graph databases

  • AllegroGraph - a high-performance, multi-model (document and graph), entity-event knowledge graph technology.
    • Proprietary, with a free version of a limit of 5 million RDF triples.
    • with a hosted version
    • AllegroGraph 8.0 (released December, 2023) "incorporates Large Language Model (LLM) components directly into SPARQL along with vector generation and vector storage for a comprehensive AI Knowledge Graph solution."
  • cl-agraph, a minimal client for AllegroGraph.
  • neo4cl - a library for interacting with Neo4J. Sends Cypher queries to a Neo4J server, and decodes the responses into something useful for processing in CL. Apache2.
    • and maybe: cl-neo4j - a thin neo4j RESTFUL client interface.
  • vivace-graph - graph database & Prolog implementation. Takes design inspiration from CouchDB, neo4j and AllegroGraph. It implements an ACID-compliant object graph model with user-defined indexes and map-reduce views. It also implements a master / slave replication scheme for redundancy and horizontal read scaling. Querying the graph is accomplished via a number of Lisp methods or via a Prolog-like query language. MIT.
    • "I have used Vivace Graph as an online catalog for millions of products, as the back end for a complex, adaptable VoIP-based IVR, as well as data store for several complex big data analysis systems, and finally as the engine for two recommender systems." (issue #23)
    • "Why is vivace graph so fast? I have been comparing it with SQL-based approach and Neo4j, and vivace graph is much, much faster."

and also:

  • restagraph - an app that dynamically generates REST APIs for a Neo4j database, using a schema defined within the database. GPL3.

Wrappers

Migration tools

To third parties

  • dyna - an AWS DynamoDB ORM. MIT.
  • cl-influxdb - an interface to the Time Series Database InfluxDB. MIT.
  • pzmq - ZeroMQ 4.0+ Common Lisp bindings. Unlicense.

Tools

Data Structures

  • 👍 str - a modern, simple and consistent string manipulation library. MIT.
  • 👍 FSet - A functional, set-theoretic collections data structure library. LLGPL.
  • trivial-extensible-sequences - Portability library for the extensible sequences protocol (SBCL documentation). zlib.
  • bst - Binary Search Tree. GPL3.
  • pileup - a portable, performant, and thread-safe binary heap for Common Lisp. MIT.
  • sycamore - a fast, purely functional data structure library. BSD_3Clause.
  • genhash – hash table implementation with API from generic methods. Public domain.
  • cl-ctrie - lock-free, concurrent, key/value index with efficient memory-mapped persistence and fast transient storage models. MIT.
  • cl-data-structures - a portable collection of data structures and algorithms (mainly dicts and sequences, with some statistical functions). BSD.
  • listopia - a list manipulation library inspired by Haskell's Data.List. LLGPL.
  • hash-set - a convenience library implementing hash sets on top of CL hash tables The Unlicense
  • bit-smasher - Common Lisp library for handling bit vectors, bit vector arithmetic, and type conversions. MIT.
  • cl-containers - an extensive library of data structures and utilities - queues, trees, heaps, doubly-linked lists, sets, bags,... MIT
  • cl-competitive - Common Lisp algorithms collection for competitive programming. Public domain, CCO or MIT.
  • nonempty - Non-empty collections for Common Lisp. LGPL3.
  • cl-hash-util - Hash-table creation, access, and manipulation utilities. MIT.

Accessing data structures:

  • 👍 access - Consistent and nested access to most common data structures. BSD_3Clause.
  • modf - a setf-like macro for functional programming.

Other data structures:

  • bitfield - Efficiently represent several finite sets or small integers as a single non-negative integer. MIT.

Docker images

  • cl-docker-images - Docker images for ABCL, CCL, ECL, and SBCL on Windows (amd64) and Alpine and Debian (amd64, arm64, arm/v7) BSD_2Clause.
  • base-lisp-image - base Docker image for Common Lisp projects with SBCL or CCL and the latest ASDF, Qlot and Roswell.
  • archlinux-cl - Docker Arch Linux image with Common Lisp implementations (7 to this day). MIT.

Foreign Function Interface, languages interop

C

Clojure

  • ABCLJ - dead easy Clojure to Common lisp interop. EPL-2.0.

In development:

  • Cloture - Clojure in Common Lisp.

Cloture is in very early (pre-alpha) stages, but it has progressed far enough to load clojure.test, allowing the test suite to actually be written in Clojure.

See also those libraries:

  • cl-oju - a few idioms, mostly relating to sequences, that I miss when writing Common Lisp. MIT.
  • clj-con - Clojure-style concurrency operations in Common Lisp. MIT.
  • clj-re - Clojure-style regular expression functions.
  • clj-arrows - Clojure-compatible threading/transformation/arrow macros for Common Lisp.
  • with-redefs - enables rebinding of global functions, inspired by Clojure's with-redefs.

Erlang

  • CLERIC - a Common Lisp Erlang Interface. An implementation of the Erlang distribution protocol, comparable with erl_interface and jinterface. MIT.

Java

  • cl+j - A JNI-based interface to a JVM via CFFI. Not available on Quicklisp. Does not reliably work with all implementations. Expat.

Objective-C

  • objc-lisp-bridge - A portable reader and bridge for interacting with Objective-C and Cocoa. MIT.

Python

  • burgled-batteries - A bridge between Python and Common Lisp. The goal is that Lisp programs can use Python libraries. Not available on Quicklisp. MIT.
  • cl4py - The library cl4py (pronounce as clappy) allows Python programs to call Common Lisp libraries. MIT.
  • py4cl - A library that allows Common Lisp code to access Python libraries. It is basically the inverse of cl4py. MIT.
    • its fork py4cl2, at first less stable, now more developped and faster.
    • py4cl2-cffi - CFFI based alternative to py4cl2.
      • "When capable, the CFFI approach can be a 50 times faster than py4cl2."

See also async-process.

  • cl-python - an implementation of Python in Common Lisp. LLGPL, not under active development.

.Net Core

  • Bike - a cross-platform .Net Core interface. MIT.

Miscellaneous

  • Foil - A foreign object interface; works with the JVM and CLI. Not available on Quicklisp. CPL 1.0.

For Emacs Lisp:

  • CEDAR - an advance interactive development environment aiming to be Emacs compatible with all the features that come with it. (WIP)
  • CLOCC's elisp.lisp - Emacs Lisp in Common Lisp.
    • implementation of the Emacs Lisp language as a Common Lisp package. [1999]
    • does not attempt to reimplement the library of functions provided in Emacs to manipulate buffers and other related objects, so it focuses on the "pure" Emacs Lisp language; but it was able to run the non-UI parts of the Emacs Calendar. (S. Monnier, M. Sperber)

Game Development

  • Trial - Trial is an OpenGL game engine with a heavy focus on modularity. It is supposed to provide a large toolkit of useful bits and pieces from which you can create a game. zlib.
    • the Kandria game is built with Trial.
  • trivial-gamekit – with this small framework you would be able to make simple 2D games: draw basic geometric forms, images and text, play sounds and listen to mouse and keyboard input. MIT.
  • virality - A component-based game engine written in Common Lisp MIT.
  • Xelf - Extensible game library. Not available on Quicklisp. GNU LGPL2.1.

Utilities:

  • cl-gamepad - Access to gamepads and joysticks on Windows, Mac OS, and Linux. zlib.
  • cl-mpg123 and cl-out123, bindings libraries for libmpg123 and libout123 respectively, giving you fast and easy to use mp3 decoding and cross-platform audio output. zlib.

Graphics

These are libraries for working with graphics, rather than making GUIs (i.e. widget toolkits), which have their own section.

  • Sketch - A CL framework for the creation of electronic art, graphics, and lots more. MIT.
  • cl-svg - A basic library for producing SVG files. Expat.
  • dufy - exact color manipulation and conversion in various color models. MIT.
  • opticl - a library for representing and processing images. BSD_2Clause.
  • Varjo - Lisp to GLSL translator. BSD_2Clause.
  • Vecto - Simple vector drawing library. FreeBSD.
  • zpng - A library for creating PNG files. FreeBSD.
  • pngload-fast - A PNG (Portable Network Graphics) image format decoder in portable Common Lisp with an emphasis on speed. MIT.

Those are bindings:

  • cl-raylib NEW in 2023 - fully auto-generated Common Lisp bindings to Raylib and Raygui using claw and cffi-object. Apache 2.0.
  • glfw NEW in 2023 - An up-to-date Common Lisp bindings library to the most recent GLFW OpenGL context management library.
  • common-cv - the OpenCV (Open Source Computer Vision Library) binding library for CommonLisp. No license specified.
  • cl-cairo2 - Cairo bindings. Boost 1.0
  • cl-gd - A library providing an interface to the GD graphics library. FreeBSD.
  • cl-horde3d - FFI bindings to the Horde3D graphics library. Not available on Quicklisp. EPL 1.0
  • cl-jpeg - Baseline JPEG encoder and decoder library. 3-clause BSD.
  • cl-liballegro - Interface and bindings to the Allegro 5 game programming library. zlib.
  • cl-opengl - CFFI bindings to OpenGL, GLU and GLUT APIs. 3-clause BSD.
  • cl-sdl2 - Bindings for SDL2 using C2FFI. Expat.
  • CLinch - Common Lisp 2D/3D graphics engine for OpenGL. FreeBSD.
  • donuts - Graphviz interface for Common Lisp. Expat.
  • lispbuilder-sdl - A set of bindings for SDL. Expat.
  • lisp-magick-wand - ImageMagick bindings. BSD. Not in Quicklisp.
  • okra - CFFI bindings to Ogre. Not available on Quicklisp. 3-clause BSD.
  • cl-cuda - A library to use NVIDIA CUDA in Common Lisp programs. LLGPL.

GUI

For an overview and a tutorial on GUI toolkits, see the Cookbook/GUI.

  • LispWork's CAPI - A portable GUI toolkit, with mobile runtime. Proprietary, but comes with a free version.
  • Allegro's Common Graphics- a library of functions for writing windowized GUIs for Windows, Mac and Linux. Proprietary with a free version.
    • since Allegro 10.1 (March, 2022), the IDE and the Common Graphics toolkit runs in the browser.
  • 👍 Qtools - A Qt toolkit, based on CommonQt. zlib Also Qtools-ui (premade UI components), with videos.
  • CommonQt - A Common Lisp binding for Qt4 via QtSmoke. FreeBSD.
    • CommonQt5 - bindings for Qt5.
      • warn: currently difficult to install. Used in production© by SISCOG.
  • ltk - A binding for the Tk toolkit. LLGPL or GNU LGPL2.1.
    • LTk Examples - Provides LTk examples for the tkdocs tutorial.
    • LTk Plotchart - A wrapper around the tklib/plotchart library to work with LTk. This includes over 20 different chart types (xy-plots, gantt charts, 3d-bar charts etc...).
  • nodgui - Bindings for the Tk toolkit, based on Ltk, with syntax sugar and additional widgets. LLGPL.
    • 🎨 supports tk custom themes, such as ttkthemes and Forest-ttk-theme.
    • supports an SDL frame as an alternative to the Tk canvas when fast rendering is needed. For 2D (pixel-based) and 3D rendering (using openGL).
  • IUP - CFFI bindings to the IUP Portable User Interface library (pre-ALPHA).
    • IUP is cross-platform (Windows, macOS, GNU/Linux, with new Android, iOs, Cocoa and Web Assembly drivers), has many widgets, has a small api and is actively developed.
    • has a web view.
  • 🆕 cl-gtk4 - GTK4/Libadwaita/WebKit binding for Common Lisp. LGPL3.
  • cl-cffi-gtk - Binding for GTK+3. GNU LGPL2.1.
  • cl-gtk2 - A binding for GTK+2. LLGPL.

But that's not all.

  • for Electron, see:
    • Electron-lisp-boilerplate - a rudimentary boilerplate for building Electron apps that start a Lisp process.
    • ceramic - a wrapper around simpler tools to create and build an Electron app for Common Lisp. It is currently broken and unmaintained, but some tools are workth having a look at.
    • NOTE: the main idea in embedding a lisp web app in Electron is to start the lisp webserver as an async process from Electron's main.js file, and to point the Electron window to the localhost URL. That's it.
  • CocoaInterface - Cocoa interface for Clozure Common Lisp. Build Cocoa user interface windows dynamically using Lisp code and bypass the typical Xcode processes. It has good documentation and a tutorial.
  • McCLIM - An implementation of the Common Lisp Interface Manager, version II. GNU LGPL2.1.
  • cl-webkit - A binding to WebKitGTK+. Also adds web browsing capabilities to an application, leveraging the full power of the WebKit browsing engine. MIT.
  • ftw - A Win32 GUI library. MIT.
  • eql, eql5, eql5-android - Embedded Qt4 and Qt5 Lisp, embedded in ECL, embeddable in Qt. Port of EQL5 to the Android platform. MIT.
  • bodge-nuklear - Wrapper over the Nuklear immediate mode GUI library. MIT.
  • vk - Common Lisp/CFFI bindings for the Vulkan API. MIT.

Other utilities:

  • file-select - A library to invoke the native system file dialog to select or create files. Zlib.

See also this demo to use Java Swing from ABCL.

Mobile

  • LispWork's mobile runtime - Android and iOs. Proprietary.
  • LQML - a lightweight ECL binding to QML (both Qt5 and Qt6) derived from EQL5. LGPL and public domain.

hello-allien, SBCL built for an Android application (very new, 2023).

Implementations

Proprietary:

  • LispWorks - an integrated cross-platform development tool for Common Lisp.
    • reputed features include: the CAPI cross-platform and native GUI toolkit, the LispWorks IDE, the mobile platforme runtime (iOs, Android), its Java interface, the tree shaker to build lighter binaries, its KnowledgeWorks system for "rule-based, object-oriented, logical, functional and database programming", and more.
    • has a free edition, with limitations (heap size limit, time limit).
  • Allegro CL - provides the full ANSI Common Lisp standard with many extensions.
    • reputed features include: the AllegroCache object persistence database system, the KnowledgeGraph system, its concurrent garbage collector, its web-based IDE, and more.
    • has a free edition. It includes AllegroCache, with a size limit.

Other implementations, mainly for historical purposes:

  • CMUCL - An implementation from Carnegie Mellon University. Public domain. SBCL is a fork of CMUCL.
  • GNU CLISP - A GNU implementation; contains a compiler and an interpreter. Standard conformance. GNU GPL3. They develop on Gitlab.
    • compiles to bytecode, its default REPL is more user friendly than SBCL's (with symbol completion and readline integration).
    • however, it is not actively developed, it doesn't comply entirely to the ANSI standard, it is less performant than SBCL and it is lacking compatibility features.
  • Corman Lisp - a Common Lisp development environment for Microsoft Windows running on Intel platforms. MIT.

You can check the implementations' compatibility to common extensions here: portability.cl.

JSON

  • 👍 jzon - a correct, safe and fast JSON parser. MIT.
    • jzon is the only CL JSON library which correctly declines all invalid inputs per the official JSON test suite and accepts all valid inputs per that suite.
    • it doesn't crash on invalid input (jsown), doesn't choke on large datasets (Jonathan), and more.
    • v1.0 released in the Quicklisp dist of February, 2023.
    • "I believe jzon to be the superior choice and hope for it to become the new, true de-facto library in the world of JSON-in-CL once and for all."
  • jonathan - A JSON encoder and decoder. MIT.
  • cl-json - A highly customizable JSON encoder and decoder. MIT.
  • jsown - A reader and writer for the JSON format. Expat.
  • shasht - Common Lisp JSON reading and writing for the Kzinti. MIT.
    • " Shasht is one of the two new libraries that I particularly like and is already in quicklisp. It is fast, it handles null correctly, it encodes CLOS objects, structures and hash-tables. It can also do incremental encoding." Sabra Crolleton.

See this extensive comparison of JSON libraries.

JSON tools:

  • NJSON - Parser-agnostic JSON indexing (with JSON Pointer support), destructuring, and validation framework. BSD.
  • json-mop - A metaclass for bridging CLOS and JSON objects. MIT.
  • cl-json-pointer - A JSON Pointer implementation. MIT.
  • cl-jwk - Common Lisp system for decoding public JSON Web Keys (JWK). BSD License.

and search for JSON RPC below.

YAML

  • cl-yacclyaml - a pure lisp YAML processor (loader, but not yet dumper). GPL3.
  • cl-yaml - a YAML parser and emitter built on top of libyaml. MIT.

Language extensions

  • alexandria - A general-purpose utility library. Public domain.
  • 👍 serapeum - Another general-purpose utility library. Expat.
  • rutils - radical yet reasonable syntactic utilities for Common Lisp. MIT.
  • generic-cl - Generic function interface to standard Common Lisp functions (equality, comparison, arithmetic, objects, iterator, sequences,…). MIT. See also the more lightweight generic-comparability. LLGPL.
  • anaphora - A collection of anaphoric macros. Public domain.
  • arrow-macros - Clojure-like threading macros. MIT.
  • hu.dwim.walker - a code walker and unwalker (aka AST parser and unparser). BSD. See also this blog post.

Pattern matching

  • trivia - Optimized pattern-matching library. LLGPL.

Portability layers

A large list of portability layers is collected here: portability.cl/. Here are some of them:

  • trivial-arguments - A portable library to retrieve the arguments list of a function. zlib.
  • definitions - a general definitions introspection library. It gives you the ability to retrieve definitions or bindings associated with designators such as symbols, packages, and names in general. zlib.
  • dissect - when a lot of projects use the “trivial-backtrace” system that just gives them a string with a backtrace, Dissect allows you to capture, step, and completely inspect the stack trace on a variety of Lisp implementations. Also very useful for logging and other situations where execution is automatically continued, but the information of the current stack is still useful to store somewhere. zlib.

Changing the syntax

  • cl21 - An experimental project to move Common Lisp into the 21st century. Expat.
  • clamp - Arc language's brevity and conciseness to Common Lisp. Artistic License 2.0.
    • also arc-compat - Arc compatible package. Perl Foundation's Artistic Licence 2.0.
  • cl-syntax - Reader syntax conventions. LLGPL.
  • cl-2dsyntax - An indentation-sensitive reader system. Not available on Quicklisp. Public domain.
  • cl-annot - Python-like annotations for Common Lisp. LLGPL.
  • cl-reader - A utility library intended at providing reader macros for lambdas, mapping, accessors, hash-tables and hash-sets. MIT.

For strings:

  • cl-interpol - A set of reader modifications to allow string interpolation. BSD.
  • mstrings - a reader macro to provide visually appealing multiline blocks. An M-string trims leading whitespace, concatenates lines together, etc. BSD_3Clause.
  • pythonic-string-reader - A simple and unobtrusive read table modification inspired by Python's three quote strings. BSD_3Clause.
  • cl-heredoc - a "heredocs" dispatcher. GPL3. Allows to write: #>eof>Write whatever (you) "want", no matter what characters, until the magic end sequence has been reached.eof

CLOS extensions

  • closer-mop - A compatibility layer that rectifies many absent or incorrect MOP features. Expat.
  • specialization-store - generic functions based on types. Simplified BSD License variant.
  • filtered-functions - enable the use of arbitrary predicates for selecting and applying methods. MIT.
  • inlined-generic-function - Bringing the speed of Static Dispatch to CLOS. LLGPL.
  • static-dispatch - allows standard generic function dispatch to be performed statically (at compile time) rather than dynamically (runtime). This is similar to what is known as "overloading" in languages such as C++ and Java. MIT.
  • dynamic-mixins - simple, dynamic class combination. BSD_2Clause.
  • fast-generic-functions - Seal your generic functions for an extra boost in performance. MIT.
  • polymorphic functions - A function type to dispatch on types instead of classes with partial support for dispatching on optional and keyword argument types. Still experimental (May, 2021). MIT.
    • polymorphic-functions dispatch on the types of the arguments supplied to it. This helps dispatching on specialized arrays as well as user-defined types.
    • for differences with specialization-store and fast-generic-functions, see its README.

Writing terser defclass forms:

  • defclass-std - a shortcut macro to write DEFCLASS forms quickly. LLGPL.
  • nclasses - Syntactic sugar for class and generic function declarations. Fork of hu.dwim.defclass-star. Features type inference, automatic accessors, inline initform syntax, automatic exports, and other conveniences. BSD.

And also:

  • slot-extra-options - lets you build a metaclass which in turn lets you specify extra slot options in its classes. LGPL3.

Function extensions

  • cl-hooks - Hooks extension point mechanism (as known, e.g., from GNU Emacs). LGPL.
  • method-hooks - When CLOS method combination allow only one hook per method, this library allows an arbitrary number of them. Mozilla Public Licence.
  • cl-advice - an attempt of portable layer advice library for SBCL, CCL, LispWorks and Allegro. Not in Quicklisp.
  • nhooks - an enhanced implementation of hooks (extension points) with crucial improvements.

Iteration

  • iterate - An iteration construct for Common Lisp which is extensible and Lispier. MIT.
  • for - A concise, lispy and extensible iteration macro. Unlike loop it is extensible and sensible, and unlike iterate it does not require code-walking and is easier to extend. zlib.
  • series - Functional style without any runtime penalty at all. MIT.
  • trivial-do - Additional dolist style macros for Common Lisp. MIT.
  • doplus – another extensible iteration library, similar to :for.
  • cl-transducers - Ergonomic, efficient data processing. LGPL3.
    • "Transducers are an ergonomic and extremely memory-efficient way to process a data source. Here “data source” means simple collections like Lists or Vectors, but also potentially large files or generators of infinite data."
    • "It is, in general, the most complete implementation of the Transducer pattern."
    • a "modern" API with map, filter, take, repeat, cycle, fold
  • snakes - Python style generators for Common Lisp. Includes a port of itertools. Apache2.
  • picl - An (almost) complete port of Python's itertools package, complete with laziness where applicable, and not relying on cl-cont. MIT.
  • gtwiwtg - A lazy sequences library. Similar to 'series' but not as complete. However it has a 'modern' API with stuff like take, filter, for, fold, etc. that is easy to use.
  • gmap - A concise and extensible iteration facility that has the advantage of integrating well with FSet (see the Data Structures section), as it was written by the same author. In Quicklisp as part of misc-extensions. Public domain.

Lambda shorthands

  • fn - a couple of lambda shorthand macros. (fn* (+ _ _)) --> (lambda (_) (+ _ _)). Public domain.
  • f-underscore - a tiny library of functional programming utils. (f_ (+ _ _)) -> (lambda (_) (+ _ _)). Public domain.
  • cl-punch - Scala-like anonymous lambda literals. (mapcar ^(* 2 _) '(1 2 3 4 5)). MIT.

See also CL21 and Rutils.

Non-deterministic, logic programming

  • cl-prolog2 - Common Interface to ISO Prolog implementations from Common Lisp. MIT.
  • Screamer - augment Common Lisp with practically all of the functionality of both Prolog and constraint logic programming languages. Blog post solving Project Euler puzzles. MIT.
  • Screamer+ - increasing the expressiveness of SCREAMER. MIT.
  • Temperance - logic programming. MIT. A focus on performance, with General Game Playing in mind.

Reactive programming

  • Cells - an implementation of the dataflow programming paradigm, reactive spreadsheet-like expressiveness for CLOS. Used to build an algebra learning system. With documentation. Lisp LGPL.
  • lwcells - Light Weight Cells.
    • LWCELLS is a dataflow extension to Common Lisp. It maintains a consistent state of cells according to functions specifying their relation. LWCELLS is designed to be simple, clean, compositional and flexible.

Contract programming

  • quid-pro-quo - a contract programming library in the style of Eiffel’s Design by Contract ™. Public domain.

Typing

  • 👍 Coalton - an efficient, statically typed functional programming language that supercharges Common Lisp. MIT.
  • 👍 trivial-types - provides missing but important type definitions such as proper-list, association-list, property-list and tuple. LLGPL.
  • defstar - a collection of macros for easy inclusion of type declarations for arguments in lambda lists. GNU GPL3
  • algebraic-data-types - defining algebraic data types in a similar spirit to Haskell or Standard ML, as well as for operating on them. BSD_3Clause.

See also:

  • typo - A portable type inference library for Common Lisp. MIT.
  • experimental: PELTADOT - PELTADOT Extends Lisp’s Types And Dispatches Over Them.

Theorem provers

  • ACL2 - a logic and programming language in which you can model computer systems, together with a tool to help you prove properties of those models.
    • used in the industry since the 1990s.
    • it supports a subset of the ANSI standard Common Lisp programming language.
    • "Companies that have used ACL2 regularly include AMD, Centaur Technology, IBM, Intel, Kestrel Institute, Motorola/Freescale, Oracle and Rockwell Collins." (source)
    • Proofpad, an online IDE for ACL2.
    • ACL2-kernel, a Jupyter Kernel for ACL2.
    • ACL2 Sedan, an Eclipse plugin that provides a modern IDE for ACL2, used with students at universities.
  • NASA's PVS, the Prototype Verification System, and NASAlib, a collection of formal development libraries.
    • its 63 top-level libraries span the fields of: real analysis, limits, continuity, derivatives, integrals; complex integration; directed graphs; exact real arithmetic including trig functions; interval arithmetic and numerical approximations; linear algebra; 2-D, 3-D, 4-D, and n-dimensional vectors… and more.

Learning and Tutorials

Online

Beginner

Intermediate

Advanced

And a couple learning resources for SBCL internals:

Coding platforms

  • Codewars - a code training platform, with Common Lisp support (SBCL).

Web Development

Reference

  • NEW! CL CommunitySpec - a rendition of the Common Lisp ANSI Specification draft.

    • with an interactive search, syntax highlighting! And open-source.
  • NEW! novaspec - a modern rendition of the CL ANSI draft.

    • not open-source?
  • Common Lisp Quick Reference - A distilled, pocket-size version of the ANSI CL spec. Available for download as a PDF.

  • CLHS - The Common Lisp HyperSpec; the ANSI CL standard, in hypertext form.

  • CLOS MOP specification - A modern public domain online version of chapters 5 and 6 of The Art of the Metaobject Protocol

  • Common Lisp Standard Draft (pdf) - The standard draft of the Common Lisp specifications, in a well formatted PDF with a sidebar.

    • also dpans2texi - the standard draft converted to Texinfo and published as a well formatted PDF.
  • Common Lisp the Language - The original standard for Common Lisp before the ANSI spec.

  • Minispec - A friendlier, but less-complete, version of CLHS. Also contains documentation for some commonly-used CL libraries (such as Alexandria).

  • Simplified Common Lisp reference - The simplified version of CLHS.

  • CDR - Common Lisp Document Repository. a repository of documents that are of interest to the Common Lisp community. The most important property of a CDR document is that it will never change: if you refer to it, you can be sure that your reference will always refer to exactly the same document.

    • the Common Lisp Document Repository is hosted at Zenodo.

Offline

The CLHS is available offline via an archive and as doc sets in Dash, Zeal and Velocity.

Beginner

Intermediate

  • ANSI Common Lisp - A thorough, practical covering of the entire language, with exercises. Not recommended as a starter text, due to some caveats.
  • Common Lisp Recipes - Common Lisp Recipes is a collection of solutions to problems and answers to questions you are likely to encounter when writing real-world applications in Common Lisp. Published in 2015.

Advanced

Other books

  • Building Problem Solvers (PDF) by Ken Forbus and Johan de Kleer, made available for free by MIT Press - a unique book among standard artificial intelligence texts in combining science and engineering, theory and craft to describe the construction of AI reasoning systems, and including code illustrating the ideas.

Community

Library Manager

  • Quicklisp - A library manager containing many libraries, with easy depencency management. Expat.
    • ql-https - shell out to cURL and use HTTPS by default.
    • Quicklisp bundles - self-contained sets of systems that are exported from Quicklisp and loadable without involving Quicklisp.
  • 👍 CLPM - A package manager for Common Lisp that strives to cleanly separate the package manager process itself from the client image that uses it. BSD_2Clause.
    • CLPM comes as a pre-built binary, supports HTTPS by default, supports installing multiple package versions, supports versioned systems, and more.
  • Ultralisp - A Quicklisp distribution which updates every 5 minutes and to which one can add his project in one click. BSD.
  • 👍Roswell - a Lisp implementation installer, script launcher and more. MIT.
  • Qlot - A project-local library installer, similar to Bundler or Virtualenv. Expat.
  • Quicksys - install systems from multiple Quicklisp distributions. MIT.
  • Quickutil - A utility manager, similar to Quicklisp, but for small utilities rather than whole libraries. 3-clause BSD.

see also:

  • (NEW! as of May, 2023) ocicl - a new and experimental alternative to Quicklisp, built on tools from the world of containers. MIT.
  • trivial-system-loader - A system installation/loading abstraction for Common Lisp.
    • play nice with people using another library manager than Quicklisp: instead of hard-coding (ql:quickload :mysystem), use (tsl:load-system :mysystem). tsl:load-system will first try to use ocicl if available, then quicklisp, then plain asdf:load-system.

might help:

  • redist - facilities to produce Quicklisp distributions.
  • quick-patch - easily override quicklisp projects without using git submodules. MPL-2.0.
  • print-licenses - print licenses used by a project and its dependencies. MIT.
  • asdf-dependency-graph - A minimal wrapper around dot to generate an image of the dependencies graph.

Interfaces to other package managers

  • linux-packaging - build .deb, .rpm or .pkg packages for your application with a single ASDF declaration. Uses fpm under the hood. MIT.
  • qldeb - Quicklisp systems to debian packages, along with deb-packager (simply create a debian package by defining an s-expression) and an introductory blog post. Both MIT.
  • ql-to-deb - Update cl-* debian packages from Quicklisp releases. WTFPL.
  • dh-quicklisp-buildapp - debhelper utility to let you compile your quicklisp-based Common Lisp code into a buildapp binary in a .deb with almost no effort. MIT.
  • cl-brewer - Homebrew formula builder for (command line) common lisp applications. Public domain.
  • flatpack-common-lisp - A BuildStream project for building Flatpak based runtime environments for Common Lisp applications.
  • alien-works-delivery - WIP system for delivering Common Lisp applications as executable bundles. For now it only supports AppImage format for Linux and MSIX for Windows, but .APK for Android and later MacOSX and iOS bundle formats are planned too.
  • cl-nix-lite - Common Lisp module for Nix, without Quicklisp. AGPL-3.0

See also:

  • asdf-sbcl, a plugin for the universal package manager.
  • 📹 this Youtube video (by 40ants, 2023) on how to use alien-works-delivery and linux-packaging.

Machine Learning

  • MGL - a machine learning library for backpropagation neural networks, boltzmann machines, gaussian processes and more. MIT.
    • some parts originally contributed by Ravenpack International.
    • used by its author to win the Higgs Boson Machine Learning Challenge.
    • more about the author: he also won the Google AI Challenge in 2010 using Common Lisp, but without MGL, as no machine learning was needed. A related talk (59', 2013).
  • clml - originally developed by Mathematicl Systems Inc., a Japanese company. With a tutorial. LLGPL.
  • antik - a foundation for scientific and engineering computation in Common Lisp. GPL. Also mgl-mat and LLA.

Credit: borretti.me's State of CL Ecosystem 2015.

Natural Language Processing

  • 🚀 sparser - A natural language understanding system for English. Eclipse.
    • a model-driven, rule-based language text analysis system for large volume, high-precision information extraction. At its heart, Sparser is a bottom-up, phrase-structure-based chart parser, optimized for semantic grammars and partial parsing.

  • cl-nlp - Natural language processing toolset. Apache2.0.
  • babel2 - A Fluid Construction Grammar implementation, computational framework, and unification-based grammar formalism Apache2.0.

Network and Internet

See Cliki for more.

HTTP clients

  • 👍 Dexador - An HTTP client, that aims at replacing Drakma. MIT.
  • Carrier - A lightweight, async HTTP client built on top of cl-async and fast-http. MIT.
  • fast-http - A fast HTTP request/response parser for Common Lisp. MIT.
  • http2 - HTTP/2 implementation in Common Lisp. MIT.

HTTP Servers

  • Hunchentoot - A web server. 2-clause BSD
  • 👍Clack - A web application environment inspired by Rack and WSGI. LLGPL. Provides a unified interface to a webserver of choice (default is Hunchentoot). With more getting started guide.
  • zaserve - A portable fork of AllegroServe, by Franz Inc. LLGPL.
  • wookie - Asynchronous HTTP server. Expat.
  • woo - A fast non-blocking HTTP server on top of libev. MIT.
  • cl-http2-protocol - a pure Common Lisp transport agnostic implementation of the HTTP/2 protocol at draft-14. MIT.

Hunchentoot plugins

  • 👍 easy-routes - a routes handling system on top of Hunchentoot. It supports dispatch based on HTTP method, arguments extraction from the url path, decorators, url generation from route name, etc. MIT.
  • hunchentoot-cgi - a library for executing CGI scripts from the hunchentoot webserver. BSD.
  • hunchentoot-multi-acceptor - Route multiple domains (virtual hosts) on a single hunchentoot acceptor using a single port. Apache2.0.
  • hunchentoot-errors - Augments Hunchentoot error pages and logs with request and session information. MIT.

See also:

  • cl-tbnl-gserver-tmgr - Hunchentoot Gserver-based taskmanager. cl-gserver is an actor-like message-passing library (see below in "Actors pattern"). Experimental.

Clack plugins

For routing, we can also use Snooze (see below).

Web frameworks

  • Caveman - A powerful web framework. LLGPL. Example projects: Quickdocs
  • ningle - A super-micro web framework. LLGPL.
    • jingle - based on ningle, adds bells and whistles, such as middlewares.
      • includes an OpenAPI and Swagger UI demo.
  • radiance - A web application environment and framework . zlib.

REST-focused frameworks:

  • 👍 Snooze - A RESTful web framework. Web server agnostic. Currently has support for Hunchentoot and Clack. Routes are just functions and HTTP conditions are just Lisp conditions. LLGPL.
  • cl-rest-server - a library for writing REST web APIs. Features validation with schemas, annotations for logging, caching, permissions or authentication, documentation via Swagger, etc. MIT.

See OpenAPI, OData and other libraries below.

Isomorphic web frameworks

  • Weblocks (Reblocks) - A widgets-based framework with a built-in ajax update mechanism that "solves the JavaScript problem". LLGPL.
  • CLOG - The Common Lisp Omnificent GUI. Uses web technology to produce graphical user interfaces for applications locally or remotely. BSD_3Clause.
    • CLOG is based on the ideas of GNOGA, a framework the author wrote for Ada and used in commercial production code since 2013.
  • Interactive SSR - ISSR allows you to make interactive web pages without writing client scripting. No knowledge about Javascript or DOM is necessary.
    • it is not unlike Phoenix LiveView or Hotwire.

Parsing html

  • 👍 Plump - A lenient HTML/XML parser, tolerant on malformed markup. zlib. Best used with lquery and clss.

Querying HTML/DOM, web scraping

  • 👍 lquery - A jQuery-like HTML/DOM manipulation library. zlib.
  • scrapycl - web scraping framework for writing crawlers in Common Lisp. Unlicense.
    • relying on lquery.

See also the XML section below for xpath libraries and more.

HTML generators and templates

  • 👍 spinneret - Common Lisp HTML5 generator. Expat.
  • cl-who - The venerable HTML generator. FreeBSD.
  • Djula - A port of Django's template engine to Common Lisp. Expat.
    • cl-djula-tailwind - use TailwindCSS classe in your Djula templates without any JavaScript or Node.js tooling.
  • TEN - the completness of Djula meets the usability of Eco. MIT.
  • eco - Fast, flexible, designer-friendly template engine. Expat.
  • cl-closure-template - Implementation of Google's Closure templates, where compiling a template creates a function that generates the result. LLGPL.
  • flute - An easily composable HTML5 generation library with the most simplistic syntax. MIT.
  • clip - An HTML template processor where the templates are written in HTML. zlib.
  • lsx and markup - Two JSX-like templating engines, where HTML tags are Common Lisp code. markup comes with an Emacs package.

URI handling

  • quri - Another URI library for Common Lisp. Supports userinfo, IPv6 hostname, encoding/decoding utilities,… BSD_3Clause.
  • cl-slug - a small library to make slugs, mainly for URIs, transform in CamelCase, remove accentuation and punctuation, for english and beyound. LLGPL.

Javascript

  • Parenscript - A translator from Common Lisp to Javascript. 3-clause BSD. See Trident-mode, an Emacs mode that provides live interaction with the browser.unlicence.
    • paren6 - a set of ES6 macros for Parenscript.
  • JSCL - A CL-to-JS compiler designed to be self-hosting from day one. Lacks CLOS, format and loop.
  • CL-JavaScript - A translator from Javascript to Common Lisp. Not available on Quicklisp. Expat.
  • parse-js - A package for parsing ECMAScript 3. zlib.
  • remote-js - send JavaScript from Common Lisp to a browser. MIT.
  • sigil - A Parenscript to Javascript command line compiler and REPL. MIT.

In development:

  • Valtan - Common Lisp to JavaScript compiler.
  • JACL - an experimental Lisp system for the Web browser platform to explore new techniques for developing large Single Page Applications with Lisp.

Utilities for React:

  • cl-react - Common Lisp (Parenscript) utilities for building web apps in ReactJs. MIT.
  • Panic, a Parenscript library for React. Not in Quicklisp. MIT. Its TodoMVC example.
  • Parenscriptx - Parenscript Macros to aid generating react code. MIT.
  • jscl-react - A web framework for writing react components in common lisp using jscl. No license specified.

See also:

  • trident-mode, an Emacs minor mode for live Parenscript interaction.

Deployment

  • 👍 deploy - A toolkit for binary deployment of Lisp applications, with extra support for foreign shared libraries. zlib.
  • common-lisp-heroku-example - Example of Common Lisp server on Heroku using Docker.
  • cube - Kubernetes client library for Common LISP generated from the Swagger specification. MIT.
  • s2i-lisp - Source-to-Image builder image based on CentOS or alternatively RHEL7 for building Common LISP images for OpenShift (and also Docker). It features an up-to-date SBCL with Quicklisp installation, SLIME or SLY integration and allows customization via environment variables. Apache2
  • cl-aws-runtime-test - An example of using Common Lisp (SBCL) as a custom runtime on AWS lambda. WTFPL.
  • 40ants/ci - Highly opionated Github Actions workflow builder for Common Lisp projects.
    • with: a linter, lisp critic, tests runner, test matrix, doc building, caching…
  • make-common-lisp-program - GitHub action to build an executable Common Lisp program on Ubuntu, MacOS and Windows. MIT.

See also:

Monitoring

  • prometheus.cl - Prometheus.io client. Grafana dashboard for SBCL and Hunchentoot metrics (memory, threads, requests per second,…). MIT.
    • prometheus-g - Extension for prometheus.cl which collects metrics about garbage collector state.
  • cl-sentry-client - a Sentry client for Common Lisp, the cloud-based error monitoring system. MIT.
  • rollbar.lisp - interface to Rollbar.com, an error tracking software.

Websockets

  • 👍 usocket - A portable TCP and UDP socket interface. Expat.
  • Portal - Portable websockets for Common Lisp, using usocket. LLGPL.
  • clws - websockets server in CL, built on IOlib and libfixposix. No licence specified.
  • Hunchensocket - RFC6455 compliant WebSockets for Common Lisp, as an extension to Hunchentoot. MIT.
  • websocket-driver - based on Clack.
  • iolib - I/O library. Expat.
    • "IOlib is to be a better and more modern I/O library than the standard Common Lisp library. It contains: a socket library, a DNS resolver, an I/O multiplexer, a pathname library and file-system utilities."

Editor's note: at the time of writing, it seems we don't have a full-featured websocket implementation for Common Lisp. We can however recommend Portal, and we invite you to double-check the current issues of Hunchensocket and websocket-driver.

Web development utilities

Assets management

  • Rock - an asset manager for Common Lisp. It's basically a combination of Bower and webassets. MIT.

Browser tests

Form handling

  • 👍 cl-forms - Web forms handling library for Common lisp. MIT.

User login and password management

  • cl-authentic - Password management for Common Lisp (web) applications. LLGPL.

    • safe password storage: cleartext-free, using your choice of hash algorithm through ironclad, storage in an SQL database,
    • password reset mechanism with one-time tokens (suitable for mailing to users for confirmation),
    • user creation optionally with confirmation tokens (suitable for mailing to users),
  • mito-email-auth - Helper to authenticate a website's users by sending them unique code by email.

  • cl-cas - A library to help CAS authenticaton to Common Lisp web applications. Not in Quicklisp.

See also mito-auth and the Hunchentoot and Clack plugins above.

Web project skeletons and generators

  • cl-cookieweb - a Cookiecutter template to start a web project. BSD_3Clause. Not in Quicklisp.
    • Provides a working toy web app with the Hunchentoot web server, easy-routes, Djula templates, styled with Bulma, based on SQLite, with migrations, an example table definition and a test suite using FiveAM.
  • make-like - an application template builder for LIKE (Lisp In Kubernetes + Emacs) applications. Apache2.0.
    • Makefile, podman support, GitHub Actions, Prometheus metrics support, TOML-style config.ini, easy-route preconfigured with health-check and more.
  • cl-webapp-seed - a simple web application boilerplate. Uses Hunchentoot, cl-who, deploys easily to Heroku. MIT.

Others

Email

  • trivial-imap - tries to make easy some common cases of working with IMAP servers, like reading emails from the server. A thin wrapper over post-office library (which is a fork of Franz's cl-imap). BSD.
  • Postmaster - A simple, easy-to-use SMTP/IMAP library. Expat.
  • cl-smtp - CL-SMTP is a simple lisp smtp client.
  • sendgrid - send emails with Sendgrid's API. MIT.
  • mailgun - A thin wrapper to post HTML emails through mailgun.com. unlicence.
  • cl-ses - Library for AWS SES. Expat.

OpenAPI, OData, OpenRPC

  • NEW! openapi-generator - OpenAPI client code generator. AGPL-3.0.
    • Generation of OpenAPI ASDF/Quicklisp-loadable projects within one command,
    • Support for path, (arbitrary) query, (arbitrary) header, (json) content parameters,
    • Conversion of an OpenAPI spec into CLOS object -> explore API within inspector,
    • Conversion of OpenAPI-2.0 or YAML files to OpenAPI-3.0 JSON with swagger converter (network connection required),
    • etc.
  • apispec - A Common Lisp library for handling Web API requests and responses. BSD_3Clause.
    • takes an OpenAPI3 yaml specification and allows to validate and parse HTTP request headers, parameters and bodies.
  • cl-odata-client - Common Lisp client library for accessing OData services. MIT.
  • OpenRPC - OpenRPC implementation for Common Lisp. BSD.
    • Automatic OpenRPC spec generation
    • Automatic JSON-RPC client building by OpenRPC spec. This includes creation of Common Lisp classes and methods for making RPC requests and returning native CL objects.
    • all JSON marshalling is done under the hood.
  • jsonrpc - JSON-RPC 2.0 server/client for Common Lisp. BSD.

Static site generators

Third-party APIs

  • Aws-sign4 - Common Lisp library for Amazon Web Services signing version 4. GNU GPL3.
  • aws-sdk-lisp - Provides interfaces for each AWS services as individual systems. BSD_2Clause.
    • incluse dozens of services: dsn, appstream, athena, cloudfront, codedeploy, cognito-*, directconnect, dynamodb, dms, elasticache, email, events, kinesis, machinelearning, monitoring, s3, sms, storagegateway, workspaces…
  • zs3 - A library for working with Amazon's Simple Storage Service (S3) and CloudFront service. BSD.
  • north - The successor to the South (Simple OaUTH) library, implementing the full oAuth 1.0a protocol, both client and server sides. Using North you can easily become an oAuth provider or consumer. zlib.
  • Ciao - an easy-to-use Common Lisp OAuth 2.0 client library. It is a port of the Racket OAuth 2.0 Client to Common Lisp. LGPL3.
  • avatar-api - Get avatars from Google+, Gravatar and others. Expat.
  • chirp - A Twitter client library. zlib.
  • tooter - a client library implementing the full v1 REST API protocol for Mastodon. zlib.
  • cl-irc - An IRC client library. Expat.
  • cl-mediawiki - a wrapper around the MediaWiki api. MIT.
  • cl-openid - An implementation of OpenID. LLGPL.
  • cl-pushover - Common Lisp bindings to Pushover. MIT.
  • humbler - A Tumblr API interface. zlib.
  • multiposter - post to multiple services simultaneously. zlib.
  • stripe - a client for the Stripe payment system. MIT.
  • lisp-pay - Wrappers around various payment processors: Paypal, Stripe, Coinpayments and BTCPayServer. MIT.
  • lunamech-matrix-api - A complete wrapper over the Client -> Server Matrix API. MIT.
  • cl-telegram-bot - Telegram bot API. MIT.

Numerical and Scientific

  • maxima - Computer Algebra System. GNU GPL3.
  • numcl - Numpy clone in Common Lisp. LGPL3.
  • GSLL - GNU Scientific Library for Lisp; allows the use of the GSL from Common Lisp. GNU LGPL2.1.
  • Xecto - A library for regular array parallelism. 3-clause BSD.
  • Petalisp - an attempt to generate high performance code for parallel computers by JIT-compiling array definitions. It works on a more fundamental level than NumPy, by providing even more powerful N-dimensional arrays, but just a few building blocks for working on them. AGPL-3.0.
  • cl-ana - Common Lisp data analysis library with emphasis on modularity and conceptual clarity. It aims to be a general purpose framework for analyzing small and large scale datasets, including binned data analysis and visualization. GNU GPL3.
  • avm - Efficient and expressive arrayed vector math library with multi-threading and CUDA support. MIT.
  • array-operations - a collection of functions and macros for manipulating Common Lisp arrays and performing numerical calculations with them. MIT.
  • cl-geometry - a system for two dimensional computational geometry for Common Lisp. MIT.
  • Vellum - Data Frames for Common Lisp. BSD_2Clause.
  • rtg-math - a selection of the math routines most commonly needed for making realtime graphics in lisp (2, 3 and 4 component vectors, 3x3 and 4x4 matrices, quaternions, spherical and polar coordinates). BSD_2Clause.

Planning solvers:

  • linear-programming – a library for solving linear programming problems. MIT.
  • shop3 - a Hierarchical Task Network (HTN) AI planner. Mozilla Public License.

NEW! If you have precise needs, blurry needs or simply questions, the repository Common Lisp numsci call for needs is a new place to discuss them.

Matrix libraries

  • magicl - Matrix Algebra proGrams In Common Lisp based on BLAS/LAPACK and Expokit, by Rigetti Computing. BSD_3Clause.
  • lisp-matrix - A matrix package. FreeBSD.
  • 3d-matrices - A library implementing common matrix calculations, with an emphasis on 2x2,3x3, and 4x4 matrices as commonly used in graphics. It provides some numerical functions as well, but those are not the focus. The library is heavily optimised, so it is not made of pretty code. zlib.
  • clem - a matrix library. BSD_2Clause.

Statistics

  • 👍 lisp-stat - an environment for statistical computing, conceptually similar to R, that is also suitable for front-line production deployments. "It grew out of a desire to have an environment for rapidly prototyping analytical and A.I. solutions, and move directly to production environments with minimal friction."
    • https://lisp-stat.dev/
    • inspired by Luke Tierney's XLisp-Stat (a predecessor of R), ships a compatibility library for it, otherwise builds on other and newer libraries.

See also common-lisp-stat, Common Lisp statistics library. FreeBSD, staling.

Units

  • physical-quantities - a library that provides a numeric type with optional unit and/or uncertainty for computations with automatic error propagation. GPL2

Utils

  • cmu-infix - A library for writing infix mathematical notation in Common Lisp. See also polisher.

Parallelism and Concurrency

  • BordeauxThreads - Portable, shared-state concurrency. Expat.
  • lparallel - A library for parallel programming. 3-clause BSD. Originally on lmj/lparallel.
  • lfarm - distributing work across machines (on top of lparallel and usocket). BSD_3Clause
  • calispel - CSP-like channels for common lisp. With blocking, optionally buffered channels and a "CSP select" statement. ISC-style.
    • "It is complete, flexible and easy to use. I would recommend Calispel over Lparallel and ChanL." @Ambrevar. discussion
  • chanl - Portable, channel-based concurrency. Expat, with parts under 3-clause BSD.
  • cl-async - A library for general-purpose, non-blocking programming. Expat.
  • Moira - Monitor and restart background threads. In-lisp process supervisor. MIT.
  • trivial-monitored-thread - a Common Lisp library offering a way of spawning threads and being informed when one any of them crash and die. MIT.
  • cl-gearman - a library for the Gearman distributed job system. LLGPL.
  • swank-crew - distributed computation framework implemented using Swank Client. BSD_3Clause.
  • cl-coroutine - a coroutine library. It uses the CL-CONT continuations library in its implementation. MIT.
  • STMX - High performance Transactional Memory for Common Lisp. LLGPL.
  • Blackbird - a Promise implementation for Common Lisp MIT.
    • see also promise - a basic promise datastructure, with timeouts. ZLIB.

See also:

  • cl-etcd - Run etcd as an asynchronous inferior process. etcd is a strongly consistent, distributed key-value store. AGPL-3.0.

Actors pattern

  • 👍 Sento - Sento (formerly cl-gserver) is a 'message passing' library/framework with actors similar to Erlang or Akka. It supports creating systems that should work reactive, require parallel computing and event based message handling. Apache2.
  • erlangen - Distributed, asynchronous message passing system for Clozure Common Lisp. GNU GPL3.
  • Actors package for LispWorks (announce) MIT.
  • common-lisp-actors - a simple and easy to use Actor system. BSD_2Clause.
  • memento-mori- a library for writing robust, actor-based systems. It draws inspiration from Erlang/OTP, particularly its crash-first approach to high-availability systems, as well as Akka. MIT.

See also:

  • lisp-actors, an "ongoing investigation into the use of the Actor model in Common Lisp, which has had the benefit of real-world application".
    • it was part of the Emotiq blockchain (a discontinued project)
    • does remoting, includes a threading abstraction layer library similar to Bordeaux-Threads.
    • ! it lacks unit tests.

Event processing

  • simple-tasks - A very simple task scheduling framework. zlib.
  • deeds - Deeds is an Extensible Event Delivery System. It allows for efficient event delivery to multiple handlers with a complex event filtering system. zlib.
  • cl-flow - Data-flowish computation tree library for non-blocking concurrent Common Lisp. MIT.
  • event-glue - simple eventing abstraction. No dependencies. It can be used anywhere you need a generic event handling system. MIT.

Job processing

  • SBCL's timers, system-wide event schedulers.
  • psychiq - redis-based background job processing for Common Lisp applications. Inspired by Ruby's Sidekiq and compatible with its web UI. LLGPL.
  • cl-cron - A simple tool that provides cron like facilities. GPL3.
  • clerk - a cron-like scheduler with sane DSL. MIT.

Regular expressions and string parsing

See also:

  • rexxparse - A string parsing tool inspired by the REXX PARSE construct. MIT.

See also clj-re above.

Scripting

Writing, running scripts

  • 👍 Roswell - a lisp installer and scripting environment (helper, launcher, installer) and more. MIT.
  • cl-all - A script to run Lisp snippets in multiple implementations. This allows you to quickly compare implementation behaviour and differences. zlib.
  • clawk - an AWK implementation embedded into Common Lisp, to search files for lines and perform specified actions on its fields. BSD-style.
  • ScriptL - Shell scripting made Lisp-like! Or, live-coding remote function calls for the shell. Write a command in the REPL, and run it instantly in the shell. LLGPL.
    • similar and maybe simpler: lserver

Command-line options parsers

  • 👍 Clingon - a rich command-line options parser system.
    • it may have the richest feature set: subcommands, generation of bash completion, support for various kinds of options (integers, booleans, counter, enums…), extensible…
  • Adopt - A Damn OPTion parsing library. MIT.

Readline, ncurses and other graphical helpers

  • cl-readline - a set of functions to edit lines as they are typed in, to maintain a list of previously-entered command lines, to recall and reedit them and perform csh-like history expansion. Emacs and vi editing modes. GPL3.
  • Linedit - Readline-style library that provides customizable line-editing features. MIT-style.
  • cl-charms - an interface to libcurses in Common Lisp. It provides both a raw, low-level interface to libcurses via CFFI, and a more higher-level lispier interface. MIT.
  • replic - helpers to turn existing code into a readline application, with a focus on defining the completion of the commands' arguments. Also comes as a ready to use executable, that transforms a user's lispy init file into readline commands. MIT.
  • cl-ansi-term - print colorized text, horizontal lines, progress bars, (un)ordered lists and tables on ANSI-compliant terminals. GPL3.
  • cl-progress-bar - progress bars, just like in Quicklisp ! MIT.

Shells, shells interfaces

  • Lish - lish may someday be a lisp shell. GPL3.
    • supports tab-completion of executables in the path and Lisp symbols, allows to write and to mix shell commands and Lisp code, has a tiny REPL and an interactive debugger, and more.
  • shcl - a POSIX-like shell in Common Lisp. Apache2.0.
  • Shelly - execute Common Lisp functions like a shell command, without the need to write a command line arguments parser. And it also can be used as a Make-like build-tool. FreeBSD.
  • unix-in-lisp - Mount Unix system into Common Lisp image.
    • Unix concepts are directly/shallowly embedded into Lisp (Unix commands become Lisp macros, Unix file become Lisp variables, Unix streams become lazy Lisp sequences, etc).

Lisp utilities:

  • cmd - utility for running external programs. Protects against shell interpolation, built with multi-threaded programs in mind, Windows support. MIT.
  • Clesh - extends Common Lisp to embed shell code in a manner similar to perl's backtick. FreeBSD.

System administration

  • Consfigurator - Lisp declarative configuration management system. You can use it to configure hosts as root, deploy services as unprivileged users, build and deploy containers, and produce disc images. GPL3.
  • cl-unix-cybernetics (previously Adams) - UNIX system administration in Common Lisp. Not unlike Ansible, Chef or Puppet. ISC.
    • You describe your systems (hosts) using resources having properties. The properties are then probed and synchronized using only /bin/sh on the remote host, and /usr/bin/ssh on the control host.

Other scripting utilities

  • WCL [stalled] - allow hundreds of Lisp applications to be realistically available at once, while allowing several of them to run concurrently. WCL accomplishes this by providing Common Lisp as a Unix shared library that can be linked with Lisp and C code to produce efficient applications. For example, the executable for a Lisp version of the canonical Hello World! program requires only 20k bytes on 32 bit x86 Linux. WCL also supports a full development environment, including dynamic file loading and debugging. A modified version of GDB is used to debug WCL programs, providing support for mixed language debugging.
    • a paper: "Delivering efficient Common Lisp applications under Unix".

Text Editor Resources

This contains plugins and other goodies for various text editors.

  • Parinfer - Parinfer is a way to edit lisp code that helps to keep both the indentation and the parenthesis balanced. It is easy to start with and yet it offers advanced features à la Paredit. It is available on many editors (Emacs, Vim, Neovim, Atom, Sublime Text, Visual Studio Code, LightTable, CodeMirror,…).

Emacs

  • Slime - Superior Lisp Interaction Mode for Emacs; a full-blown environment for Common Lisp inside of Emacs. Public domain.
  • 👍 Sly - SLY is a fork of SLIME and contains multiple improvements upon it, such as Sly stickers.

Starter kits:

  • 👍 Portacle - A portable and multiplatform Common Lisp environment: SBCL, Quicklisp, Emacs, Slime, Git.
  • Emacs4CL - A tiny Emacs initialization file to quickly set up vanilla Emacs for Common Lisp programming. Comes with a line-by-line explanation of every line of code in the initialization file.
  • plain-common-lisp - A trivial way to get a native Common Lisp environment on Windows.
    • ships SBCL, Quicklisp, Emacs and Slime.
    • with example programs for a console program, accessing the Win32 API, displaying a GUI with IUP, running an OpenGL window.
  • cl-devel2 - a Docker container for Common Lisp development environment. Ships SBCL, CCL, Roswell and Emacs25 with Slime.

Slime extensions:

  • slime-star - a SLIME configuration with extensions pre-installed, with also some custom utilities and menus:

Sly extensions:

  • sly-overlay - an extension for Sly that enables the overlay of Common Lisp evaluation results directly into the buffer in the spirit of CIDER (Clojure), Eros (Emacs Lisp) and the Lem editor.

Vim & Neovim

  • SLIMV - Superior Lisp Interaction Mode for Vim; a full-blown environment for Common Lisp inside of Vim. No license specified.
  • Vlime - VLIME: Vim plus Lisp Is Mostly Evil. A Common Lisp dev environment for Vim (and Neovim). MIT.
  • quicklisp.nvim - A Quicklisp frontend for Neovim.
  • Slimv_box - slimv in a Docker container.

Eclipse

  • Dandelion - a Common Lisp plugin for the Eclipse IDE.

Lem

  • Lem - a ready to use, Emacs-like, Slime-based editor tailored for Common Lisp development out of the box, as well as other programming languages with its built-in LSP client. With ncurses, Electron and SDL2 interfaces. MIT.

  • 🚀 Lem on the cloud (video presentation)

    • "Rooms is a product that runs Lem, a text editor created in Common Lisp, in the Cloud and can be used by multiple users."
    • NEW as of April, 2024.

Atom, Pulsar

  • SLIMA allows you to interactively develop Common Lisp code, turning Atom (or now Pulsar) into a pretty good, and actively developped, Lisp IDE. MIT.

Sublime Text

  • Sublime Text (proprietary) has Common Lisp support with its SublimeREPL and Slyblime packages. Slyblime is an implementation of SLY and it uses the same backend (SLYNK). It ships advanced features including a debugger with stack frame inspection.

VSCode

JetBrains

  • SLT - an IDE Plugin for Itellij/Jetbrains IDE lineup implementing support for Common Lisp via SBCL and Slime/Swank.
    • 🎉 NEW! Released in Jan, 2023.

Geany (experimental)

Notebooks

REPLs

  • cl-repl - an ipython-like REPL. With completion, shell commands, magic commands, debugger, etc. GPL3. With colorthemes.
    • new as of 2024: it now provides multi-line input and binary releases. Simply download a binary (Ubuntu so far) and run it.
  • sbcli - a readline REPL for SBCL. With completion, quick commands, optional syntax highlighting (with pygments), and no interactive debugger. GPL3.
  • magic-ed - a tiny editing facility, where you can directly load, edit, manipulate and evaluate file or file content from the REPL, when going to a full IDE is too much. MIT.

Online editors

  • Judge0 IDE is an online editor which supports Common Lisp (SBCL). MIT.
  • Riju, a "fast online playground for every programming language", supports Common Lisp (SBCL).

Apps

Text and binary parsers

  • esrap - Packrat parser. Expat.
  • alexa - A Lexical Analyzer Generator. BSD_3Clause.
    • ALEXA is a tool similar to lex or flex for generating lexical analyzers. Unlike tools like lex, however, ALEXA defines a domain-specific language within your Lisp program, so you don't need to invoke a separate tool.
  • cl-yacc - a LALR(1) parser generator. MIT.
  • cl-shlex - simple lexical analyzer for shell-like syntaxes. MIT.
  • smug - parser combinators for Common Lisp. SMUG makes it simple to create quick extensible recursive descent parsers without funky syntax or impenetrable macrology. MIT.
  • parseq - a library for parsing sequences such as strings and lists using parsing expression grammars. Inspired by Esrap. GPL2.
  • lisp-binary - A library to easily read and write complex binary formats. GPL3.
  • uclp - An experimental implementation of parsing expression grammars (PEGs, a la Janet) in Common Lisp. MIT.

see also:

Text Processing

  • montezuma - Full-text indexing and search for Common Lisp. Expat.
  • mk-string-metrics - Calculate various string metrics efficiently in Common Lisp (Damerau-Levenshtein, Hamming, Jaro, Jaro-Winkler, Levenshtein, etc). MIT.
  • wiki-lang-detect - Text language identification using Wikipedia data. No license specified.
  • cl-phonetic - Phonetic pattern matching library for Common Lisp (intended to replace the Sylvia library for Python). MIT.
  • cl-string-generator - Generate string from regular expression. MIT.
  • trivial-sanitize - clean html strings: "<a>foo</a>""foo". LLGPL.

See also:

  • Resolve - A software for AST-based diff calculation, display, and automated resolution. Written in C++ and CL, you'll find Lisp utilities.

Tools

These are applications or bits of code that make development in Common Lisp easier without being Common Lisp libraries themselves.

Unit Testing

  • FiveAM - Simple regression testing framework. FreeBSD.
  • CLUnit2 - A unit testing library. MIT.
  • Parachute - An extensible and cross-compatible testing framework. With test dependencies, conditions, fixtures and restarts. zlib.
  • Mockingbird - A small stubbing and mocking library for Common Lisp. Can also check wether a stubbed function was called, how many times and with which arguments. MIT.
  • cl-mock - Another mocking library. It has more features than Mockingbird, like pattern matching on the mocked call, etc.
  • Check-it - A QuickCheck-style randomized property-based testing. LLGPL.
  • cl-coveralls - a helper library to post test coverage to Coveralls. See SBCL's code coverage tool. FreeBSD.
  • CheckL - Why write programs in Common Lisp but tests like Java? Meet CheckL!
    • a testing library that checks the current test value against the previous one and offers restarts.

See also:

  • testieren - a testing utility where tests are included at the top of a defun/t form. They are run when you recompile your functions interactively. With mocking and stubbing support. GPL3.
  • cl-hamcrest - a set of Hamcrest matchers that can be combined to create flexible expressions of intent. Helps make your unittests more readable by using assertions such as has-plist-entries, has-slots, has-length, contains, contains-in-any-order, has-allBSD_3Clause.

Editor utilities:

  • Slite - a SLIme-based TEst runner for FiveAM Tests. Apache2.0
    • Slite interactively runs your Common Lisp tests (at the time of writing only FiveAM is supported). It allows you to see the summary of test failures, jump to test definitions, rerun tests with the debugger, all from inside Emacs.

For more: Sabra Crolleton's extensive test frameworks comparison.

Utilities

Caching

  • clache - General caching facility. Cache any Lisp object on disk or in memory. A cache can be persistent or have an expiration time. LLGPL.
  • function-cache - A Common Lisp function caching / memoization library. BSD.

Compression / decompression

Configuration

  • 👍 py-configparser - reads and writes Python's ConfigParser-like configuration files. MIT.
  • envy - Configuration switcher. FreeBSD.
  • chameleon - a configuration management library shipped with profile support. MIT.

CSV

  • cl-csv - A library for parsing CSV files. 3-clause BSD.
  • cl-decimals - Decimal number parser and formatter. Public domain.
  • auto-text - automatic (encoding, end of line, column width, csv delimiter etc) detection for text files. MIT. See also inquisitor for detection of asian and far eastern languages.
  • csv-validator - Validates tabular CSV data using predefined validations, inspired from its Python homologue "Great Expectations". BSD_3Clause.

Date and time

  • local-time - A development library for manipulating date and time information in a semi-standard manner. 3-clause BSD.
  • fuzzy-dates - A library to fuzzily parse date and time strings. Zlib.
  • cl-date-time-parser - Parse date-time-string, liberally. Hides the difference between date-time formats, and enables to manage date and time as the one date-time format. MIT.
  • chronicity - A natural language date and time parse, to parse strings like "3 days from now". BSD_3Clause.
  • local-time-duration - Duration processing library built on top of local-time. MIT.
    • see this fork: humanize-duration, that outputs only significant parts of a duration object. Has localization suport.
  • iso-8601-date - Miscellaneous date routines in Common Lisp, based around the ISO 8601 string representation. LLGPL.
  • calendar-date - a Gregorian calendar date library. MIT.
  • periods - manipulating date/time objects at a higher level. With series-compatible data structure. BSD_3Clause.
  • stopclock - a library for measuring time using (stop)clocks. It allows you to create a clock, pause it, resume it and change its speed. Apache2.0.

See also the book Calendrical calculations, by Edward M. Reingold, Nachum Dershowitz, Cambridge Press. It provides Lisp sources.

Data validation

  • ratify - A collection of utilities to ratify, validate and parse inputs. zlib.
  • clavier - General purpose validation library for Common Lisp. MIT.
  • json-schema - A library for validating data against schemas of drafts 4, 6, 7, and 2019-09 of the JSON Schema standard. LLGPL.
  • sanity-clause - a data serialization/contract library for Common Lisp. Schemas can be property lists or class-based, allowing to check slots' types during make-instance. LLGPL.
  • cl-semver - Implementation of the Semantic Versioning Specification. MIT

Developer utilities

  • repl-utilities - Ease common tasks at the REPL (print documentation, print external symbols, call hooks when loading a package,…). BSD_2Clause.
  • flight-recorder - a robust REPL history facility.
  • tracer - tracing profiler for Common Lisp, with output suitable for display in Chrome’s/Chromium’s Tracing Viewer. MIT.
  • cl-flamegraph - A wrapper around SBCL's statistical profiler, to generate FlameGraph charts for Common Lisp programs. BSD.
  • cl-debug - a cross-package debug facility. Provides a unified way to enable or disable debug-specific code. Debugging code can be enabled or disabled relative to program features denoted by either a symbol or a keyword. ISC licence.
  • supertrace - Superior Common Lisp trace functionality for debugging/profiling. Trace many functions at once, use before and after hooks. BSD_2Clause.
  • printv - A batteries-included tracing and debug-logging macro. Apache2.
  • journal - a library for logging, tracing, record-and-replay testing and persistence. MIT.

and also:

  • GTFL - A graphical terminal for Lisp, meant for Lisp programmers who want to debug or visualize their own algorithms. A graphical trace in the browser. BSD-style.
  • trivial-benchmark - Tiny benchmarking library. zlib.
    • a similar macro (benchmark) is part of trivial-time, providing support for more implementations (ABCL, Allegro, CCL, CLISP, ECL).
    • Indeed, most trivial-benchmark's metrics are only implemented on SBCL. On other implementations, it measures real and user-space time (and not bytes allocated (it does for ECL), system run-time or GC run-time).
  • glyphs - A library for cutting down the verboseness of Common Lisp in places. GNU GPL3.
  • Lisp REPL core dumper - A portable wrapper to generate Lisp cores on demand to start REPL blazing fast. It can preload provided systems to help build a collection of specialized Lisp cores.

Documentation builders