Jekyll is a static site generator that lets you make a website from a bunch of text files. Maybe I’m sentimental and pine for simpler times when websites were just HTML. But for me Jekyll is so refreshing to work with after years of making websites with increasingly complicated machinery. At the end of the day a website is just a page of text, why not build it that way?

Here’s why it’s awesome…

It’s simple

There’s no PHP or database. It’s just folders of files. It’s easy to build and manage a Jekyll site. There are no forms to submit and buttons to click through. Once you’re used to typing in a text editor it’s surprisingly fast to create content.

It’s fast

Because the web server is just serving up static HTML files there’s no time spent generating a webpage. Think of how many steps are involved in the typical dynamic CMS; Initializing the application, authentication, querying the database, generating templates. None of that happens when someone views a Jekyll page. The site is built beforehand in one command and the server serves this prebuilt file.

It’s free

You can host your website on GitHub Pages or GitLab Pages all without paying a cent. It’s also open source so it’s free as in beer as well as free as in speech.

It’s retro. It will never go out of date because it’s already out of date. The concept of generating a website from a bunch of files has been around since the beginning of time :)

It can’t be hacked

DNS spoofing aside, there’s very little to hack on a Jekyll website. There’s no authentication, there’s no database to SQL inject, there are no back doors. Content is uploaded to a server via Git. It’s unlikely someone would gain access this way but if they did you could revert to a previous commit.

It’s surprisingly flexible

Check out my Music page, there’s an audio player that streams a song and a chart of musician’s voices. You can create and store different types of data using Jekyll collections. You can build complex things with Jekyll but there are some drawbacks…

Jekyll’s drawbacks

Jekyll isn’t dynamic, it has no database and there’s no code executed at run time to do different things based on different conditions. For example, it can’t display the current date when a user views a page because it doesn’t know what the current date is. It only knows the current date at build time when you generate your site, not on each page view.

You might want to display a list of upcoming events and automatically hide events that have already happened. Jekyll can’t do that, but there’s a way to overcome this. Javascript can be used to add a dynamic layer on top. With Javascript you could get the browser’s current date and hide events that have already happened. I’ve made a library that does just this.

Jekyll can’t do comments. That’s a pretty fundamental thing! But thankfully you can embed a service like Disqus at the bottom of your page. Technically your site is now using a database… just someone else’s.

Making Jekyll dynamic

The good news is that you can make Jekyll dynamic with Staticman. Staticman is a way to get user generated content on to your site. It lets users submit content that is then automatically merged into your codebase. Pretty cool!

Summary

Jekyll wont be running the next Facebook but it can run your personal blog or company site. I’m using Jekyll for this site (maedi.com) and for my board games. Of course you’ve got to be a little bit tech savvy to use Jekyll, but I don’t think that’s a bad thing. Technology today is abstracted away to point where anyone can use it but no one can understand it. If you want to know what’s actually going on under the hood and be ‘one’ with your website then Jekyll is for you.