AllegroServe, a web server written in Common Lisp
Switch branches/tags
save2011_02_16 release10.1_t6 release10.1_t5 release10.1_t4 release10.1_t3 release10.1_t2 release10.1_t1 release10.1_release_point release10.1_rc5 release10.1_rc4 release10.1_rc3 release10.1_rc2 release10.1_rc1 release10.1_beta3_release_point release10.1.beta2_release_point release10.1.beta_t6 release10.1.beta_t5 release10.1.beta_t4 release10.1.beta_t3 release10.1.beta_t2 release10.1.beta_t1 release10.1.beta_release_point release10.1.beta_rc4 release10.1.beta_rc3 release10.1.beta_rc2 release10.1.beta_rc1 release10.0_t3 release10.0_t2 release10.0_t1 release10.0_rc9 release10.0_rc8 release10.0_rc7 release10.0_rc6 release10.0_rc5 release10.0_rc4 release10.0_rc3 release10.0_rc2 release10.0_rc1 release10.0.pre-final.30_release_point release10.0.pre-final.17_release_point release10.0.beta_t13 release10.0.beta_t12 release10.0.beta_t11 release10.0.beta_t10 release10.0.beta_t9 release10.0.beta_t8 release10.0.beta_t7 release10.0.beta_t6 release10.0.beta_t5 release10.0.beta_t4 release10.0.beta_t3 release10.0.beta_t2 release10.0.beta_t1 release10.0.beta_release_point release10.0.beta_rc2 release10.0.beta_rc1 release_aclt2 release_acl100b14t8 release_acl100b11t7 release_acl100b10t6 release_acl100b8t5 release_acl100b7t4 release_acl100b6t3 release_acl100b4t2 release_acl100b2t1 release_acl90b21rc5 release_acl90b20_release_point release_acl90b20rc4 release_acl90b19rc3 release_acl90b18rc2 release_acl90b15_release_point release_acl90b15rc1 release_acl90b13t1 release_acl90b11t1 release_acl90b9t1 release_acl90b8t1 release_acl90b6_release_point release_acl90b6rc2 release_acl90b_release_point release_acl90a52rc1 release_acl90a44rc2 release_acl90a43rc1 release_acl90a39 release_acl90a39rc2 release_acl90a32 release_acl90a27 release_acl90a25 release_acl90a24 release_acl90a23 release_acl90a20 release_acl90a18 install-spider_2013-04-26T12-55-31 install-spider_2013-04-25T12-56-58 install-spider_2013-04-24T16-52-55 install-spider_2013-04-24T16-42-42 install-spider_2013-04-24T16-29-36 install-spider_2013-04-24T15-47-16 install-spider_2013-04-24T15-37-01 install-spider_2013-04-24T15-02-09 install-spider_2013-04-23T11-10-35
Nothing to show
Clone or download
dklayer Really fix defpatch forms
The patch numbers were one too high, since the previous patch was
never released.

Change-Id: I0650427a13c5a7a82db7cafb45ed95d51d3e4ea1
Reviewed-by: Kevin Layer <>
Tested-by: Kevin Layer <>
Latest commit 5a2b21a Oct 31, 2018
Failed to load latest commit information.
doc rfe14988: add documentation about SNI Jun 4, 2018
examples bug24672: adjustments for HTTPS on May 17, 2017
htmlgen rfe15026: optimize the compile of aserve Jun 22, 2017
test rfe15841: 1.3.66: caching for do-http-request Oct 30, 2018
webactions rfe15781: webactions 1.18: can use only cookies for sessions Aug 14, 2018
.gitignore Include local makefiles if they exist Sep 17, 2015
LICENSE rfe14185: update copyrights Aug 1, 2016 bug24672: adjustments for HTTPS on May 17, 2017
aserve.asd rfe14185: update copyrights Aug 1, 2016 rfe15026: optimize the compile of aserve Jun 22, 2017 bug9026: Fix source typo before compiler change Oct 30, 2018 rfe15026: optimize the compile of aserve Jun 22, 2017 bug25163: Fix setting response trailers when :xmit-server-response-bo… Mar 2, 2018 rfe15841: 1.3.66: caching for do-http-request Oct 30, 2018 bug25487: 1.3.62: fix x-www-form-urlencoded decoding Sep 6, 2018 Provide an :initial-element to the *header-index-sresource* array Jul 2, 2018
license-lgpl.txt join from acl50 branch Mar 16, 2000 rfe15841: 1.3.66: caching for do-http-request Oct 30, 2018 checkpoint Jun 29, 1999 rfe15026: optimize the compile of aserve Jun 22, 2017 rfe15026: optimize the compile of aserve Jun 22, 2017 rfe15841: 1.3.66: caching for do-http-request Oct 30, 2018
makefile bug23011: add targets to test w/explicit hiper switch Feb 2, 2018 Really fix defpatch forms Oct 31, 2018 rfe15026: optimize the compile of aserve Jun 22, 2017 rfe15026: optimize the compile of aserve Jun 22, 2017 rfe15456: read past the body of get (or any) request Apr 11, 2018 Make keep-alive timeout configurable at startup Jul 19, 2018 rfe15026: optimize the compile of aserve Jun 22, 2017

