Haunt is a hackable static site generator written in Guile Scheme. A static site generator assists an author with generating the HTML pages that they publish on the web. Unlike “content management systems” such as Wordpress or Drupal, static site generators are not dynamic web applications (complete with a relational database) that build pages on-the-fly. Instead, web pages are built in advance, on the author’s computer, and copied to a web server when it is time to publish changes. The consequence of this design is that the web server no longer needs to run a complex, potentially insecure web application that connects to a database to retrieve data. Static files can be served easily by any generic web server. Since there is no web application or database server to deal with, static websites are easier to maintain, more secure, and resistant to high web traffic (“slashdotting.”) Furthermore, the entire website is stored in plain text, which allows the files to be version-controlled rather than kept in a relational database with no concept of history that needs to be backed up regularly.
At the time that Haunt was conceived, there existed literally hundreds of other static site generators. Why add another one? Haunt differentiates itself from most other static site generators in that it aspires to the Emacs philosophy of “practical software freedom.” Not only is the source code available under a Free Software license, as most static site generators are, it is designed to be easily hacked and extended without altering the core source code. Haunt purposefully blurs the line between document and program, author and programmer, by embracing the notion of data as code. A Haunt-based website is not simply data, but a computer program. This design strategy encourages authors to automate repetitive tasks and empowers them to extend the software with their own ideas.
To make such a system work well, a general-purpose, extensible programming language is needed. A traditional configuration file format simply will not do. The programming language that we feel is best suited to this task is Scheme, a clean and elegant dialect of Lisp. We believe that by giving authors the full expressive power of Scheme, they will be able to produce better websites and make better use of their time than with less programmable systems and less capable programming languages. Authors should feel empowered to hack the system to make it do what they want rather than what some programmer decided they should want. And perhaps most importantly, building websites with Haunt should be fun.
Websites written in Haunt are described as purely functional programs that accept “posts”, text documents containing arbitrary metadata, as input and transform them into complete HTML pages using Scheme procedures. Haunt has no opinion about what markup language authors should use to write their posts and will happily work with any format for which a “reader” procedure exists. Likewise, Haunt also has no opinion about how authors should structure their sites, but has sane defaults. Currently, there exist helpful “builder” procedures that do common tasks such as generating a blog or Atom feed. While the built-in features may be enough for some, they surely will not be enough for all. Haunt’s Scheme API empowers authors to easily tweak existing components, write replacements, or add entirely new features that do things no else has thought to do yet.