# Oink 0.2.0 — Richer content and sharper presentation

> Oink 0.2.0 adds composable homepage sections, theme-aware media, wordmarks, navigable component boards, a steps shortcode, polished terminal recordings, and a clearer release-publishing experience.

---

LLMS index: [llms.txt](/llms.txt)

---

**Release date:** 2026-08-10 · **Theme tag:**
[v0.2.0](https://github.com/pgsty/oink/tree/v0.2.0) · **Repository:**
[pgsty/oink](https://github.com/pgsty/oink)

Oink 0.2.0 focuses on the parts readers and authors touch most: the homepage,
brand presentation, blog discovery, section indexes, and instructional content.
It also turns the Oink project site into a clearer bilingual reference for the
theme's current contracts.

The module path, minimum Hugo version, and Hugo-only consumer build remain
unchanged. The one configuration rename that can affect an existing site is
documented in [Breaking change](#breaking-change).

## Release highlights {#release-highlights}

### Homepage and brand {#homepage-and-brand}

The homepage now composes 12 built-in section types from an ordered `sections`
list. A string selects data with the same name; a map can reuse a presentation
through a different `key`, disable a block without deleting its data, or carry a
small one-off block inline. Sites without `sections` retain the 0.1.x homepage
order, so explicit composition is additive rather than a required migration.

The data-driven homepage can now place responsive artwork beside the Hero.
Authors may configure one shared image or separate Light and Dark sources, plus
meaningful alternative text when the artwork carries information. The layout
adapts from a two-column desktop Hero to a compact mobile presentation without
requiring a site-level template override.

Oink also adds `params.wordmark`. A configured wordmark is used consistently in
the landing navigation, documentation header, drawer, and footer; sites that
only configure `params.logo` keep the existing mark-plus-title presentation.

Component boards on the homepage can become real navigation. Items accept links,
optional external-link behavior, compact styling, and one to four columns.
Decorative boards remain non-interactive, preserving the 0.1.0 contract.

See [Homepage and footer](/docs/configure/overview/#homepage-and-footer) for the
complete data shape.

### Blog and release publishing {#blog-and-release-publishing}

Blog rows now treat images and summaries as one responsive layout. Featured
images no longer force the text outside tablet-width containers, summaries can
break long machine-generated tokens, and posts without images use the full text
width. The byline's section name is now a link, and RSS moves into the same
action rail used by the rest of the page.

Categories and tags use the same collapsible group grammar as the TOC and page
actions. Terms render as scan-friendly rows with count badges in both the wide
rail and the mobile drawer. Section indexes are quieter, descriptions have more
room, and last-modified metadata follows the child-page index instead of
interrupting the page introduction.

The Oink project site now separates upstream Docsy history, Oink engineering
articles, and versioned Oink release notes into distinct bilingual sections.
That makes release reports discoverable without presenting inherited Docsy posts
as Oink releases.

### Content components {#content-components}

0.2.0 adds a Markdown-first `steps` shortcode. Direct child headings become
automatically numbered steps connected by a guide line; moving, adding, or
removing a step updates the visible sequence without maintaining numbers by
hand. Authors can mark a supporting heading with `class="no-step-marker"` so it
does not consume a number.

Asciinema recordings gain a polished terminal frame, title bar, compact control
bar, color-mode-aware styling, and a font contract passed directly into the
player. This avoids the player falling back to a different terminal font while
keeping recordings responsive and readable in both themes.

ECharts callback blocks keep the established trusted-author model: callback code
is executable content that must be reviewed like inline HTML or another custom
integration. The renderer no longer emits a redundant warning for every reviewed
callback block.

See [Shortcodes](/docs/components/layout/#steps) for the new steps contract and
[Oink components](/docs/components/) for the broader component model.

### Documentation and tests {#documentation-and-tests}

The independent project site receives a matching documentation pass:

- Expands English and Chinese homepage and component examples.
- Documents all 12 composable homepage sections and uses the relevant ones on
  the project landing page.
- Adds a real Asciinema installation recording and a dedicated giscus guide.
- Moves examples under the documentation tree and removes obsolete community and
  maintainer-only pages.
- Consolidates Hugo configuration into the root `hugo.yml` and retires the old
  Netlify-specific tooling.
- Isolates browser tests from live reload and keeps responsive, accessibility,
  translation, rendered-Markdown, and link checks in the release gate.

These are project-site changes, not new runtime dependencies for theme
consumers.

## Breaking change {#breaking-change}

0.2.0 renames the inherited featured-image setting from `default_featured_image`
to `default_featured`. Update page, section cascade, and site-level
configuration where the old key appears:

```yaml
# Oink 0.1.x
default_featured_image: /images/blog-card.webp

# Oink 0.2.0
default_featured: /images/blog-card.webp
```

The implicit theme placeholder is also removed. If no post image, matching page
resource, or explicit `default_featured` exists, Oink now renders a clean
text-only list entry. Set `default_featured` to a site-owned image when a whole
section should keep a visual identity; set it to `false` to make the opt-out
explicit.

There is no compatibility alias for the old key. This is the only required
configuration migration in 0.2.0.

## Upgrade to 0.2.0 {#upgrade}

1. Replace every `default_featured_image` setting with `default_featured`.
2. Update the Hugo Module and tidy the module graph.
3. Build the site and inspect representative homepage, blog, documentation,
   mobile, and color-mode pages.

```sh
hugo mod get github.com/pgsty/oink@v0.2.0
hugo mod tidy
hugo --gc --minify
```

No Markdown content rewrite is required. Existing homepage sections, logo-only
branding, shortcodes, and ordinary Docsy-compatible pages continue to work.

## Compatibility {#compatibility}

| Contract                         | Oink 0.2.0                           |
| -------------------------------- | ------------------------------------ |
| Hugo                             | Extended 0.160.1 or newer; unchanged |
| Module path                      | `github.com/pgsty/oink`; unchanged   |
| Consumer frontend toolchain      | None; unchanged                      |
| Required content migration       | None                                 |
| Required configuration migration | Rename `default_featured_image`      |

## Verification {#verification}

The 0.2.0 candidate is exercised through the sibling Oink project site so the
site builds against the candidate theme rather than only its last pinned
release. The release gate covers formatting, bilingual page pairs and stable
heading IDs, rendered Markdown and internal links, Hugo Module fixtures,
responsive browser behavior, and axe accessibility checks.

## Full change set {#full-change-set}

See the complete source diff from
[v0.1.0 to v0.2.0](https://github.com/pgsty/oink/compare/v0.1.0...v0.2.0).
