A simple static website generator

Serum v1.1.0 Released

Saturday, 18 May 2019 Tags: newsrelease

I am happy to announce the release of Serum v1.1.0! This update contains lots of enhancements and bug fixes since the last release.

And… 🥁 most of all… 🥁🥁 you need to know that… 🥁🥁🥁

Serum themes are finally here!

Support for themes has been the most wanted feature since the beginning of this project. However, I could not afford to implement it back then because the project was in early, early, and early development stage and the quality of the overall code base was not so good that implementing themes anyway could make the project nearly unmaintainable.

But, yes, themes are finally here. Anyone who updated Serum to v1.1.0 can try themes right away.

For now, there is only one theme released: Essence, which makes your website look like the official Serum website. I hope great volunteers around the world provide themes for Serum in the future, but in the meantime I will also try to release some more themes when I have some more free time.

Oh, I almost forgot to tell you to check the getting started guide once again. You will be able to learn how to install and apply Serum themes to your project.

Here’s the changelog since Serum v1.0.0. Thank you!


  • The development server now quits gracefully when the user sends EOF (Ctrl+D) (Issue #45)


  • Serum now supports themes! Please visit the official website to learn more about Serum themes.

  • Installer: Added Mix task, which helps you create a new Serum theme project.

  • The following optional callbacks were added for plugins.

    • processed_pages/1
    • processed_posts/1
    • rendering_fragment/2
  • Added Serum.HtmlTreeHelper module, which provides traverse/2 and traverse/3 function. You will find this module useful when you need to manipulate HTML trees from your plugins.


  • The behavior of the Table of Contents plugin has slightly changed.

    • This plugin no longer prepends a <a name="..."> tag to each heading tag. Instead, it will use the id attribute of each one of them. If a tag does not have an id, it will be set appropriately by the plugin.

    • The TOC element (ul.serum-toc) will also be given an ID (#toc), so that you can make hyperlinks back to the list.

  • Serum now automatically generates an id attribute for each HTML heading tag. (by @igalic, Issue #44)

    • If a heading tag already has an ID, it won’t be modified.
    • Each ID is generated based on the tag’s text content.
    • Generated IDs are always unique. If a duplicate ID is to be generated, a number will be appended.