Skip to main content

From Gatsby to Hugo: Why I Finally Let Go

Avinash Rijal
3 min read

After years of relying on Gatsby for my personal site, mounting maintenance issues and a slowing ecosystem pushed me to move on. This is my journey migrating to Hugo, why I chose it, and what I gained by embracing a faster, simpler stack.

hugo-over-gatsby

Pretext

Around 5–6 years ago, I stumbled upon GatsbyJS while searching for a JavaScript framework that could actually handle everything my personal blog needed:

  • Markdown content
  • Image optimization
  • Static site generation

At the time, Gatsby felt like a silver bullet.

My prior experience with GraphQL fit perfectly into Gatsby’s mental model, and to this day I’ll argue that Gatsby’s image tooling was — and still is — top-tier. Back then, it solved problems most frameworks barely acknowledged.


The Downfall

Then came 2025 — and things started feeling… off.

I can’t pinpoint the exact moment Gatsby began declining, but it felt like watching a project slowly lose momentum. Not abandoned outright — just increasingly neglected.

Issues started piling up:

  • Plugins breaking with the latest Node LTS
  • “Official” plugins not working out of the box
  • Long-standing issues sitting unanswered
  • A plugin ecosystem that felt stale and under-maintained

Individually, these were manageable. Collectively, they were exhausting.

Maintaining my portfolio started feeling like babysitting a framework instead of building with it — and that’s when I knew it was time to move on.


Migration

In December 2025, I finally opened my portfolio repository again.

I’ll be honest — I’m terrible at maintaining my own portfolio. Work keeps me busy, and it’s always the last thing on my priority list. Still, I had one hard rule:
if I’m going to touch it, I’m migrating it before the end of 2025.

While researching alternatives, I noticed Netlify spinning off its blogging solution into Decap CMS (formerly Netlify CMS). Around the same time, my Gatsby app started throwing deprecation warnings like confetti.

That combination was enough of a red flag.

After some digging, comparisons, and gut checks, I landed on Hugo.


Enter Hugo

Hugo brands itself as “the world’s fastest framework for building websites” — and for once, that marketing claim actually holds up.

  • Builds complete in milliseconds
  • Deployments finish in seconds

Coming from Gatsby, the speed difference was almost comical.

I already had some familiarity with Go, and while Hugo doesn’t feel like writing Go directly, the underlying philosophy is close enough to feel intuitive. After spending some time migrating content, layouts, and workflows, everything clicked — and honestly, it felt refreshing.

That said, Hugo is not perfect.

The one thing I genuinely dislike is its templating language: gotmpl.

I couldn’t find a clean way to get proper Tree-sitter support working in Neovim. Syntax highlighting is rough at best — it’s either treated as raw HTML or generic templates, neither of which feels right. Compared to JSX or even Vue templates, this part of Hugo absolutely shows its age.

Still, I’ll take bad syntax highlighting over slow builds any day.


What’s Next

For now, I’m sticking with Hugo. It’s fast, reliable, boring in the right ways — and that’s exactly what I want for a personal site.

Current Stack

  • Styling fully migrated from styled-components to Tailwind CSS

  • Entire site built with Hugo

    • I initially considered extracting everything into a reusable Hugo theme
    • Dropped the idea — tight coupling is fine for now, and over-engineering helps no one
  • Blogging workflow:

    • Write posts in Obsidian

    • Publish via Decap CMS admin panel. This is what it looks like on the backend:

      decap-backend

  • Hosting on Netlify

    • Authentication handled by Netlify itself

The end result is a setup that’s:

  • Faster
  • Simpler
  • Easier to maintain
  • Less mentally taxing

And honestly? That’s the biggest win.

Related Posts

Hello to the new guitar

Hello to the new guitar

So, I brought my guitar today. It is Enya EA-X1 Pro. The guitar is 41’’ variant. There is solid spruce top which is dried for 10 years. Side is made up of Rosewood, Neck from Mahogany, …

1 min

Hello World

This is my first post on my new fake blog! How exciting! I’m sure I’ll write a lot more interesting things in the future. Oh, and here’s a great quote from this Wikipedia on salted …

1 min
I should have known about fnm before

I should have known about fnm before

Okay, I have just woken up and had my food. I opened my computer and as usual; started terminal. I just setup my arch hyprland yesterday night and trimmed everything down to only things that I need. …

4 min