The AllegroServe Webserver

Table of contents

  • Description
  • Author
  • Author comments
  • Documentation
  • Platforms
  • Dependencies
  • Installation
  • Configuration
  • Licence
  • Notes
  • Examples
  • Open Source


AllegroServe has these components:

  • HTTP/1.1 compliant web server capable of serving static and dynamic pages
  • HTML generation facility that seamlessly merges html tag printing with computation of dynamic content. The HTML generator matches perfectly with the HTML parser (which is in another project) to allow web pages to be read, modifed in Lisp and then regenerated.
  • HTTP client functions to access web sites and retrieve data.
  • Secure Socket Layer (SSL) for both the server and client.
  • Web Proxy facility with a local cache.
  • Comprehensive regression test suite that verifies the functionality of the client, server, proxy and SSL
  • high performance for static and dynamic web page delivery
  • Licensed under terms that ensure that it will always be open source and that encourages its use in commercial settings.
  • A publish function that builds a page from static and dynamic data and handles caching of the result.
  • Access control mechanisms for publishing directories that gives the webmaster the ability to specify which files and directories in the tree should be visible.
  • The ability to run external CGI programs.
  • An improved virtual hosting system that supports different logging and error streams for each virtual host.

We've recently added these features:

  • The ability to compress and inflate files on the fly.
  • Support for chunking and http/1.1
  • Security up through TLS 1.0 (SSL 3.1).

See the latest Allegro CL Release Notes for more information on AllegroServe changes.


John Foderaro, Franz Inc.

Author comments

The server part of AllegroServe can be used either as a standalone web server or a module loaded into an application to provide a user interface to the application. AllegroServe's proxy ability allows it to run on the gateway machine between a company's internal network and the internet. AllegroServe's client functions allow Lisp programs to explore the web.

AllegroServe was also written and open sourced as a way to demonstrate network programming in Allegro Common Lisp. AllegroServe was written according to a certain coding standard to demonstrate how Lisp programs are more readable if certain macros and special forms are avoided.


AllegroServe works on all versions of Allegro Common Lisp since 6.0.


There are no dependences for AllegroServe. In order to run the allegroserve test suite you'll need to have the tester module (available at loaded.


start lisp

This should work in a lisp running in a :case-insensitive-upper or :case-sensitive-lower mode, although we do most of our running and testing in a :case-sensitive-lower lisp. The current case mode is the value of excl:*current-case-mode*

load in the file

user(1):  :ld <path-to-aserve>/

it will compile and and load all of AllegroServe, and it will load in the examples file too.

start the server

user(2):  (net.aserve:start :port 8000)

you can omit the port argument on Windows where any process can allocate port 80 (as long as it's unused).

try out the server

go to a web browser and try http://your-machine-name:8000/. If the web browser is on the same machine as AllegroServe is running you can use http://localhost:8000/ as well. Now that you've verified that it works, you'll want to create an aserve.fasl that you can load into your application.

change lisp's current directory to the AllegroServe source

user(3): :cd  <path-to-aserve>

make a distribution

user(4): (make-aserve.fasl)

now you'll find aserve.fasl in the aserve source directory.


See the doc/aserve.html file that is part of this project for more information on configuring AllegroServe.


For complete documentation see the contents of the doc directory, which is part of this project or visit the online version of the AllegroServe documentation.

Quick Start Documentation

cd to the directory containing the distribution and start Allegro cl (or start Allegro and use the toplevel ":cd" command to cd to the directory containing the aserve).

load aserve.fasl

user(1): :ld aserve.fasl

load the examples (either the compiled or source version)

user(2): :ld examples/examples

start the webserver

user(3):  (net.aserve:start :port 8010)

view in a browser


Usage notes

  • the steps to load the examples and start the server are interchangeable.
  • if you're running on a PC (or running as root on Unix) you can allocate port 80, so you don't have to specify a port when running the net.aserve:start function.
  • See the doc directory that is part of this project for more detailed usage documenation.


The aserve source code is licensed under the terms of the Lisp Lesser GNU Public License, known as the LLGPL. The LLGPL consists of a preamble and the LGPL. Where these conflict, the preamble takes precedence. This project is referenced in the preamble as the LIBRARY.


Webactions is a session-based framework for building web sites mixing static and dynamic content that builds upon AllegroServe and is part of this project.

See the webactions/doc/webactions.html file for more information.

For other links that may be of interest are:

Examples and Information

See the doc/tutorial.html file and the contents under the examples directory that are part of this project for more examples on how to work with AllegroServe.

Franz Inc. Open Source Info

This project's homepage is There is an informal community support and development mailing list for these open source projects. We encourage you to take advantage by subscribing to the list. Once you're subscribed, email to with your questions, comments, suggestions, and patches.