Static Site Generators: A Beginner’s Guide

Let’s say your next project is going to be a simple HTML website for a resumé, marketing a product or service, documenting your software, or something along those lines. A great option for you is to build your website using static site generators (SSG).

There are tons of static site generators in a range of programming languages, such as JavaScript, Ruby, Go — the list goes on.

In this article, I’m going to list five popular static site generators and their main features, so that you can form a better idea of which one among them would be a good fit for your project.

I’m not claiming that I’ve provided the definitive list of SSGs or that I personally favor any of the software I include in my list over any other that’s available out there. However, all of the products in the list are popular, performant, well-documented and well-supported.

What Are Static Site Generators?

A common CMS (Content Management System), like WordPress for instance, builds the web page dynamically as it is being requested by the client: it assembles all the data from the database, and processes the content through a template engine.

On the other hand, a static site generator:

takes a different approach and generates all the pages of the website once when there’s actually changes to the site. This means there’s no moving parts in the deployed website. Caching gets much easier, performance goes up and static sites are far more secure. – StaticGen.

If you’re curious and would like to learn more, this great article by Brian Rinaldi looks closely at the inner workings of static site generators.

Now, let’s go through some options.

1. Hugo

Hugo - static site generators

Hugo is a very popular static site generator with over 32,000 stars on GitHub right now. It is written in Go, and advertises itself as being the fastest framework for building websites. In fact, Hugo comes with a fast build process, which makes building static websites a breeze and works great for blogs with lots of posts.

The docs are great and the Hugo website offers a fantastic quickstart guide that gets you up and running with the software in no time.

Here are some of Hugo’s best features:

  • Designed and optimized for speed: as a rule of thumb, each piece of content renders in about 1 millisecond
  • No need to install extra plugins for things like pagination, redirection, multiple content types, and more
  • Rich theming system
  • Shortcodes available as an alternative to using Markdown
  • Since July 2018, Hugo offers a powerful assets pipeline, Hugo Pipes.

2. Next.js

Next.js React-based static site generator

Next is a versatile framework for the creation of server-rendered or statically exported JavaScript apps. It’s built on top of React and is created by Zeit.

To install Next, run the following command in your terminal:

    npm install --save next react react-dom

Then add this script to your package.json file:

    {
      "scripts": {
       "dev": "next",
       "build": "next build",
       "start": "next start"
      }
    }

With this in place, every .js file becomes a route which gets processed and rendered automatically.

Next.js has great docs, where you can learn more about building and customizing your Next-based apps.

Here are a few things Next is very good at:

  • Next renders on the server by default, which is great for performance. For a discussion of the pros and cons of server-side rendering, check out this article by Alex Grigoryan on Medium
  • No setup necessary: automatic code-splitting, routing and hot reload out of the box
  • Extensibility: feel free to customize your setup by taking control of Webpack and Babel, routing and plugins
  • Great docs, tutorials, quizzes and examples to get you up and running from beginner to advanced user
  • Official and community plugins available
  • Tons of example apps to get you started.

3. Gatsby

Gatsby static site generator

Gatsby works great for documentation and blogs, it’s built in React and leverages GraphQL for manipulating data. If you’re curious and want to delve deeper, check out How to Build Your Static Site with Gatsby and the docs on the Gatsby website.

Here are some of Gatsby’s strong points:

  • With Gatsby you get to work with the latest web technologies. React, Webpack, modern JS, CSS, etc. all ready for you to just start coding your site
  • Gatsby’s rich plugin ecosystem allows you to use any kind of data you prefer from one or more sources
  • Easy deployment and scalability, which is mainly due to the fact that Gatsby builds static pages, which don’t require complicated setups
  • Gatsby is a Progressive Web Apps (PWA) generator. “You get code and data splitting out-of-the-box. Gatsby loads only the critical HTML, CSS, data, and JavaScript so your site loads as fast as possible. Once loaded, Gatsby prefetches resources for other pages so clicking around the site feels incredibly fast.” (Gatsby website)
  • Plenty of starter sites are available for you to grab freely and customize.

Check out our tutorial that shows you how to build your first static site with Gatsby.

4. Nuxt.js

Nuxt.js framework

