By using this site, you agree to the Privacy Policy and Terms of Use.
Accept
World of SoftwareWorld of SoftwareWorld of Software
  • News
  • Software
  • Mobile
  • Computing
  • Gaming
  • Videos
  • More
    • Gadget
    • Web Stories
    • Trending
    • Press Release
Search
  • Privacy
  • Terms
  • Advertise
  • Contact
Copyright © All Rights Reserved. World of Software.
Reading: I Migrated My Blog From Jekyll to Hugo – Or At Least, I Almost Did | HackerNoon
Share
Sign In
Notification Show More
Font ResizerAa
World of SoftwareWorld of Software
Font ResizerAa
  • Software
  • Mobile
  • Computing
  • Gadget
  • Gaming
  • Videos
Search
  • News
  • Software
  • Mobile
  • Computing
  • Gaming
  • Videos
  • More
    • Gadget
    • Web Stories
    • Trending
    • Press Release
Have an existing account? Sign In
Follow US
  • Privacy
  • Terms
  • Advertise
  • Contact
Copyright © All Rights Reserved. World of Software.
World of Software > Computing > I Migrated My Blog From Jekyll to Hugo – Or At Least, I Almost Did | HackerNoon
Computing

I Migrated My Blog From Jekyll to Hugo – Or At Least, I Almost Did | HackerNoon

News Room
Last updated: 2026/02/19 at 8:56 PM
News Room Published 19 February 2026
Share
I Migrated My Blog From Jekyll to Hugo – Or At Least, I Almost Did | HackerNoon
SHARE

Most of my blog posts are lessons learned. I’m trying to achieve something, and I document the process I used to do it. This one is one of the few where, in the end, I didn’t achieve what I wanted. In this post, I aim to explain what I learned from trying to migrate from Jekyll to Hugo, and why, in the end, I didn’t take the final step.

Context

I started this blog on WordPress. After several years, I decided to migrate to Jekyll. I have been happy with Jekyll so far. It’s based on Ruby, and though I’m no Ruby developer, I was able to create a few plugins.

I’m hosting the codebase on GitLab, with GitLab CI, and I have configured Renovate to create a PR when a Gem is outdated. This way, I pay technical debt every time, and I don’t accrue it over the years. Last week, I got a PR to update the parent Ruby Docker image from 3.4 to 4.0.

I checked if Jekyll was ready for Ruby 4. It isn’t, though there’s an open issue. However, it’s not only Jekyll: the Gemfile uses gems whose versions aren’t compatible with Ruby 4.

Worse, I checked the general health of the Jekyll project. The last commits were some weeks ago from the Continuous Integration bot. I thought perhaps it was time to look for an alternative.

Hugo

Just like Jekyll, Hugo is a static site generator.

Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again.

Contrary to Jekyll, Hugo builds upon Go. It touts itself as “amazingly fast”. Icing on the cake, the codebase sees much more activity than Jekyll. Though I’m not a Go fan, I decided Hugo was a good migration target.

Jekyll to Hugo

Migrating from Jekyll to Hugo follows the Pareto Law.

Migrating Content

Hugo provides the following main folders:

  • content for content that needs to be processed
  • static for resources that are copied as is
  • layouts for templates
  • data for datasources

Check the full list for exhaustivity.

Jekyll distinguishes between posts and pages. The former have a date, the latter don’t. Thus, posts are the foundation of a blog. Pages are stable and structure the site. Hugo doesn’t make this distinction.

Jekyll folders structure maps as:

| Jekyll | Hugo |
|—-|—-|
| _posts | content/posts |
| _pages/<foo.md> | content/posts/<foo.md> |
| _data | data |
| _layouts | layouts |
| assets | static |

When Mapping Isn’t Enough

Jekyll offers plugins. Plugins come in several categories:

  • Generators – Create additional content on your site
  • Converters – Change a markup language into another format
  • Commands – Extend the jekyll executable with subcommands
  • Tags – Create custom Liquid tags
  • Filters – Create custom Liquid filters
  • Hooks – Fine-grained control to extend the build process

On Jekyll, I use generators, tags, filters, and hooks. Some I use through existing gems, such as the Twitter plugin; others are custom-developed for my own needs.

Jekyll tags translate to shortcodes in Hugo:

A shortcode is a template invoked within markup, accepting any number of arguments. They can be used with any content format to insert elements such as videos, images, and social media embeds into your content.

There are three types of shortcodes: embedded, custom, and inline.

Hugo offers quite a collection of shortcodes out-of-the-box, but you can roll out your own.

Unfortunately, generators don’t have any equivalent in Hugo. I have developed generators to create newsletters and talk pages. The generator plugin automatically generates a page per year according to my data. In Hugo, I had to manually create one page per year.

Migrating the GitLab Build

The Jekyll build consists of three steps:

  1. Detects if any of Gemfile.lock, Dockerfile, or .gitlab-ci.yml has changed, and builds the Docker image if it’s the case
  2. Uses the Docker image to actually build the site
  3. Deploy the site to GitLab Pages

The main change obviously happens in the Dockerfile. Here’s the new Hugo version for reference: n

FROM docker.io/hugomods/hugo:exts

ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk
ENV PATH=$JAVA_HOME/bin:$PATH

