Skip to content

A curated and non exhaustive list of Common Lisp libraries and resources.

License

Notifications You must be signed in to change notification settings

vindarel/curated-awesome-cl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 

Repository files navigation

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.

Table of Contents

Community

And see below, learning and tutorials.

Text Editor Resources

Cookbook: getting started

This contains plugins and other goodies for various text editors.

Cookbook: editor resources

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

Notebooks

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:

Parsing html

Cookbook: web scraping

Querying HTML/DOM

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:

Email

  • see the awesome list. There are wrappers to online services to send emails, and full IMAP solutions.

Third-party APIs

XML

JSON

CSV

  • cl-csv - A library for parsing CSV files.
    • battle tested, used in the wild.

Database and ORMs

Cookbook: databases

  • 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.

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.
  • 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: numbers

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."
  • 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

Cookbook: threads

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

Cookbook: regular expressions

Unit Testing

Cookbook: testing and continuous integration

I think Parachute and Rove are unfinished and not enough developped.

Continuous Integration

Cookbook: testing and continuous integration

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.
  • 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

  • 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.
    • 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

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

Cookbook: 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

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:

Online

Beginner

Intermediate

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

Contributing

Contribute upstream to the awesome-cl list or write your own curated one, and share it!

About

A curated and non exhaustive list of Common Lisp libraries and resources.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published