Caveman 2

Now Available on Quicklisp

(defparameter *app* (make-instance '<app>))

@route GET "/"
(defun index ()
  (render #P"index.tmpl"))

Common Lisp, the most powerful language

Lisp is a language for doing what you've been told is impossible.

— Kent Pitman

Common Lisp is the standardized most powerful language with high-performance implementations in the world. It has lexical closures, multi-dispatch object system called CLOS, the metaobject protocol and macros.

As Caveman2 is written in portable Common Lisp, you don't need to compromise on its language.

Server independent

As Caveman2 bases on Clack, your web application works on many web servers without changing any code.

It is possible to run an application on Hunchentoot during development, and then use a faster backend like FastCGI for your production environment.

Database integration

Are you tired of hearing “lightweight” or “micro” web application framework with no database support?

Caveman2 adopts datafly as the default database library. Only after adding the database connection setting, it would be ready to use.

(use-package '(:myapp.db :sxql :datafly))

(defun search-adults ()
  (with-connection (db)
      (select :*
        (from :person)
        (where (:>= :age 20))))))

Datafly also has a powerful feature, “Model”. See the datafly documentation for advanced usage.

Fully extensible

Caveman2 is designed to not force anything to users. When you find a point you don't like in Caveman2, you can replace it by your favorites in most cases.

Do you want to use CL-WHO instead of CL-EMB? Are you a Postmodern fan? You can use them with Caveman2.


Caveman2 is available on Quicklisp since November 11, 2013.

(ql:quickload :caveman2)


Not ready yet. See README and API reference.

Example is running with Caveman2 and its source code is available on GitHub.

See Also


If you found a bug, report it on GitHub Issues. Of course, you can fork and send a pull request to me. Thank you for your contribution.