Nuxt.js is a higher level framework built with Vue.js that lets you build production-ready web apps. With Nuxt you can choose among:

  • Server-side rendering for your website, also called universal or isomorphic mode. Nuxt uses a Node server to deliver HTML based on Vue components
  • Static site generation. With Nuxt you can build static websites based on your Vue application
  • Single Page Apps (SPAs). Nuxt gives you the configuration and the framework to build your Vue-based SPA.

Creating Nuxt-based websites can be done super quickly. Here’s the Hello World example on the Nuxt website. You can download it on your machine or play with it on Codesandbox to get started.

Here are some of Nuxt.js’s features:

  • Great performance: Nuxt-based apps are optimized out of the box
  • Modular: Nuxt is built using a powerful modular structure. There are more than 50 modules you can choose from to speed up your development experience
  • Relatively easy learning curve. Nuxt is based on Vue, which is a framework that makes it quick and painless to get started
  • Integrated state management with Vuex
  • Automatic Code Splitting
  • ES6/ES7 Transpilation
  • Bundling and minifying of JS & CSS
  • Managing <head> element (<title>, <meta>, etc.)
  • Pre-processor: Sass, Less, Stylus, etc.

5. VuePress

VuePress

VuePress is a Vue-powered static site generator. Its default theme is optimized for writing technical docs, therefore it works great for this type of site right out of the box.

A VuePress site works as a Single Page App (SPA) that leverages the power of Vue, Vue Router and Webpack.

To install VuePress globally, just run this command in your terminal:

    npm install -g vuepress

Then, to create a markdown file, run:

    echo '# Hello VuePress' > README.md

To start writing, run:

    vuepress dev

To build your site, run:

    vuepress build 

Here are some great features that VuePress has to offer:

  • Setting up your VuePress-based site is quick and you can write your content using Markdown
  • VuePress is built on Vue, which means that you can enjoy the web experience of Vue, Webpack, the possibility of using Vue components inside Markdown files and of developing custom themes with Vue
  • Fast loading experience: VuePress static sites are made of pre-rendered static HTML and run as a SPA once they’re loaded in the browser
  • Multilanguage support by default with i18n. Setting up other languages is also quite straightforward by adding a locales object to the themeConfig object inside your VuePress-based project’s config.js file.

Nuxt.js or VuePress?

Both Nuxt.js and VuePress are built on top of Vue.js and let you create static websites. So, which one is to be preferred over the other?

Let’s say that Nuxt.js can do everything VuePress does. However, in essence, Nuxt is best suited for building applications. VuePress, on the other hand, is ideal for creating static documentation websites that display content written in Markdown. A discussion on the project’s GitHub repo is being carried out in view of making VuePress also suited for feature-rich blogging sites. To learn more about how you can set up a simple blog with VuePress, head over to Creating a Blog with VuePress by Adam Collier.

In short, if all you need is a documentation site or a very simple blog in Vue.js, consider reaching out for VuePress — Nuxt would be overkill.

How to Choose a Static Site Generator

With all the options available, it’s easy to feel paralyzed when it comes to choosing a static site generator that fits the bill. There are some considerations that could help you sieve through what’s on offer.

Your project’s requirements should throw some light on the features you should be looking for in your SSG.

If your project needs lots of dynamic capabilities out of the box, then Hugo and Gatsby could be a good choice. As for build and deploy time, all of the SSGs listed above perform very well, although Hugo seems to be the favorite, especially if your website has a lot of content.

Is your project a blog or a personal website? In this case, Hugo and Gatsby could be excellent choices, while for a simple documentation website VuePress would be a great fit. If you’re planning an e-commerce website, then you might want to consider which SSG fits in well with a headless CMS for store management. In this case, Gatsby and Nuxt could work pretty well.

One more thing you might want to consider is your familiarity with each of the SSG languages. If you program in Go, then Hugo is most likely your preferred choice. As for the remaining options, they’re either built on top of React (Next and Gatsby) or Vue (Nuxt and VuePress).

With regard to stuff like great documentation, strong community and support, all of the static site generators I listed figure among the most popular, or rapidly gaining in popularity like VuePress.

Have you used static site generators for a project? Which one? How did you like the experience?