Hugo vs Livemark

Updated May 16, 2026

Hugo is a general-purpose static site generator written in Go. It ships as a single binary, builds extremely quickly, and powers everything from blogs and portfolios to documentation sites via community themes like Docsy and Hugo Book.

At a glance

AxisLivemarkHugo
Language / runtimeTypeScript / Node 24+Go (single binary, no runtime)
UI frameworkReact 19Go templates (HTML + CSS)
Build toolVite + TanStack StartHugo binary
Content formatMarkdown + MDXMarkdown with Hugo shortcodes
LicenseMIT, self-hostedApache-2.0, self-hosted
Output modelPrerendered static (SSR-capable)Prerendered static

Architecture

Livemark is a Node CLI built on Vite + TanStack Start + React. Authoring follows JS/TS conventions.

Hugo is a single Go binary — no runtime dependencies, no package install step. The site structure is convention-based: content/, layouts/, static/, themes/, config.toml (or .yaml/.json). Layouts use Go's html/template syntax. Themes are git-submoduled or copied into themes/<name>/.

Hugo is not docs-specific. The same binary powers blogs, marketing sites, portfolios, and docs — the docs use case is supported through themes rather than first-class section types.

Content layout is unconstrained on the Livemark side: it scans by glob (include/exclude in livemark.config.ts), and each article's URL is set by a path: frontmatter field rather than its file location. There's no required docs/ folder — a project can pull articles from README.md, docs/, blog/, package READMEs, or anywhere else. Hugo reads from content/ with URL structure mirroring the directory tree (and per-section frontmatter overrides).

Content surface

Both tools accept Markdown with frontmatter.

The major asymmetry is component embedding: Livemark uses MDX (React components in .md/.mdx). Hugo uses shortcodes — Go-templated functions invoked from Markdown with {{< shortcode-name arg="value" >}}. Shortcodes are defined in layouts/shortcodes/*.html as Go template snippets and emit HTML directly.

Hugo supports Goldmark-based Markdown extensions (footnotes, tables, definition lists, math via plugins). For richer interactivity, the typical pattern is to embed a <script> or use a JS framework as an island inside a shortcode.

Frontmatter shape differs: Hugo accepts TOML, YAML, or JSON frontmatter with fields like title, date, draft, weight, taxonomies, plus user-defined fields. Livemark uses inline YAML with path, order, icon, sidebar, date, tags.

Feature matrix

CapabilityLivemarkHugo
VersioningNoNo (manual via branches/sites)
Internationalization (i18n)NoYes (built-in, multilingual mode)
SearchYes (Orama, client-side)No (theme-provided or external)
BlogYes (built-in section type)Yes (any section can be date-sorted)
ChangelogYes (section type)No (manual)
SitemapYesYes (built-in)
RSSYes (per blog section)Yes (built-in, per section)
ThemesComponent overrides via .livemark/Theme directories with template overrides
PluginsVite plugins + remark/rehypeHugo Modules (Go), shortcodes, hooks
Custom routes.livemark/routes/ (TanStack Router)Layouts + content sections
Standalone toolchainNode + npmSingle Go binary
Build speedVite-fastAmong the fastest SSGs

Output & deployment

Both tools produce static HTML + assets ready for any static host. Hugo emits to public/ by default; Livemark emits to .livemark/build/client/. The hosting story is the same — see Livemark's Deployment for host guides.

See also

Created with and Livemark