Awesome
<div align="center"> <img src="http://i.imgur.com/jLVXhpc.png"> </div>My Curated Awesome Common Lisp
A curated list of awesome Common Lisp stuff, curated for beginners.
Also don't miss the https://lispcookbook.github.io/cl-cookbook/ :)
You are invited to make your own curated list, and reference it here!
edit: I now take much more care of the original list
This was forked from the Awesome Common Lisp and modified following the ideas:
- useful things (for beginners) first: dev environment comes first, crypto last.
- prefer libraries that are superseeded by new and better ones: Drakma is replaced by Dexador
- prefer documented libraries
- justifications come from my experience, and I am not experienced on all topics.
- remove some stuff. For a real look at the CL ecosystem, refer to the Awesome List, to Quickdocs or to Cliki.
All libraries listed here are available from Quicklisp.
This is released under the GNU Free Documentation License - its text is provided in the LICENSE file.
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-generate-toc again -->Table of Contents
- My Curated Awesome Common Lisp
- Community
- Development Environments
- Text Editor Resources
- Implementations
- Build Systems
- Library Manager
- Tools
- Web
- XML
- JSON
- CSV
- Database and ORMs
- Foreign Function Interface
- Game Development
- Graphics
- GUI
- Natural Language Processing
- Numerical and Scientific
- Parallelism and Concurrency
- Regex
- Unit Testing
- Continuous Integration
- Utilities
- Crypto
- Learning and Tutorials
- Contributing
Community
- Common Lisp Cookbook
- Quickdocs - Ready and up to date documentation for all Common Lisp projects.
And see below, learning and tutorials.
Text Editor Resources
This contains plugins and other goodies for various text editors.
Emacs
- Portacle - A portable and multiplatform Common Lisp environment: SBCL, Quicklisp, Emacs, Slime, Git.
- SLIME - Superior Lisp Interaction Mode for Emacs; a full-blown environment for Common Lisp inside of Emacs. Public domain.
Vim
- SLIMV - Superior Lisp Interaction Mode for Vim; a full-blown environment for Common Lisp inside of Vim. No license specified.
Atom
- SLIMA allows you to interactively develop Common Lisp code, helping turn Atom into a full-featured Lisp IDE. MIT.
VSCode
- alive - Common Lisp Extension for VSCode. Public domain.
- see the Cookbook: using VSCode with Alive
Notebooks
- cl-jupyter - A Common Lisp kernel for Jupyter notebooks custom licence.
REPLs
- cl-repl - an ipython-like REPL. With completion, shell commands, magic commands, debugger, etc. MIT. With colorthemes.
- sbcli - a simple readline REPL that doesn't get in your way. It doesn't have a debugger, it just prints the error. With optional syntax highlighting and useful shortcuts.
Implementations
- SBCL - A fork of CMUCL; compiles to machine code. Standard compliance. Public domain, with some parts under Expat and 3-clause BSD.
- Just use it if you don't know
- Install it from your package manager:
apt install sbcl
- It does thorough type checking
- Google contributes to SBCL!
- Clozure Common Lisp, for its fast compilation time, and to use on 32bits Raspberry Pi.
But there are more, see other ressources.
Build Systems
- ASDF - it's the de-facto build system shipped with the implementations.
Library Manager
- Quicklisp - The library manager.
- *You just must use it, then learn other tools that complement it.
- Ultralisp - A quicklisp distribution that builds every five minutes (instead of one month for Quicklisp), and requires 3 clicks to add your project to it (instead of opening an issue and waiting for Quicklisp).
- Roswell - A Lisp implementation installer, script launcher and more.
- it's useful, but not necessary to getting started.
- qlot - A project-local library installer, similar to Bundler or Carton.
Tools
These are applications or bits of code that make development in Common Lisp easier without being Common Lisp libraries themselves.
- cl-cookieproject - my project skeleton, more complete than the others. New in 2021 :)
- quicksearch - Look up online libraries from the REPL. This one helped me sometimes.
Web
HTTP clients
- Dexador - An HTTP client:
(dex:get "http://url.com")
.
Web frameworks
There are more on the awesome-cl list, and in the wild. Those are my choices.
- Hunchentoot documentation on a "read the docs" style: https://common-lisp-libraries.readthedocs.io/hunchentoot/
- 👍 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.
- I like it a lot, that's what I use to define routes.
- Caveman - A powerful web framework.
- Written by E. Fukamachi, and with stars.
- Wookie - Asynchronous HTTP server. Expat.
- Snooze - A RESTful web framework, built on Clack, where routes are just functions and HTTP conditions are just Lisp conditions. LLGPL.
- it seems great
- radiance - An extensible framework library and multi-application CMS.
- 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.
- Weblocks - A widgets-based framework with a built-in ajax update mechanism that "solves the JavaScript problem". LLGPL.
- see its getting started tutorial, and come follow in the Gitter chat. I don't find Weblocks readme, though I built a toy web app with success. Things are happening there.
There are more projects, more or less discontinued but interesting. See the other ressources.
my 2 cents: I find Clack-based frameworks (like Caveman) tedious to use. Be sure to test others (Wookie, Snooze,…). Don't juge projects uniquely by their numbers of Github stars.
HTTP Servers
- Hunchentoot - the CL web server.
- Clack - A web application environment inspired by Rack and WSGI.
- but it's seldom documented :/
- wookie - Asynchronous HTTP server. Expat.
- woo - A fast non-blocking HTTP server on top of libev. MIT.
Clack extensions:
- clack-errors - Error page middleware for Clack. LLGPL.
- hermetic - Security for Clack-based web applications. Expat.
Parsing html
- Plump - A lenient HTTP/XML parser, tolerand on malformed markup. Artistic License 2.0. Best used with lquery and clss.
Querying HTML/DOM
- lquery - A jQuery-like HTML/DOM manipulation library. Artistic License 2.0.
HTML generators and templates
- Djula - A port of Django's template engine to Common Lisp.
- very good, easy to use, no surprises. For example, defining custom filters is a breeze.
- Ten - by Djula's maintainer, a more flexible framework, where we can write lisp expressions in templates.
- Quite new, didn't try.
- spinneret - Common Lisp HTML5 generator.
- cl-markup - Modern markup generation library. LLGPL.
There are at least two for JSX-like mix of HTML inside Lisp. Crazy.
URI handling
- quri - Another URI library for Common Lisp. Supports userinfo, IPv6 hostname, encoding/decoding utilities,…
- cl-slug - a small library to make slugs, mainly for URIs, transform in CamelCase, remove accentuation and punctuation, for english and beyound.
Javascript
- Parenscript - A translator from Common Lisp to Javascript. 3-clause BSD.
- parse-js - A package for parsing ECMAScript 3. zlib.
- JSCL - A CL-to-JS compiler designed to be self-hosting from day one. Lacks CLOS, format and loop.
- sigil - A Parenscript to Javascript command line compiler and REPL. MIT.
See also trident-mode, an Emacs minor mode for live Parenscript interaction.
and new ones in development:
- see the awesome list. There are wrappers to online services to send emails, and full IMAP solutions.
Third-party APIs
- Aws-sign4 - Common Lisp library for Amazon Web Services signing version 4. GNU GPL3.
- 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. Artistic License 2.0.
- avatar-api - Get avatars from Google+, Gravatar and others. Expat.
- chirp - A Twitter client library. Artistic License 2.0.
- cl-irc - An IRC client library. Expat.
- cl-openid - An implementation of OpenID. LLGPL.
- cl-pushover - Common Lisp bindings to Pushover. MIT.
- cl-ses - Library for AWS SES. Expat.
- humbler - A Tumblr API interface. Artistic License 2.0.
XML
- CXML - XML parser, with a range of extension libraries. LLGPL.
- Plump - A lenient HTTP/XML parser, tolerand on malformed markup. Artistic License 2.0. Best used with lquery and clss.
- s-xml - A basic parser. LLGPL.
- xmls - A small, simple, non-validating XML parser. 3-clause BSD.
JSON
CSV
- cl-csv - A library for parsing CSV files.
- battle tested, used in the wild.
Database and ORMs
- mito - An ORM for Common Lisp with migrations, schema versioning, relationships, PostgreSQL support.
- I like it. It is an ORM, in that it allows to define classes and map them to tables, it gives CRUD functions for free, but other than that it is very flexible. We are closer to SQL than other ORMs out there.
- postmodern - A library for interacting with PostgreSQL.
For much more, see the awesome-cl list.
Interaction with other languages
Python
- py4cl - A library that allows Common Lisp code to access Python libraries. It is basically the inverse of cl4py. MIT.
- cl4py - The library cl4py (pronounce as clappy) allows Python programs to call Common Lisp libraries. MIT.
See also async-process.
Game Development
- see the awesome list.
Graphics
These are libraries for working with graphics, rather than making GUIs (i.e. widget toolkits), which have their own section.
- cl-cairo2 - Cairo bindings. Boost 1.0
- cl-gd - A library providing an interface to the GD graphics library. FreeBSD.
- cl-opengl - CFFI bindings to OpenGL, GLU and GLUT APIs. 3-clause BSD.
- cl-sdl2 - Bindings for SDL2 using C2FFI. Expat.
- cl-svg - A basic library for producing SVG files. Expat.
- [CLinch][63] - Common Lisp 2D/3D graphics engine for OpenGL. FreeBSD.
- donuts - Graph drawing DSL for Common Lisp. Expat.
- lispbuilder-sdl - A set of bindings for SDL. Expat.
- Vecto - Simple vector drawing library. FreeBSD.
- zpng - A library for creating PNG files. FreeBSD.
GUI
https://lispcookbook.github.io/cl-cookbook/gui.html
- ltk - A binding for the Tk toolkit. LLGPL or GNU LGPL2.1.
- if you want a simple GUI and to be started the fastest, try Ltk!
- nodgui - Bindings for the Tk toolkit, based on Ltk, with syntax sugar and additional widgets.
- nodgui defines more widgets and syntax suger for Ltk. His maintainer his reactive.
- 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.
- More advanced than Tk, less than Qt. Also very easy to use. The Lisp library is very well done. Totally deserves more attention.
- Qtools - A Qt4 toolkit, based on CommonQt.
- outdated. There's a Qt5 wrapper for ECL. I heard a Qt5 Qtools is coming…
- ceramic - Desktop web apps with Common Lisp. Expat.
- Electron-lisp-boilerplate - A rudimentary boilerplate for building Electron apps with embedded Lisp helper processes.
- Electron app skeleton: electron-sbcl-sqlite
- LispWork's CAPI - A portable GUI toolkit, with mobile runtime. Proprietary, but comes with a free version.
- the free version is easy to install, we can try it.
Natural Language Processing
See the awesome-cl list.
Numerical and Scientific
Cookbook: multidimensionnal arrays
I am not knowledgeable here
- cl-spark - Generates sparkline strings for lists of numbers. Expat.
- GSLL - GNU Scientific Library for Lisp; allows the use of the GSL from Common Lisp. GNU LGPL2.1.
- 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/
- ships Luke Tierney's XLisp-Stat (a predecessor of R) as well as newer libraries.
- common-lisp-stat - Common Lisp statistics library. FreeBSD.
- lisp-matrix - A matrix package. FreeBSD.
- maxima - Computer algebra system. Not available on Quicklisp. GNU GPL3.
Parallelism and Concurrency
- BordeauxThreads - Portable, shared-state concurrency. Expat.
- lparallel - A library for parallel programming. 3-clause BSD.
- lfarm - distributing work across machines (on top of lparallel and usocket). BSD_3Clause
- cl-async - A library for general-purpose, non-blocking programming, built on libuv (the library that powers Nodejs). Expat.
- chanl - Portable, channel-based concurrency. Expat, with parts under 3-clause BSD.
- 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.
Actors pattern
- cl-gserver - an Erlang inspired GenServer. It is meant to encapsulate state, but also to execute async operations. Also with actors. Functionality regarding state is not unsimilar to Clojure's Agent or cl-actors. MIT.
Event processing
- simple-tasks - A very simple task scheduling framework. Artistic License 2.0.
- deeds - Deeds is an Extensible Event Delivery System. It allows for efficient event delivery to multiple handlers with a complex event filtering system. Artistic License 2.0.
- 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.
- cl-cron - A simple tool that provides cron like facilities.
- it has no GitHub stars because it was on Bitbucket, but it's easy to use and it works well. Recommended.
- clerk - a cron-like scheduler with sane DSL. MIT.
Regex
- cl-ppcre - Portable, Perl-compatible regular expressions. FreeBSD.
- one-more-re-nightmare - a fast-ish regular expression compiler in Common Lisp. BSD_2Clause.
Unit Testing
Cookbook: testing and continuous integration
- FiveAM - Simple regression testing framework.
- 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.
- Check-it - A QuickCheck-style randomized property-based testing. LLGPL.
- cl-coveralls - a helper library to post test coverage to Coveralls. See continuous-integration on lisp-lang.org and SBCL's code coverage tool. FreeBSD.
I think Parachute and Rove are unfinished and not enough developped.
Continuous Integration
Cookbook: testing and continuous integration
- Travis CI: we can use Roswell on Travis CI: see a tutorial (cl-travis doesn't work with Travi's Docker based architecture).
- cl-coveralls
- Gitlab CI: https://lispcookbook.github.io/cl-cookbook/testing.html#gitlab-ci
Utilities
Language extensions
- alexandria - A general-purpose utility library.
- you must know that one.
- serapeum - Another general-purpose utility library.
- lots of good stuff. Definitely worth checking out.
- rutils - radical yet reasonable syntactic utilities for Common Lisp.
- also lots of good stuff. For example the hash-table utilities. I sometimes dislike the naming and the symbols used.
- :star: trivia - Optimized pattern-matching library. LLGPL.
- 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.
- FSet - A functional, set-theoretic collections data structure library. LLGPL.
- trivial-types - Trivial type definitions. LLGPL.
- cl-algebraic-data-type - A library for defining algebraic data types in a similar spirit to Haskell or ML. 3-clause BSD.
Changing the syntax
- pythonic-string-reader - A simple and unobtrusive read table modification inspired by Python's three quote strings. BSD_3Clause.
- cl-reader - A utility library intended at providing reader macros for lambdas, mapping, accessors, hash-tables and hash-sets. MIT.
Iteration
- :star: iterate - An iteration construct for Common Lisp which is extensible and Lispier. MIT.
- but make you a favor, learn loop by example! https://lispcookbook.github.io/cl-cookbook/iteration.html
- 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.
- it has one clause that works for all data structures.
- trivial-do - Additional dolist style macros for Common Lisp. MIT.
- doplus – another extensible iteration library, similar to :for.
- 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.- this ones looks like THE successor to Series
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 Rutils.
System
The de-facto library is uiop, the Utilities for Implementation and OS Portability. It abstracts os utilities (getevn, chdir, etc), pathnames, the filesystem, images, spawning processes, and much more.
Cookbook: interfacing with your OS
I/O
- iolib - I/O library. Expat.
- fast-io - Fast octet-vector/stream I/O. 3-clause BSD.
- trivial-utf8 - A small library for doing UTF-8-based I/O. Not available on Quicklisp. No license specified.
Data validation
- ratify - A collection of utilities to ratify, validate and parse inputs. Artistic License 2.0.
- 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.
Date and time
- localtime - A development library for manipulating date and time information in a semi-standard manner. 3-clause BSD.
- 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.
- 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.
Logging
- log4cl - Logging framework modelled after Log4J.
There are more if you have special needs.
Crypto
- 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. Artistic License 2.0.
Learning and Tutorials
📢 Everyone, I have an announce! I have been learning CL the hard way: I read a lot, I wrote a lot of tutorials on the Cookbook and on my blog, I had to ask a lot of questions, I built libraries and softwares and I stumbled across a lot of issues. Often, my problems were not due to the language itself, but rather in interfacing with the outside world.
So, I built a Common Lisp course in videos with the goal for it to be the most efficient way to learn Common Lisp today. It is on Udemy:
You can find the table of contents details, notes and exercises on its Github. It takes so much time that it is not available for free. Check my Twitter or my blog for discounts (at the beginning of the month, often). Thanks for your support, it helps.
See also other videos I post on Youtube sometimes:
- How to create a full-featured Common Lisp project from scratch
- Web requests in Common Lisp: how to fetch the Github API
- etc
Online
Beginner
- Learn X in Y minutes | Where X = Common Lisp - Small Common Lisp tutorial covering the essentials.
- Practical Common Lisp - A good introductory text to Common Lisp, with practical examples.
- Common LISP: A Gentle Introduction to Symbolic Computation - A nice introduction into the language.
- Learn LISP: Simply Easy Learning - A good set of introductory tutorials; includes interactive examples.
- Common Lisp Koans - The project guides the learner progressively through many Common Lisp language features.
Intermediate
- CL Cookbook
- Common Lisp tips - A collaborative resource with useful tips and tricks.
- 📹 Common Lisp programming: from novice to effective developer, a video course tutorial on the Udemy platform, by me (@vindarel) (CL Cookbook, lisp-journey) (paywall, some free videos).
Advanced
- Let Over Lambda - A book on advanced macro techniques. The first six chapters are available online.
- On Lisp - Paul Graham's amazing book on Lisp macros (and other interesting things).
Reference
- 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.
- Common Lisp the Langauge - 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).
- Quickdocs - A reference for the libraries provided by Quicklisp.
Offline
Beginner
- Land of Lisp - A fun, game-oriented introduction to Common Lisp.
- Practical Common Lisp - A good introductory text to Common Lisp, with practical examples.
- Common Lisp Koans - The project guides the learner progressively through many Common Lisp language features.
Intermediate
- ANSI Common Lisp - A thorough, practical covering of the entire language, with exercises. Not recommended as a starter text, due to some caveats.
Advanced
- Let Over Lambda - A book on advanced macro techniques. All eight chapters are available in the print copy.
- Object-Oriented Programming in Common Lisp: A Programmer's Guide to CLOS - An old, but very thorough book on CLOS.
- Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp - A book on programming AI that covers some advanced Lisp.
Contributing
Contribute upstream to the awesome-cl list or write your own curated one, and share it!