HugoBlogDocumentationCorporate Website

taiga — Hugo Blog Template

By justskiv

taiga is a minimal Hugo theme for teaching-oriented sites, organizing content with rubrics, course series, and interactive components embedded in the body text, without relying on Node or external CDNs.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-02View source

What stands out

A quick read of the recorded project description.

01

Interactive components exist as content: a widgets/<id>/ folder next to a guide is automatically discovered, built, and loaded only on that page; the body mounts it with {{< widget >}}, and figure.html provides a no-JS view

02

Charts and bar charts are generated from data: {{< bars >}} wraps a table to draw bars, {{< chart >}} uses a table or YAML to draw a line chart with a readout panel, and > [!stats] generates a row of large numbers

03

Internal links are validated by a render hook, which can be set to error or warn, so broken links can fail the build

04

Open Graph covers are generated at build time with images.Text, with cover styles provided as folders under assets/og/<style>/, without an external service

05

Pagefind builds a full-text index of the build output; ⌘K searches the body text in the theme's own modal, with stemming and excerpts

06

Series are a first-class mechanism: a folder under a rubric generates a series landing page, a series panel, a “N of M” indicator, and a footer link scaled by reading time

Template Details

taiga is a Hugo theme developed by justskiv, positioned for teaching platform sites: content is organized in three layers—rubric → course series → guide—and live JavaScript components can be embedded in the body of a guide. The demo site is built entirely with taiga, and each guide explains taiga's own mechanisms.

In terms of build, the theme requires only two executables: hugo and pagefind. It does not use Node, npm, a CDN, or tracking scripts. JavaScript is bundled by Hugo's built-in esbuild, styles are pure CSS, fonts are self-hosted woff2, and search uses a static index.

Features: interactive components exist as content. Placing widgets/<id>/{widget.js, widget.css} next to a guide's index.md makes them automatically discovered, built, and loaded only on that page; the body mounts them with {{< widget >}}, and widgets/<id>/figure.html provides a no-JS view. The Taiga.widget runtime isolates the failure of an individual component. Charts and bar charts are generated from data rather than HTML: {{< bars >}} wraps a table to draw bars, {{< chart >}} works with a table or YAML to draw a line chart with a Grafana-style readout panel, and > [!stats] generates a row of large numbers. Internal links are validated by a render hook, configurable as error or warn. Open Graph covers are drawn at build time with images.Text, with cover styles provided as folders under assets/og/<style>/. Pagefind builds a full-text index of the build output; ⌘K searches the body text in the theme's own modal and provides stemming and excerpts. Series are a first-class mechanism: a folder under a rubric generates a series landing page, a series panel, a “N of M” indicator, and a footer link scaled by reading time. Code highlighting is done at build time by Chroma, with colors aligned to the theme palette and support for hl_lines. Each of the seven palettes is a data/themes/<id>.toml file; adding one file to a site adds a palette that appears in the CSS and the theme selector, with dark, gray, and light built in. Interface strings, dates, and JS strings are provided in English and Russian; after configuring a second language for the site, a language switcher appears automatically, and adding a third language requires only content, configuration, and an i18n file.

Limitations and status: the README explicitly marks v0.0.1 as beta and unstable; parameters, template names, and CSS tokens may be renamed without a deprecation path, hugo mod get -u may break a site at any commit, and the author does not recommend building a site on it now. It requires Hugo ≥ 0.146 and does not need the extended version; search requires Pagefind as a second build step. The fonts Inter and JetBrains Mono use the SIL Open Font License, separate from the theme code's MIT license.

HugoBlogDocumentationCorporate Website

Is it right for your project?

Use Cases

  • Building teaching-oriented sites with course series and rubric categories
  • Embedding interactive JavaScript components, bar charts, line charts, or stat rows in tutorial body text
  • Documentation sites that need build-time validation of internal links to avoid publishing broken links
  • Sites that want to avoid Node, npm, CDNs, or tracking scripts and complete build and search with only Hugo and Pagefind
  • Sites that need English and Russian interfaces and plan to extend to more languages through content, configuration, and i18n files

