Welcome to BKNR!

Welcome to the Website of BKNR, the Common Lisp Web Application environment. This website aims to introduce the BKNR platform as well as provide you with pointers to the software itself.

What is BKNR?

BKNR is a set of Common Lisp libraries which together form an environment suitable for serving HTTP clients from a persistent Lisp system. It's major components are:

  • Persistence mechanism based on transaction logging, supporting immutable binary large objects and CLOS persistence.
  • XML processing facilities
  • HTTP application environment with session handling and template engine


Persistence in BKNR is achived using a transaction logging mechanism. All operations which change the persistent image of a system are explicitely written to a transaction log file. When the system crashes, the persistent state can be recovered by rolling forward the transaction log. The transaction log is held in a simple binary format in order to get acceptable restart times for larger datasets.

The persistence mechanism supports a snapshot API which allows the persistent object system to write all currently active objects to a sequential file.

The Persistent object subsystem provides for ID generation of objects. Object IDs of persistent objects are written to the transaction log. Persistent objects are never garbage collected and need to be deleted by the application if they are no longer in use.

BKNR supports automated indices for CLOS instances. They are implemented in a MOP metaclass and compatible with the BKNR metaclass for persistent objects.

XML processing

BKNR integrates the Closure XML (CXML) parser using a CLOS metaclass to provide for reading and writing XML files of objects. Combined metaclasses are provided in order to allow for combinations like indexed+persistent or indexed+xml.

CXML is also used for XHTML generation and XHTML template processing. User-defined element handlers can be added to the XHTML generation to support application-specific generation of dynamic content.

Web application environment

BKNR uses the portable aserve web server implementation as HTTP server. It provides for a handler dispatch mechanism based on CLOS objects and generic functions to provide for routing requests to objects and HTML form handling.

Session handling through cookies is supported, as well is a simple web-based CMS for maintaining user accounts and other application information.

A CSS and Javascript generation library supports in-source-code generation of complete web pages using a lisp-like syntax.

Other Libraries

Except for the graphics processing library used, all server-side components of BKNR are implemented in Common Lisp. All components are Open Source. All software outside of the thirdparty/ tree in the BKNR repository are distributed under a BSD-style open source license. The thirdparty/ tree contains a number of publicly available Common Lisp libraries which are used by BKNR.

BKNR has been co-developed with a number of real-world applications. Much of the application code has been kept in the central source code repository and evolved through a number of API and framework changes. BKNR started while implementing a web site for eboy, a group of graphics artists who wanted to have a dynamic web site for publishing their works. Their new, fully dynamic web site was implemented in CMU Common Lisp