Choosing a static site generator
In recent years, among web developers and designers, there has been a significant increase in interest in static sites. We also did not stand aside from this trend and a few months ago published an article in which we described how our cloud storage can be used as a platform for hosting such sites. Quite unexpectedly, a very interesting discussion started around this article, and readers asked us to talk about static sites in more detail. Today we fulfill this request and begin a series of articles on static sites based on our repository.
The first publication in this series will be devoted to a comparative analysis of static site generators.
A static website generator is a software tool that turns text records (with or without markup) into static HTML pages. All tools of this kind work approximately the same: content is taken, glued to the template, and then sent to the hosting. The number of existing static site generators is hundreds, if not thousands.
How to choose a really worthwhile product from all this set? We decided to prepare our comparative review, which. as we hope. will help one of you make a choice. For comparison, we selected generators, which, firstly, can be made friends with our cloud storage. Secondly, we also took into account the following criteria:
- ease of installation and configuration;
- the presence of additional extensions and plugins;
- level of support (how the product is developing, how often it is updated; is there detailed documentation);
- supported deployment methods.
MiddleMan, Jekyll, Octopress
All three of these generators are written in Ruby and in many respects are similar in terms of their set of functions. That is why we decided to combine them into one group.
The installation procedure for all these products is fraught with some difficulties: the version of Ruby included in the official repositories of Linux systems is most likely not enough - you will have to upgrade it to the latest. You will also need to install the RubyGems package manager and the Rbenv version manager. We actively use
MiddleMan in our own practice: it is on it that the cloud storage promo site works , as well as selectel.io . Its undoubted advantage is a good and detailed documentation written in a simple and understandable language. A lot of extensions and plugins have been written for Middlemanwhose list is constantly updated.
Deployment is supported using FTP, SFTP, rsync, git (scripts for automating the deployment procedure are posted on the official website; another extension is published on GitHub ). Deployment to AWS and BitBalloon is also possible (there are corresponding plugins).
Jekyll (see also the article on Habré ) is known primarily for being used as the default engine for static sites based on GitHub Pages. Very often it is used for blogging. The undoubted advantage of Jekyll is its support for Liquid markup: this makes it possible to create templates using constructs exclusively of the markup language, and not the programming language.
There are quite a lot of extensions and plug-ins for Jekyll (see information on the official website , as well as here and here ). The official plugins are “tailored” mainly to work with GitHub Pages. The plugins published on GitHub are for the most part designed to enhance blogging capabilities ( adding a tag cloud , full-text blog search, and even a specialized plugin for scientific and educational blogs ).
Support for FTP is supported, as well as using rsync and git.
Unlike the previous two products, Octopressis a specialized generator: it is essentially an add-on for Jekyll with additional plug-ins and a responsive-template, which provide more convenient blogging.
The default markup format for posts is Markdown., but you can use plain HTML. An undoubted advantage of Octopress is the support for moving from other sites: for example, all entries from a Wordpress blog can be transferred to a new static blog using a special script (although it’s very likely that after the transfer the design of some texts may “break” and they need to be edited manually). Out of the Box support is also supported by the Disqus service, which simplifies the transfer of comments. Octopress-based blog can be integrated with social networks (Facebook, Twitter, Google Plus and others).
There are plugins that implement, for example, inserting calendars (similar to those that are sometimes found on Wordpress blogs), a list of similar posts, a tag cloud, and so on.
By default, deploy is supported using git (on GitHub Pages or Heroku) or rsync (on any hosting service where you can configure SFTP or run rsync). You can configure the deployment via FTP (you can read about how to do this, for example, here ).
This generator of static sites was originally intended as a complete analogue of Jekyll, only written in Python - hence the name that refers to the famous novel by R.L. Stevenson "The Strange Story of Dr. Jekyll and Mr. Hyde."
It is necessary to distinguish between the old and the new version of Hyde. The old version is based on Django templates; its development is currently paused (recent commits on the GitHub repository date from 2009-2010). The new Hyde (see also the repository on GitHub ) is currently under active development.
In terms of functionality, the new Hyde is no different from MiddleMan and Jekyll. We tested him a little, and he made a very good impression on us. Of the detected shortcomings, we single out only one: the project, as mentioned above, is in the stage of active development. That is why the documentation for it is presented so far in a very concise and concise form, and there are very few plugins and extensions (here is a short list on the official website).
Deployment is supported on GitHub Pages and Amazon S3.
Let's hope that in the future this tool will be further developed and become more convenient in work.
Pelican is also written in Python. Compared to many static site generators, it has an exceptionally wide range of functions: working with drafts, integration with social networks, adding images, converting HTML pages to PDF, multilingual support, and much more. It is very well suited for blogging (there is a plugin for porting blogs to Wordpress).
Posts can be written in Markdown, as well as in reStructuredText and Asciidoc formats .
Installed by Pelican via pip. During installation, the user will be asked several questions: where to store the site files, how the site will be called, where and in what way it needs to be deployed. There are many supported deployment methods: FTP, SSH, Amazon S3, GitHub Pages, Dropbox and RackSpace Cloud Files.
Grow (see also the official repository on GitHub ) is a very interesting and promising tool that we recently discovered. It is written in Python. To install Grow, just download the script from the official site - all the necessary packages will be installed automatically.
Grow is based on a “configuration, not code” approach. What does it mean? To create a new project (in the terminology Grow, projects are called pods), you need to clone the theme on the local machine, which is a repository on GitHub. The theme includes a set of configuration files that describe the entire architecture of the website. No programming code is required.
All project settings are stored in the podspec.yaml configuration file. It indicates the following parameters:
- project metadata (name, etc.);
- pre-processing tools used in the project (for example, SASS, Closure Compliler or others);
- information on the localization of the site (in particular, the list of locales in which the site will be available);
- information about static files and special pages;
- deployment settings.
How is content work done in Grow? All editable content (it can be presented both in Markdown format and in HTML) is stored in the / content directory. The page structure is described in the configuration files in the YAML format (see the example here ). During site building, Grow generates pages based on the specified settings.
Grow can automatically translate text fragments - for this, the Goslate library working with Google Translate is used. To translate a site, just run the translate command.
You can specify any web server as a deployment platform. Support for Dropbox, Google Cloud Storage, Amazon S3, Dropbox, Google AppEngine is supported.
Of course, as part of a quick review, it is hardly possible to talk about all the features of working with Grow. We recommend you try it - the tool is very promising.
This blogging-oriented static site generator is notable for being written in bash. He uses the cat, grep, and sed command-line utilities as the primary tools for creating static HTML pages.
For all its simplicity, Nanoblogger is not inferior in capabilities to many generators written in Python or Ruby. Among its useful functions, one can single out Atom / RSS support, the ability to create a calendar on a website, sort posts by categories, create an archive of posts, and others.
Installing Nanoblogger is extremely simple: it is included in the official repository of most popular Linux distributions and is installed using the standard package manager.
It is convenient to work with Nanoblogger from the command line. All commands are described in detail in documentation , their syntax is simple and straightforward.
The source code is also written very simply, if necessary, it can always be modified and “tailored” to the needs of a particular project (see, for example, a publication in which the author shares his own experience in configuring a blog based on Nanoblogger).
There are plugins and extensions for nanoblogger. The official set of plugins (nanoblogger extras) is also included in the official repositories and installed in the standard way.
Unfortunately, in 2013, work on the development and improvement of Nanoblogger was suspended for an indefinite period (see information on the official website ).
DocPad is written in CoffeeScript. To work with it, NodeJS must be installed on the client machine.
It is used by many for blogs, but the real possibilities of its application are much wider. This product is not a pure generator of static sites: it can be used both as a generator, and as an engine, and as a template engine. DocPad is equipped with a fairly convenient API that allows you to use only those functions that are needed at the moment; the rest can always be implemented independently.
The undoubted advantage of DocPad is, of course, a very detailed documentation. In addition, the so-called "skeletons" are published on the official website - blanks on the basis of which users can create their own sites.
There are a lot of different plugins written for DocPad . Of the most interesting extensions, we mention WYSIWYG editors and web interfaces that facilitate the publication of posts on a static blog.
On the official website, scripts have been published that automate deployment to various sites: Heroku, Appfog, Windows Azure, Docker, GitHub Pages, and others. There is also a specialized script for deploying to cloud storage - Amazon S3 and GoogleStorage.
The results of the review can be summarized in the following table:
|Ruby||MIT||Requires the latest version of Ruby, RubyGems||Detailed documentation is available, updates come out regularly||Many plugins and extensions, new ones appear regularly||FTP, SFTP, rsync, Git, AWS, BitBalloon|
|Ruby||MIT||Requires the latest version of Ruby, RubyGems, Rbenv||Detailed documentation is available, updates come out regularly||Many plugins and extensions||Git, FTP. SFTP, rsync, Amazon S3, Heroku|
|Ruby||MIT||Requires the latest version of Ruby, RubyGems, Rbenv||Detailed documentation is available, updates come out regularly||Many plugins and extensions||GitHub Pages, Heroku, FTP, SFTP, rsync|
|Python||MIT||Installed via pip||Minimum||Very few plugins||GitHub Pages, Amazon S3, SFTP|
|Python||GNU GPL||Installed via pip||Detailed documentation, actively developed and maintained||A large number of plugins for blogging||FTP, SSH, Dropbox, Amazon S3, Rackspace Cloudfiles|
|Python||MIT||Installed via script||Detailed documentation with videos||No plugins. Additional themes and templates are available.||Dropbox, Google Cloud Storage, Amazon S3, Google AppEngine|
|Bash||GNU GPL||Installed via package manager||Development and support paused||Few extensions||rsync FTP|
|CoffeeScript||MIT||Installation requires NodeJS and NPM||Detailed documentation is available, updates come out regularly||Many different extensions and plugins||Heroku, Appfog, Windows Azure, Docker, GitHub Pages|
For those who want to delve into the topic a couple of useful links:
- A list of static site generators with brief information on each product ;
- A catalog of popular generators with short reviews on them .
What experience do you have with static site generators, Habrausers?
If you can not leave comments here - welcome to our blog .