Suitable For

  • Learning platforms whose core content structure is guides and course series
  • Hugo users who accept the beta status, are willing to pin a commit, and take on the risk of later breaking changes
  • Developers who prefer pure CSS, self-hosted fonts, and a static search index without a Node toolchain
  • Tutorial authors who need to embed data-driven charts or interactive components in body text while keeping a no-JS fallback view

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Requires Hugo ≥ 0.146 and does not need the extended version; search requires installing Pagefind separately and running it as a second build step

  2. 2

    Three installation options: Hugo Module (recommended; after configuring module.imports, do not also set theme), Git submodule, or copying directly into themes/taiga and setting theme = "taiga"

  3. 3

    Run the repository's bundled demo: hugo server -s exampleSite --themesDir ../..

  4. 4

    Full build with search: hugo -s exampleSite --themesDir ../.. --gc --minify, then pagefind --site exampleSite/public

  5. 5

    The README marks v0.0.1 as beta and unstable; parameters, template names, and CSS tokens may be renamed without a deprecation path, so pinning a commit is recommended

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version under the MIT license in the public repository; the free scope is that version's code and does not mean external services or third-party assets are free.

Must comply with when using

  • You may use, modify, commercialize, and distribute that version's code for free.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the complete MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • The project is currently v0.0.1 beta, and the author explicitly states it is unstable and does not recommend building a site on it now; if used, pin a commit and accept the risk.
  • Parameters, template names, and CSS tokens may be renamed without a deprecation path, and upgrades may directly break existing site configuration and custom styles.
  • When installing via Hugo Module, running hugo mod get -u may break a site at any commit, so versions must be pinned.
  • Requires Hugo version 0.146 or higher; lower versions cannot be used. The extended build is not required.
  • Full-text search depends on the external tool Pagefind, which must be installed separately and run as a second build step; otherwise there is no search capability.
  • The built-in fonts Inter and JetBrains Mono use the SIL Open Font License, separate from the theme code's MIT license; using the fonts requires complying with the OFL terms.
  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur separate charges.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

v0.0.1 — beta. Unstable, and honestly so.

Original README

Params, template names and CSS tokens can still be renamed **without a > deprecation path**

Original README

a `hugo mod get -u` may break your site on any commit

Original README

**Hugo** | ≥ 0.146 (developed against v0.154.x).

Original README

