After years of running this blog on Jekyll, I finally made the switch to Hugo. Here’s why.
Why I Made the Switch
Static site generators have evolved a lot since Jekyll first popularized the idea of building blogs from Markdown. Jekyll served me well for a long time, but as my site grew and my workflow matured, a few pain points became impossible to ignore:
- Build times : As my site grew, Jekyll builds slowed to a crawl. Waiting 30+ seconds for a rebuild made local development feel sluggish.
- Ruby dependencies : Managing Ruby versions, gems, and Bundler across machines and CI environments was a recurring frustration.
- Theme flexibility : I wanted a more modern design system, better dark mode support, and a theme ecosystem that felt alive.
Hugo promised faster builds, a single binary with no external dependencies, and a more modern templating system. Once I started experimenting, the difference was immediate.
Why Hugo Is a Better Fit
Fast builds
Hugo compiles entire sites in milliseconds, and the dev server hot reload feels instant. That alone dramatically improves the writing and editing experience.
No dependency headaches
Hugo is just one binary. No Ruby, no Bundler, no gem conflicts, no version juggling. It works the same on every machine and every CI pipeline.
A more powerful templating system
Hugo’s Go-based templating is far more flexible than Liquid. It supports:
- Rich built-in functions
- Complex content structures
- Custom taxonomies
- Shortcodes
- Image processing
- Multilingual content
Many things that require plugins in Jekyll are built directly into Hugo.
A modern ecosystem
Hugo’s theme community is active, innovative, and built around modern tooling. This is where Blowfish really shines.
Choosing a Theme
I settled on the Blowfish theme for several reasons. Honestly, it is one of the best examples of what Hugo makes possible.
Clean, modern design
Blowfish looks great out of the box, with thoughtful typography, spacing, and layout options.
Dark mode support
Automatic dark and light mode, user-selectable themes, and customizable color palettes are all built in.
Feature-rich components
Blowfish includes components like:
- Callouts
- Cards
- Tabs
- Accordions
- Grids
- Footnotes
- Copy-to-clipboard code blocks
These let you build richer content without custom HTML.
Built-in image optimization
Thanks to Hugo’s image pipeline, Blowfish can automatically resize, crop, optimize, lazy-load, and serve responsive images. This is something Jekyll cannot match without external tooling.
Taxonomies and structure
Categories, tags, sections, menus, and breadcrumbs work cleanly and consistently.
Active development and documentation
Blowfish is well maintained, well documented, and constantly improving.
Tailwind CSS for customization
If you want to tweak the design, Tailwind makes it straightforward.
Jekyll vs. Hugo (with Blowfish): A Practical Comparison
| Feature / Area | Jekyll | Hugo (with Blowfish) |
|---|---|---|
| Build Speed | Slow on larger sites; rebuilds often 20-60 seconds | Extremely fast; rebuilds typically under 1 second |
| Dependencies | Requires Ruby, Bundler, gems, and version management | Single binary, no external dependencies |
| Templating System | Liquid (simple but limited) | Go templates (powerful, flexible, feature-rich) |
| Image Processing | Not built in; requires external tools or plugins | Native image pipeline: resize, crop, optimize, responsive images |
| Theme Ecosystem | Many themes, but many feel dated or unmaintained | Modern themes with active development; Blowfish is a standout |
| Dark Mode Support | Theme-dependent; often limited | Built-in automatic dark/light mode plus user theme switching |
| Content Components | Limited; requires plugins or custom HTML | Blowfish includes cards, callouts, tabs, accordions, grids, and more |
| Search | Requires external JS libraries or plugins | Blowfish includes fast, built-in client-side search |
| Multilingual Support | Plugin-based, inconsistent | First-class multilingual support built into Hugo |
| Taxonomies | Basic categories/tags | Flexible taxonomies, sections, menus, breadcrumbs |
| Asset Pipeline | Basic; often requires plugins | Built-in minification, fingerprinting, and processing |
| Customization | Varies by theme; often requires manual CSS | Blowfish uses Tailwind for easy, modern customization |
| Documentation | Good but plugin-heavy | Excellent docs; Blowfish has strong theme documentation |
| Local Development | Slower reloads; can feel laggy | Instant hot reload; smooth editing experience |
| CI/CD | Slower builds; Ruby setup required | Fast builds; no setup beyond Hugo binary |
| Learning Curve | Easy to start, harder to extend | Easy to start, powerful as you grow |
Results
After migrating, a few wins stood out:
- Build time : Dropped from 30+ seconds to under 1 second
- No dependencies : Just the Hugo binary, nothing else
- Better DX : Hot reload is nearly instant
- Modern design : Blowfish looks great on all devices
- More flexibility : Shortcodes, components, and image processing make content creation easier
Overall, the site feels faster, cleaner, and more maintainable.
What’s Next
In Part 2, I’ll cover the actual migration process:
- Converting posts
- Fixing front matter
- Replacing Jekyll shortcodes
- Handling images and static assets
- Structuring content for Hugo’s taxonomy system
If you’re considering making the switch yourself, the migration is easier than you might think.

Top comments (0)