Back to templates

Template details

austere

A minimal Hugo theme for writers: serif type, inlined CSS, light and dark palettes, responsive images, and no web fonts or CDN.

About this template

austere is a minimal Hugo theme by Tom Wright (tomwrw) for people who mostly write, built around serif typography, a light and dark palette, and pages that load no stylesheet file, no web font, and nothing from a CDN.

What is austere?

austere is a Hugo theme — a port of the author's austere theme for Zola — that renders a writing-focused site with serif type, a light and dark palette, and inlined CSS. It takes ordinary Hugo content (Markdown files in content/posts/ or any other section, plus optional TOML parameters in hugo.toml) and outputs a site where a post is one request: the CSS is inlined and the icons are inline SVG. It requires Hugo 0.146 or newer, and the extended edition is needed only if WebP is kept as the image format. The design descends from Zap by jimmyff, though this Hugo version is a separate repository.

What makes austere stand out?

  • No external requests — no stylesheet, web font, or CDN asset is fetched on page load; CSS is inlined and icons ship as inline SVG.
  • Responsive images built in — images kept beside a post in a page bundle are resized to each width in params.images.sizes (defaults 512, 1024, 2048) and served as a srcset, with a 1024px src fallback, quality 80, and output as webp, jpeg, png, or the original.
  • Click lightbox — the largest image opens in a lightbox on click; it is a mouse affordance only, so nothing is lost without it. SVG, GIF, files in static/, and images on other domains are left alone.
  • Three-state colour scheme — the toggle cycles system, light, and dark; the choice is kept in localStorage and applied before first paint to avoid a flash, and with nothing stored the page follows prefers-color-scheme and reacts to changes.
  • Palette as CSS custom properties — tokens include --bg, --text, --heading, --muted, --quote, --accent, --accent-hover, --code-bg, --border, plus --c-* for syntax highlighting. A site-level assets/css/custom.css is appended, so only overridden lines are needed.
  • No downloaded fonts — --font-serif requests Source Serif, then Charter, Sitka and Georgia, then Noto Serif and the serifs usually found on Linux, avoiding desktop aliasing of the generic serif.
  • Taxonomy-aware footers — every taxonomy a page uses is shown, so tags, categories, and anything else declared in the site's taxonomy config appear without the theme knowing their names.
  • Optional analytics — Umami through the theme's own parameters and Google Analytics through Hugo's services.googleAnalytics, both rendered only in production builds.

Who should use austere?

  • Bloggers and essayists: publish text-first posts with justified body copy, dated or dateless headers, and no build-time styling work.
  • Hugo users who want a tiny footprint: ship a site that makes one request per post and pulls nothing from third parties.
  • Zola users moving to Hugo: keep a familiar look, since austere began as the author's Zola theme.
  • Developers who customize templates: override any file by placing it at the same path in the site's layouts/ directory, including baseof.html, home.html, page.html, section.html, taxonomy.html, term.html, and the _partials/ and _markup/ hooks.

What can you do with austere?

  • Personal blogs: write posts in content/posts/ or any custom section such as content/writing/ and get matching list pages, since sections are not hard-coded.
  • Photo-illustrated writing: drop images into a page bundle and reference them normally to get a responsive srcset automatically.
  • Themed readers: swap the accent and background colours for light and dark modes with a few lines in custom.css, or pull alternative Chroma colours with hugo gen chromastyles.
  • Newsletter or notes sites: place undated pages above or below dated ones with undatedPosition, keeping dateless entries out of the year-one sort.

How does austere work?

Installation is two steps: add the theme as a git submodule at themes/austere, then set the theme name in hugo.toml. Every parameter — description, author, keywords, strapline, footer text, favicon, profile picture, site icon, image sizes, and analytics IDs — is optional, and the theme sets no requirements on markup, outputs, or taxonomies configuration. When cloning the site elsewhere, use git clone --recurse-submodules, and set submodules: recursive on actions/checkout in CI. An exampleSite/ directory is included as a working site to copy from.

FAQ

Is austere free?

Yes. austere is released under the MIT licence, with the full text in the repository's LICENSE file. There is no paid tier, account, or hosted service — you install it as a Hugo theme submodule in your own project.

Which Hugo version does austere require?

austere requires Hugo 0.146 or newer. The extended edition is only necessary if you keep WebP as the responsive image output format; the other supported formats (jpeg, png, or the original file) work without it.

Does austere support dark mode?

Yes. The toggle cycles system, light, and dark, stores the choice in localStorage, and applies it before first paint so there is no flash. With no stored preference the page follows the operating system setting and updates if the reader changes it.

Can I change the fonts and colours?

Colours are CSS custom properties in assets/css/main.css, and adding assets/css/custom.css to your own site appends overrides to the theme. Fonts are never downloaded; the serif stack falls back through Source Serif, Charter, Sitka, Georgia, and common Linux serifs.

How do I add analytics?

Umami is configured through the theme's own parameters, including a website ID, script source, and optional domains. Google Analytics uses Hugo's built-in services.googleAnalytics setting. Both only render in production builds, so local development stays clean.

screenshot of austere on template0.com