Comparison of static site generators

Hugo has some math rendering issue from its Markdown parser. I moved my blog from Hugo to Hexo since Latex math rendering is of high priority.

The Goldmark parser would treat the underscore _ and the backslash \ as Markdown syntax and disrupt math rendering by MathJax[1] or KaTeX[2]. The original parser in Hexo, hexo-renderer-marked, also has similar issues, but it could be replaced with other ones [3][4] with serve-side math rendering[5][6] that works perfectly with math blocks with good cleint-side performance.

Comparision of both static site generators

Features Hugo Hexo Docsify
Written in Go Javascript Javascript (Vue.js)
Clean and elegant theme ✔️ ✔️ ✔️
Fast page generation for live preview Super fast Fast but not live Generates HTML on the fly
Dependency Standalone NPM[7] ecosystem Insert javascript in index.html
Rich plugin system Not many NPM[7:1] ecosystem ✔️ [8]
Overriding default settings ✔️ [9] ✔️ [10] ✔️ (in index.html)
Tags and categories Orthogonal Hierarchical
Documentation pages ✔️ ✔️ ✔️
Asset management ✔️ ⚠️ [11] ✔️
Code highlighting ✔️ ✔️ ✔️
LaTeX math rendering ⚠️ [^mathissue] ✔️ ✔️
In-site search box ✔️ ✔️ ✔️
Inline rendering of videos, docs, … ✔️ (shortcodes) ✔️ (tag plugins) ✔️ (HTML tag + include link)

Other static site generators on my radar

  • Jekyll, the default GitHub pages SSG. The performance for generating a lot of posts is to be desired.
  • Nikola, a SSG with first-class support of *.md[12], *.rst[13] and *.ipynb`[14] files.
  • JupyterBook, building beautiful, publication-quality books and documents from computational material with executable code blocks. It supports (extended) *.md[12:1], *.rst[13:1] and *.ipynb[14:1] and is built on Sphinx[15].
  • fastpages, an easy to use blogging platform Built on Jekyll and GitHub actions, with enhanced support for Jupyter Notebooks (but you still eed escaping sequence for LaTeX math).

See also

My template sites, fell free to use them.

Reference


  1. MathJax, a widely-used JS LaTeX math rendering library ↩︎

  2. KaTeX, a faster JS LaTeX math rendering library but with more limited syntax. ↩︎

  3. hexo-renderer-pandoc https://github.com/wzpan/hexo-renderer-pandoc ↩︎

  4. hexo-renderer-markdown-it https://github.com/hexojs/hexo-renderer-markdown-it ↩︎

  5. hexo-filter-mathjax https://github.com/next-theme/hexo-filter-mathjax ↩︎

  6. markdown-it-latex2img https://github.com/MakerGYT/markdown-it-latex2img ↩︎

  7. Node package manager (NPM) https://www.npmjs.com ↩︎ ↩︎

  8. Awesome docsify https://docsify.js.org/#/awesome ↩︎

  9. In Hugo, you are able to override the default layout / settings by placing a counterpart file in your site without messing with the theme folder, which is Much more friendly for Git submodules and theme updates. While in Hexo, you may need to edit the settings inside the themes folder, causing conflicts when the theme updates. ↩︎

  10. Hexo 5.0 release notes https://hexo.io/news/2020/07/29/hexo-5-released/ ↩︎

  11. Hexo asset Folders ↩︎

  12. Markdown ↩︎ ↩︎

  13. ReStructuredText ↩︎ ↩︎

  14. Jupyter Notebooks ↩︎ ↩︎

  15. Sphinx Python doc generator https://www.sphinx-doc.org/en/master/ ↩︎