WORKDIR /builds/nfrankel/nfrankel.gitlab.io

RUN apk add --no-cache openjdk21-jre graphviz                                       #1
 && gem install --no-document asciidoctor-diagram asciidoctor-diagram-plantuml rouge #2
  1. Packages for PlantUML
  2. Gems for Asciidoctor diagrams and syntax highlighting

At this point, I should have smelled something fishy, but it worked, so I continued.

The Deal Breaker

I migrated with the help of Claude Code and Copilot CLI. It took me a few sessions, spread over a week, mostly during the evenings and on the weekend. During migration, I regularly requested one-to-one comparisons to avoid regressions. My idea was to build the Jekyll and Hugo sites side-by-side, deploy them both on GitLab Pages, and compare both deployed versions for final gaps.

I updated the build to do that, and I triggered a build: the Jekyll build took a bit more than two minutes, while the Hugo build took more than ten! I couldn’t believe it, so I triggered the build again. Results were consistent.

I analyzed the logs to better understand the issue. Besides a couple of warnings, I saw nothing explaining where the slowness came from. n

                  │  EN  
──────────────────┼──────
 Pages            │ 2838 
 Paginator pages  │  253 
 Non-page files   │    5 
 Static files     │ 2817 
 Processed images │    0 
 Aliases          │  105 
 Cleaned          │    0 
Total in 562962 ms

When I asked Claude Code, it pointed out my usage of Asciidoc in my posts. While Hugo perfectly supports Asciidoc (and other formats), it delegates formats other than Markdown to an external engine. For Asciidoc, it’s asciidoctor. It turns out that this approach works well for a couple of Asciidoc documents, not so much for more than 800. I searched and quickly found that I wasn’t the first one to hit this wall: this thread spans five years.

Saying I was disappointed is an understatement. I left the work on a branch. I’ll probably delete it in the future, once I’ve cooled down.

Conclusion

Before working on the migration, I did my due diligence and asserted the technical feasibility of the work. I did that by reading the documentation and chatting with an LLM. Yet, I wasted time doing the work before rolling back. I’m moderately angry toward the Hugo documentation for not clearly mentioning the behavior and the performance hit in bold red letters. Still, it’s a good lesson to remember to check for such issues before spending that much time, even on personal projects.

Go further:

  • Hugo shortcodes
  • Hugo functions

Originally published at A Java Geek on February 15th, 2026

Sign Up For Daily Newsletter

Be keep up! Get the latest breaking news delivered straight to your inbox.
By signing up, you agree to our Terms of Use and acknowledge the data practices in our Privacy Policy. You may unsubscribe at any time.
Share This Article
Facebook Twitter Email Print
Share
What do you think?
Love0
Sad0
Happy0
Sleepy0
Angry0
Dead0
Wink0
Previous Article Biometrics and digital identity in Africa Biometrics and digital identity in Africa
Next Article Google Maps looks different for some users in big change Google Maps looks different for some users in big change
Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Stay Connected

248.1k Like
69.1k Follow
134k Pin
54.3k Follow

Latest News

AI Agents Are Great at One Thing at a Time. Life Isn’t Built That Way. | HackerNoon
AI Agents Are Great at One Thing at a Time. Life Isn’t Built That Way. | HackerNoon
Computing
Whoa: Nvidia’s DLSS 5 Can Make PC Games Look Real
Whoa: Nvidia’s DLSS 5 Can Make PC Games Look Real
News
Sonos finally returns to hardware with Jennifer Tuohy on Smart Home Insider
Sonos finally returns to hardware with Jennifer Tuohy on Smart Home Insider
News
Konni Deploys EndRAT Through Phishing, Uses KakaoTalk to Propagate Malware
Konni Deploys EndRAT Through Phishing, Uses KakaoTalk to Propagate Malware
Computing

You Might also Like

AI Agents Are Great at One Thing at a Time. Life Isn’t Built That Way. | HackerNoon
Computing

AI Agents Are Great at One Thing at a Time. Life Isn’t Built That Way. | HackerNoon

5 Min Read
Konni Deploys EndRAT Through Phishing, Uses KakaoTalk to Propagate Malware
Computing

Konni Deploys EndRAT Through Phishing, Uses KakaoTalk to Propagate Malware

4 Min Read
Amazon rolls out 1-hour and 3-hour options in latest offering of ever-faster deliveries
Computing

Amazon rolls out 1-hour and 3-hour options in latest offering of ever-faster deliveries

3 Min Read
ARM NEON Accelerated CRC64 Optimization Shows Nearly 6x Improvement
Computing

ARM NEON Accelerated CRC64 Optimization Shows Nearly 6x Improvement

2 Min Read
//

World of Software is your one-stop website for the latest tech news and updates, follow us now to get the news that matters to you.

Quick Link

  • Privacy Policy
  • Terms of use
  • Advertise
  • Contact

Topics

  • Computing
  • Software
  • Press Release
  • Trending

Sign Up for Our Newsletter

Subscribe to our newsletter to get our newest articles instantly!

World of SoftwareWorld of Software
Follow US
Copyright © All Rights Reserved. World of Software.
Welcome Back!

Sign in to your account

Lost your password?