Obiz Solutions

What is Hugo?

Hugo is a static site generator written in Go that outputs plain HTML/CSS — no Node.js or npm required to run it, just a single compiled binary. Its standout feature is build speed: a site with several thousand pages typically builds in seconds, since Hugo is a precompiled Go program rather than running through a JS runtime like most other SSGs (Astro, Next.js, Gatsby…).

Content-first, no components

Unlike Astro (which uses an Islands Architecture and can embed React/Vue components), Hugo is purely templates + content: you write posts in Markdown, and Hugo renders them through Go templates (syntax like {{ .Title }}, {{ range .Pages }}…) into HTML. There’s no notion of a “component” or a built-in JS framework — if you want interactivity, you add your own script; Hugo doesn’t manage that layer.

Directory structure

content/          # Markdown posts, each subfolder is a "section"
  posts/my-post.md
layouts/           # Go templates that decide how each content type renders
  posts/single.html
  _default/list.html
static/            # assets copied as-is into the output
themes/            # drop-in themes, individual parts can be overridden
config.toml        # site config (or .yaml/.json)

Hugo wires content/ to layouts/ by file/section naming convention — a post under content/posts/ automatically uses layouts/posts/single.html if it exists, no manual route declaration needed.

Shortcodes

Since plain Markdown can’t embed logic, Hugo has shortcodes — syntax like {{< youtube abc123 >}} dropped into a Markdown post to render complex content (a video, a gallery…) without hand-writing HTML inside the .md file.

Taxonomies (tags/categories) built in

Hugo supports taxonomies in core — declaring tags: ["aws"] in frontmatter automatically gets you a tag listing page, without having to build that logic yourself like you would with many other SSGs.

When to reach for Hugo

  • A mostly-Markdown content site with no need for interactive components
  • A very large site (thousands of pages or more) where build speed is the top priority
  • Wanting a lightweight single binary with no dependency on the Node.js ecosystem

It’s a poor fit if you need to embed React/Vue/Svelte components directly into pages (that’s where Astro is far more flexible), or if the team is more comfortable with JS/TypeScript than Go template syntax.

Further reading

Official docs: gohugo.io/documentation