top | item 7777852

Open-Source Static Site Generators

97 points| hihat | 12 years ago |staticgen.com | reply

54 comments

order
[+] rogerbinns|12 years ago|reply
I use Nikola. On the tech side the developer decided to model it as a series of tasks such as render photos, render posts, build rss etc. Those tasks are also implemented to run incrementally. For example if you add a new post then only that new post gets rendered to the output directory.

While this sounds fine in principle, it soon gets messy. A configuration change may require everything to be rebuilt. But if you rename or delete a source file it didn't track how that ended up in the output directory so you end up with a slow accumulation of crud. It turns out to be fairly easy to confuse all the incremental logic and end up with messy builds. Add poor decisions like using the datestamp of items in the output directory to build the sitemap (they don't set output directory datestamp to that of the input items) and you get important failings.

In my opinion, incremental builds should give the same results as full clean builds or you have a fragile non-repeatable build - something that is very undesirable. I wrote a bit more at http://www.rogerbinns.com/blog/on-nikola.html

[+] devty|12 years ago|reply
What made you stick with using Nikola? Any good things worth mentioning?
[+] asb|12 years ago|reply
How can you ensure that a fresh build on a new machine gives the same result? I can see how you can guarantee the same result in terms of file contents, but not on the file modification timestamp. e.g. if I have access to the last build it is easy to verify whether a configuration change actually resulted in modified output by comparing the file contents, meaning the last modified time can remain unchanged. When building from scratch, surely you have to assume the last modified time is the time of the build. Any thoughts?
[+] TillE|12 years ago|reply
It would be nice to have a more detailed feature comparison to get some idea of why I should choose one over the other.

I'm currently trying out Pelican just because I'm comfortable with Python and Jinja2 already, but I really have no idea if it's actually the best choice for the kind of site I'm trying to build.

[+] nness|12 years ago|reply
I've been involved in some incredibly large front-end development projects and Middleman was core to our FED workflow. Its a fantastic tool.
[+] bchen|12 years ago|reply
I’ve been doing the same—building a fairly large content-based website with around 100 pages for a telecom using Middleman. The site will be live soon, and I hope to be able to share more info about it when that happens.

So far, what I can tell is that Middleman provides a more efficient workflow than the database-driven CMSes I have used in the past.

[+] cabbeer|12 years ago|reply
What does it offer over jekyll?
[+] syntern|12 years ago|reply
Is there a static site generator with support for multiple authors and multiple languages?

e.g. with archive pages like /<author>/<lang>/<yyyy>/<mm>/ and category pages like /<lang>/<cat>/<subcat>/

I fail to see any. I've tried to configure many of the available generators, but no one seem to have the same itch I have.

[+] nuclear_eclipse|12 years ago|reply
My own personal project, Nib [1], could potentially support both requirements. It uses configuration and pipelines, and can generate "virtual" static pages during the pipeline, which currently gets used to generate the blog/article index, tag pages, etc. Shouldn't be too difficult to add the document properties and extend the configuration and templates to match.

https://github.com/jreese/nib

[+] ianstormtaylor|12 years ago|reply
You might want to check out Metalsmith — http://metalsmith.io/ — the archive pages could be pretty easily made using the collections plugin. And if you needed anything custom, the plugins are super easy to write and can manipulate however you choose.
[+] lgbr|12 years ago|reply
You might look into docpad, then. Jekyll and others are largely built around blogging, but docpad is more of a framework for writing code to generate static sites. It does a much better job of allowing you to do anything you want, porvided you're willing to write some javascript.
[+] syntern|12 years ago|reply
I appreciate the answers here. I took a deep look, but it turns out, that every application requires almost the same amount of massaging, especially at the point where my other requirements kick in (category page extra content).

It seems that so far the best approach would be to write a dynamic web app that does what I want, and save the content with wget. Seriously, it seems easier than any of the hackery I need to do.

[+] frik|12 years ago|reply
In 2004, RosCMS was one of the first open source static site generators with an web CMS.

The ReactOS.org website survived several Slashdot effects with a 500 MHz web server, back 2005 til 2013 (though old server was replaced in ~2007). The website has been translated into more than 27 languages.

http://old.reactos.org/en/roscms.html

Screenshots & video tutorials: http://old.reactos.org/en/tutorial_roscms.html

Source: http://svn.reactos.org/svn/web/tags/RosCMS-3_LastVersion/web... (2009)

RosCMS interface was one of the first AJAX websites back in 2005 - back then GMail still used hidden iFrames to emulate AJAX.

(historical information)

[+] currysausage|12 years ago|reply
Seriously, who came up with the idea that you should have to scroll down at least one full screen page in order to see just the tiniest bit of actual content?

On the home page - okay, if you need to do so. But why, just why on content subpages? Do you really believe that your purple banner with Roboto is that incredibly beautiful that I want to just stare at it for a minute before scrolling down to the meat, each single time that I click on a link?

"The computer industry is the only industry that's more fashion-driven than women's fashion." Damn, Ellison was so right about that.

Don't get me wrong, I am actually a typographer, and I am the last person on earth who wouldn't value appropriate white space. But ... seriously, find the right balance!

[+] tekahs|12 years ago|reply
What's the difference with http://staticsitegenerators.net ? Why another one ?
[+] sophacles|12 years ago|reply
It's the new thing. The recent static site generator explosion left the "market" saturated and overwhelming. More and more people looking to get eyeballs on their work have eschewed the notion of "I'll make an SSG", and instead are saying "I'll make an SSG comparator". However, as this is already becoming a thing, I think I'll spend the holiday weekend creating a site to help you choose an SSG comparator - get ahead of the curve and all.
[+] bobfunk|12 years ago|reply
StaticGen.com has actually been around longer, we just recently relaunched it.

