Flexible Lisp Blogware

Upstream URL


Brit Butler <>




Build Status Quicklisp

coleslaw logo

Czeslaw Milosz was the writer-in-residence at UNC c. 1992. I used to see him all the time at the Hardback Cafe, always sitting at a two-top drinking coffee, reading, writing, eating chips and salsa. I remember a gentleness behind the enormous bushy eyebrows and that we called him Coleslaw. - anon

Coleslaw is Flexible Lisp Blogware similar to Frog, Jekyll, or Hakyll.

Have questions?

See the wiki for a list of coleslaw-powered blogs.

Coleslaw should run on any conforming Common Lisp implementations but testing is primarily done on SBCL and CCL.


Sitemap generationIncremental buildsAnalytics via Google or Piwik
Comments via DisqusComments via issoHosting via Amazon S3
Hosting via Github PagesEmbedding gfycatsTweeting about new posts
MathjaxPosts in ReStructured TextWordpress import


Step 1: Install this library.

$ ros install coleslaw-org/coleslaw      # With [Roswell](
$ export PATH="$HOME/.roswell/bin:$PATH" # If you haven't done this before for Roswell
CL-USER> (ql:quickload :coleslaw-cli)

Step 2: Initialize your blog repository.

$ mkdir yourblog ; cd yourblog
$ git init
$ coleslaw setup              # or
CL-USER> (coleslaw-cli:setup)

coleslaw setup / (coleslaw-cli:setup) will generate a .coleslawrc file in the current directory, which contains the configuration of the static website.

Step 3: Write a post file in the current directory. The file should contain a certain metadata, so use the coleslaw new command, which instantiates a correct file for you.

$ coleslaw new
Created a post .
# or 
CL-USER> (coleslaw-cli:new "post")
Created a post .

Step 4: Generate the site from those post files. The result goes to the staging directory specified in the .coleslawrc file. The staging directory is /tmp/coleslaw/ by default.

$ coleslaw          # or
$ coleslaw generate # or
$ coleslaw stage    # or
CL-USER> (coleslaw-cli:generate) ; or
CL-USER> (coleslaw-cli:stage)    ; --- these are all aliases

Step 5: You can launch a web server to check the result on a browser. (Running a webserver sometimes has a benefit over just opening an html file, e.g. the relative links behaves differently on a file:/// protocol)

$ coleslaw preview     # or
CL-USER> (coleslaw-cli:preview)

Step 6: and watch the file system to automatically regenerate the site!

$ coleslaw watch          # or even better,
$ coleslaw watch-preview  # or, on REPL,
CL-USER> (coleslaw-cli:watch)      ;; watch-preview does not work on REPL right now

Step 7: When you think your article is publishable, run

$ coleslaw deploy             # or
CL-USER> (coleslaw-cli:deploy)

To move the contents in the staging dir to the deploy dir. By default, this deploy command uses rsync to sync the directories, where the deploy dir could be a remote directory on the server which is running your website. By using a plugin, you can customize this behavior e.g. running the deploy on gh-pages.

For further customization, e.g. adding a new plugin, developing a new plugin, changing the deploy option, or creating a new theme, see the config docs.

We provide three default themes: hyde, the default, and readable (based on bootswatch readable).

A core goal of coleslaw is to be both pleasant to read and easy to hack on and extend. If you want to understand the internals and bend coleslaw to do new and interesting things, I strongly encourage you to read the Hacker's Guide to Coleslaw. You'll find some current TODO items towards the bottom.

Dependencies (13)

  • 3bmd
  • alexandria
  • clack
  • cl-closure-template
  • cl-fad
  • closer-mop
  • cl-ppcre
  • cl-unicode
  • inferior-shell
  • local-time
  • prove
  • trivia
  • uiop

Dependents (0)

    • GitHub
    • Quicklisp