**[Pagefind](https://pagefind.app/)** | For search. A second build step, and still no Node.

Original README

The bundled fonts (Inter, JetBrains Mono) are under the SIL Open Font License

Original README
https://github.com/justskiv/taiga/blob/main/LICENSEhttps://github.com/justskiv/taiga/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-02. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 88 / 100
Technologies
Hugo
Website type
Blog · Documentation · Corporate Website
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-10-02
Screenshot last checked
2026-10-02

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Hugo as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Automatically checked against source and license rules; no manual editorial review.

Inspect the recorded source material

SHA-256: 53ec357324d9df7a0224d25a325f6b630f593e4ed407eab3ab191d4200e929a2

2026-10-02T10:07:59.962Z

Source file / repository
<p align="center">
  <img src="images/banner.svg" alt="taiga" width="100%" />
</p>

<p align="center">
  A minimal Hugo theme for <b>learning platforms</b> — rubrics, course series,<br>
  and interactive widgets living inside the text.
</p>

<div align="center">

[![Hugo](https://img.shields.io/static/v1?label=Hugo&message=v0.146.0%2B&color=FF4088&logo=hugo&logoColor=white)](https://github.com/gohugoio/hugo/releases)
[![Status](https://img.shields.io/badge/status-beta-orange)](#status)
[![No Node](https://img.shields.io/badge/node-not_required-3c3b38)](#requirements)
[![Telegram](https://img.shields.io/badge/Telegram-@ntuzov-blue?logo=telegram&logoColor=white)](https://t.me/ntuzov)

**English** · [Русский](README.ru.md)

</div>

---

## Status

> [!WARNING]
> **v0.0.1 — beta. Unstable, and honestly so.**
>
> Params, template names and CSS tokens can still be renamed **without a
> deprecation path**, and a `hugo mod get -u` may break your site on any commit.
> I do not recommend building on it yet — if you do, pin a commit and accept the
> risk. A stable release is coming, and from that point breaking changes get a
> major bump and a migration note. Until then, treat every version as provisional.

## What it is

taiga is a theme for sites that **teach**: content is organised as rubrics →
course series → guides, and a guide can carry live JavaScript widgets in the
middle of its prose.

The demo is built on nothing but taiga, and every guide on it is about taiga — so
each mechanism runs on the very page that describes it. The page is its own proof.

**[Live demo →](https://justskiv.github.io/taiga/)**

<p align="center">
  <img src="images/screenshot.png" alt="taiga — the demo site" width="100%" />
</p>

## Two binaries and you're done

`hugo` and `pagefind`. No Node, no npm, no CDN, no trackers, no build pipeline to
babysit. Vanilla JS bundled by Hugo's built-in esbuild, plain CSS, self-hosted
woff2 fonts, a static search index. That constraint is not an accident — it is the
whole design, and every feature below is built to live inside it.

## Features

- **Interactive widgets as content.** Drop `widgets/<id>/{widget.js, widget.css}`
  next to a guide's `index.md` — one folder per widget, plus a `_shared/` folder
  for code more than one of them needs — and the bundle is found, built and
  loaded on that page only. One `{{< widget >}}` in the text mounts it,
  `widgets/<id>/figure.html` supplies the no-JS view, and the `Taiga.widget`
  runtime isolates failures so one broken widget never takes down its neighbours.
- **Charts and bars from data, not HTML.** A table between `{{< bars >}}` tags
  draws bars; a table or a YAML file behind `{{< chart >}}` draws a line chart
  with a Grafana-style reading panel (Observable Plot, loaded only where a chart
  is, only as it scrolls near); `> [!stats]` over a list is a row of big numbers.
  The Markdown stays readable anywhere, and every chart ships its data as a table.
- **A broken internal link fails the build.** A render hook checks every internal
  link against real pages (`linkcheck = "error" | "warn"`).
- **Open Graph covers with no external service.** `images.Text` draws a cover per
  guide at build time — backdrop, series kicker, title, minutes. Cover styles are
  *folders* (`assets/og/<style>/`); a site adds or overrides one without forking.
- **Full-text search without a server.** Pagefind indexes the built site; ⌘K finds
  terms *inside* articles, with stemming and a snippet, in the theme's own modal.
- **Series as a first-class mechanic.** A series is a folder inside its rubric —
  that alone gives you a series landing page, the series panel, "part N of M"
  kickers, and a bottom bridge scaled by reading time — all server-rendered from
  one source of truth.
- **Server-side syntax highlighting.** Go is highlighted at build time (Chroma,
  recoloured to the palette) with `hl_lines`. No client-side highlighter, no flash.
- **Palettes are data.** Each of the seven palettes is one `data/themes/<id>.toml`
  file; a site adds its own with a single file and it appears in the CSS and in the
  theme picker. Dark, grey and light ship in the box.
- **Bilingual, and the demo proves it.** English and Russian ship as UI strings,
  dates and JS strings; the language switcher appears by itself once a site has a
  second language. Adding a third is content + config + one i18n file — no template
  edits.

## Requirements

| | |
|---|---|
| **Hugo** | ≥ 0.146 (developed against v0.154.x). The `extended` build is **not** required — this is a plain-CSS theme. |
| **[Pagefind](https://pagefind.app/)** | For search. A second build step, and still no Node. |

## Install

Pick one.

**Hugo Module** (recommended). Add the import to your site config — with a module
import you do **not** also set `theme`:

```toml
[module]
  [[module.imports]]
    path = "github.com/justskiv/taiga"
```

Then `hugo mod get -u`.

**Git submodule.** Add it under `themes/`, then set `theme = "taiga"`:

```sh
git submodule add https://github.com/justskiv/taiga.git themes/taiga
```

**Copy.** Clone or download into `themes/taiga`, then set `theme = "taiga"`.

## Quick start

```sh
hugo new site mysite && cd mysite
# install the theme by one of the methods above, then:
hugo new content howto/get-started --kind guides
hugo server
```

To run the bundled demo from a clone of this repo:

```sh
hugo server -s exampleSite --themesDir ../..
```

For the full build, with search:

```sh
hugo -s exampleSite --themesDir ../.. --gc --minify
pagefind --site exampleSite/public
```

## Documentation

| | |
|---|---|
| [docs/params.md](docs/params.md) | Every parameter, with defaults. |
| [docs/authoring.md](docs/authoring.md) | Writing a guide: front matter, shortcodes, code, diagrams, widgets. |
| [docs/customizing.md](docs/customizing.md) | Restyling without a fork: params, `custom.css`, palettes, hooks, partials. |
| [docs/i18n.md](docs/i18n.md) | Adding a language. |

Russian mirrors live in [`docs/ru/`](docs/ru/). The commented
[`exampleSite/hugo.toml`](exampleSite/hugo.toml) is a second, copy-ready reference
config — every key in it is annotated.

## License

MIT — see [LICENSE](LICENSE). The bundled fonts (Inter, JetBrains Mono) are under
the SIL Open Font License; see the `.txt` files beside them in `assets/fonts/`.
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.