I was thinking of just letting it lapse, but after using staticsitegenerators.net myself, I found I wanted a list that was a bit more strict, in the sense of not including anything that's not a static site generator (flat file CMSs like Kirby or even hosting services like BitBalloon or Fjords).

Also wanted some more details on the list, and there's a lot of potential to do more with a site like this in the future: more meaningful comparisons, guides to picking the right static site generator, etc...

Apart from that it was also just fun to redo the site with Middleman :)

[+] dminor|12 years ago|reply
The same might be said for the static site generators themselves :)
[+] itchyouch|12 years ago|reply
It's kind of a relief to see this. At my work, I don't have html files to build, but thousands of config files to build and the solution has been a home grown configuration generator. For us, cluster configuration is a simple binary blob + config, so it's a relief to see that the path I've gone down doesn't appear to be too crazy.
[+] yaddayadda|12 years ago|reply
Metalsmith (metalsmith.io) actually uses consolidate.js as a template manager. consolidate.js supports 24 separate template engines (https://github.com/visionmedia/consolidate.js). So Metalsmith's "templates" entry that only lists "Handlebars" is extremely misleading.

I suspect there are other generators on staticgen.com that also use consolidate.js and suffer the same misrepresentation. (I just don't know the other generators well enough to know off the top of my head which ones use consolidate.js.)

Of course, an error such as this makes me doubt all the other information presented on staticgen.com

[+] bobfunk|12 years ago|reply
It's actually explained in the rules. Might be a wrong decision, but we didn't want humongous list of templates for generators that support a library like this. So for all of those we go with the template engine they use by default (whether the default is simply their documentation and examples).

I do think it says something for the philosophy + out of box experience.

[+] vram22|12 years ago|reply
PySiteCreator is a small tool I wrote a while ago. It lets you create a web site by writing it in Python.

It's not meant to be a full-fledged static site generator, and has only a few features. I first wrote it as a tool to create wikis programmatically (and hence called it DSLWiki), but then realized that it can be used to create general web sites, so renamed it to PySiteCreator.

Blog post about it:

http://jugad2.blogspot.in/2009/11/early-release-of-pysitecre...

PySiteCreator on Bitbucket:

https://bitbucket.org/vasudevram/pysitecreator

[+] dstroot|12 years ago|reply
Octopress is a "built out" blogging example built on top of Jekyll. Showing Jekyll (a static site generator) and Octopress (a good example of how to build stuff on top of Jekyll) is a little misleading/confusing.

Splitting hairs maybe...

[+] rwhitman|12 years ago|reply
I've found a lot of these tend to be blog-centric, which seems odd to me considering the primary use case I've found with static site generators (Punch in my case) has been creating one-off content sites for clients in scenarios where we don't need a CMS. Folks seem to be really fixated on building these as blog engines, which I find baffling
[+] mantrax5|12 years ago|reply
It's because these systems were created with the focus being how cool it'd be to make a static site generator, versus the focus being solving a real problem.

We do this. I do this. We like to decide "how cool it'd be..." and do something. There's nothing bad in that, as long as we don't start coming up with invented reasons for its reasons to be.

When asked to quickly name a tool, most people say "hammer". When asked to quickly name a site application, most people think "blog". The focus on blogs inadvertently tells you that these authors were scratching their own itch of making the generator itself, and focused on the first application they could think of, and not responding to real needs. I remember when the coolest thing was for everyone to make their own web framework, everyone focused on making frameworks where blogs were easy to set up and demo. Notice a pattern?

In the end though, all sites need a machine to be put on, a server to serve them, and the arbitrary goal of pre-generating basic things like header and footer includes externally has little real value to offer when it comes to business needs ("business" used in a wide sense, as in people's real reason to have a site in the first place).

Any non-static site can maintain a static cache when performance is needed, and any non-static site can be as simple (and therefore as secure, by function of its complexity alone) as you need it. Maybe your non-static site "engine" can just do basic includes and support a contact form, and nothing else. It's easy to secure this, and you draw the line. But there's no need to ever cross that specific line where your site is 100% static. You have nothing to gain from it.

[+] rs|12 years ago|reply
Using Pelican for almost everything under http://exentriquesolutions.com - have tried Jekyll, but somehow Pelican seems much more pluggable.

Can't recommend Pelican enough - if you're still looking for one, do give Pelican a try: theme support, Jinja templating, plugins and much more.

[+] josephlord|12 years ago|reply
As I was doing some Rails work anyway I used Rails plus a little bash script and wget to crawl the site which I then deploy. It has it's limitations but I was able to get it all built quite quickly and didn't need to learn any new syntax (I've got the hang of Markdown since so I might do it differently if I did it again).
[+] Todd|12 years ago|reply
I don't see any option for C# site generators. Maybe they don't make it into the Top N.

(Disclaimer: I'm biased, I wrote one).

[+] vanderZwan|12 years ago|reply
I think it's fine to share a link to it if you acknowledge it as a shameless plug...
[+] bobfunk|12 years ago|reply
A C# generator on the list would be great - do send a pull request!

Or drop a link here :)

[+] robobro|12 years ago|reply
I recommend Blosxom whole-heartedly.
[+] pnathan|12 years ago|reply
Heh, I was working on a SSG early last summer for my own stuff in Common Lisp. It's easy to make a bad and overcomplicated one. I know - I did it. :)