Static Blog Generators

Special Note

Since writing this, I've decided to focus on python more, and the results have been broken into several different pages; see the Python Web Authoring and Application Pages for more comprehensive and informative information on python-related tools. This page is not likely to be maintained.

Introduction

If you keep up with security vulnerabilities, you're probably familiar with the terrible track record of blogs. If you don't, perhaps you should search the National Vulnerability Database for the name of your favorite blog software.

It seems as though bugs in blogs are a very common intrusion vector, one that has humiliated a number of security experts, as demonstrated in the Zero for Owned zine.

Among many security experts, the consensus is that the only way to run it securely is to outsource hosting of it (so that compromises don't affect your site), which really just shifts the risk, and re-writing substantial portions or the whole thing.

One such project for "re-writing from scratch" is the secblog project.

The other major option is to have a system that generates a set of static HTML pages, so that no run-time logic is necessary (beyond the well-tested web server that serves up static pages). This has the downside of not allowing user comments, or dynamic content, but that's the tradeoff.

Many of these programs can generate other kinds of web content, not just blogs. I've written up all of my ideas for a web generator that I can remember in case anyone wants to see them.

I should apologize in advance for the variable quality of this page; it turned out to be a much larger project than I expected, and I realized how much I really needed a more powerful markup language while writing it. In particular, it would be handy to have more cross-references and a feature matrix.

In particular, since there are so many options, I had to narrow my focus somehow; I did this by starting with the python implementations, since that's what I'm most familiar with. Nothing against ruby; I have written some stuff in it, but it's still a little less familiar to me (the curly braces in particular still look alien).

Things You Need To Consider

Typically, the various programs will be written in some language. Furthermore, they will have two major components, a (lightweight) markup language and a templating system, which are often (but not always) particular to the language in which they're implemented.

Templating System

One main component in choosing a static blog generator is the templating system.

A Web template system describes the software and methodologies used to produce web pages and for deployment on websites and delivery over the Internet. Such systems process web templates, using a template engine. It is a web publishing tool present in content management systems, software frameworks, HTML editors, and many other contexts.
-- Wikipedia

Django Templates

Jinja2

Cheetah Template Engine

Mako Templates

Genshi

Genshi is a Python library that provides an integrated set of components for parsing, generating, and processing HTML, XML or other textual content for output generation on the web. The main feature is a template language that is smart about markup: unlike conventional template languages that only deal with bytes and (if you're lucky) characters, Genshi knows the difference between tags, attributes, and actual text nodes, and uses that knowledge to your advantage. [...]

Kid Templating

Zope Page Templates

TODO: finish up here on down...

Liquid

Markup Language

A markup language is a modern system for annotating a text in a way that is syntactically distinguishable from that text. The idea and terminology evolved from the "marking up" of manuscripts, i.e. the revision instructions by editors, traditionally written with a blue pencil on authors' manuscripts. Examples are typesetting instructions such as those found in troff and LaTeX, and structural markers such as XML tags. Markup is typically omitted from the version of the text which is displayed for end-user consumption. Some markup languages, like HTML have presentation semantics, meaning their specification prescribes how the structured data is to be presented, but other markup languages, like XML, have no predefined semantics.
-- Wikipedia

A lightweight markup language is a markup language with a simple syntax, designed to be easy for a human to enter with a simple text editor, and easy to read in its raw form.
Lightweight markup languages are used in applications where people might be expected to read the document source as well as the rendered output. For instance, a person downloading a software library might prefer to read the documentation in a text editor rather than a browser.
-- Wikipedia

Unfortunately, HTML is a pretty crappy markup language. Not only is it a bit hard to read and write, but it's overly complicated for most purposes. To that end, most of these static blog generators have something simpler and easier to use that gets converted to HTML; what are called lightweight markup languages (that page has a nice matrix comparison).

Your choices appear to be (in roughly descending order of popularity):

markdown

textile

ReStructuredText

kiwi

kramdown

The Contestants

Here we simply link to the projects themselves. Later we have a section with our reviews and summaries.

Python-based

Ruby-based

Other

Related

Reviews

TODO: feature matrix. RSS/Atom feeds?

Reviews of Python-based Generators

Hyde

Chisel

Cyrax

Tahchee

Growl

blatter

lanyon

poole

Poole is an easy to use Markdown driven static website generator. You write the content of your pages in Markdown and Poole creates a nice and simple site with a navigation menu. You don't need to learn a template or preprocessing engine.

Though Poole is made for simple sites, it has basic support for content generation by embedding Python code in page source files. This is a dirty merge of content and logic but for simple sites it's a pragmatic way to get things done fast and easy -- if you know Python you're ready to start.

Conceptually it's something in between plain Markdown to HTML conversion and more sophisticated site generators like Hyde.

Poole uses one global HTML skeleton file to inject the HTML versions of Markdown source pages into. Poole has basic support for generating content by embedding Python code in page source files. This is a dirty merge of content and logic but a pragmatic solution to get things done fast for simple sites. No need to learn a template or preprocessing engine.

Poole may be a good choice if you are familiar with Markdown and Python and if you want to build a rather simple site with only a spot of generated content.

firmant

Reviews of Generators Based on Other Languages

TODO : NEED TO FINISH FROM HERE DOWN

Frank

Has cool helpers for prototyping fast.

Inspired by Sinatra's simplicity and ease of use, Frank lets you build static sites using your favorite libs. Frank has a built in development server for previewing work as you develop. Frank also has a "dump" command for compiling and saving your work out to static html, css, and js.

Frank uses Tilt, so it comes with support for Haml & Sass, LESS, Builder, ERB, Liquid, Mustache, and CoffeeScript.

Hobix

command-line blogging & static pages & ruby.

hobix.com website is down, author's status unknown.

Jekyll

Jekyll is a simple, blog aware, static site generator. It takes a template directory (representing the raw form of a website), runs it through Textile or Markdown and Liquid converters, and spits out a complete, static website suitable for serving with Apache or your favorite web server.

Jekyll at its core is a text transformation engine. The concept behind the system is this: you give it text written in your favorite markup language, be that Markdown, Textile, or just plain HTML, and it churns that through a layout or series of layout files. Throughout that process you can tweak how you want the site URLs to look, what data gets displayed on the layout and more. This is all done through strictly editing files, and the web interface is the final product.

It can import from:

Suports permalinks

Uses liquid, a "Ruby library for rendering safe templates which cannot affect the security of the server they are rendered on".

Used by GitHub pages.

Uses Textile for markup.

Here is the inspiration for jekyll.

nanoc

nanoc is a Ruby web publishing system for building small to medium-sized websites.

nanoc is a tool that runs on your local computer and compiles documents written in formats such as Markdown, Textile, Haml... into a static web site consisting of simple HTML files, ready for uploading to any web server.

The target audience of nanoc is Rubyists with some level of Ruby experience. It does not hide its Ruby roots, as doing so would make it a lot less powerful. This does mean, however, that people new to Ruby will maybe not find nanoc to be the easiest static site generation tool out there.

Uses kramdown, a ruby implementation of markdown for markup.

Nanoblogger

BASH

Supports permalinks


Go to this level's
index
Travis's Homepage travis+web@subspacefield.org
Original date:
Updated: