# Oink 0.1.0 — A stable local-first foundation

> The first stable Oink release turns the implementation preview into a polished Hugo module with a responsive shell, multilingual infrastructure, local-first components, and a stronger accessibility baseline.

---

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

---

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

Oink 0.1.0 is the first stable release of the Oink theme. It incorporates the
0.0.1 implementation preview and the stabilization work that followed: one
coherent documentation shell, a Hugo-only consumer build, local-first browser
assets, multilingual behavior derived from Hugo, and reusable content
components.

This release keeps the module path `github.com/pgsty/oink` and requires Hugo
Extended 0.160.1 or newer. A consuming site does not need Node.js, npm, PostCSS,
Autoprefixer, or a CDN to build and serve theme-owned functionality.

## Release highlights {#release-highlights}

### Local-first theme foundation {#local-first-foundation}

Oink ships the styles, fonts, icons, local search, diagrams, API documentation
runtimes, and content-component runtimes that it owns. Optional assets load only
on pages that use them, and the distributable repository is a root Hugo Module
rather than an embedded project site or frontend workspace.

The release also establishes the core product contracts:

- Hugo languages and translation objects drive language routes, switching,
  `hreflang`, writing direction, and locale metadata.
- The theme supports single-language, multilingual, and RTL sites without
  PGSTY-specific domain assumptions.
- Asciinema, ECharts, Infographic, diagrams, API references, tabs, cards, and
  other reusable components share local, page-scoped runtimes.
- GitHub Discussions comments are available through an opt-in giscus
  integration. No external comments script loads unless a site enables it.
- Docsy-compatible content organization, menus, taxonomies, print outputs, and
  extension hooks remain available.

### Responsive shell {#responsive-shell}

The documentation, blog, and API-reference layouts now use one responsive shell.
Desktop navigation, the resizable sidebar, the table of contents (TOC), page
actions, taxonomies, version selection, and the footer follow the same visual
and interaction grammar.

On tablets and phones, Oink moves the TOC, page actions, categories, and tags
into the navigation drawer instead of rendering a second copy. This preserves
unique IDs and keeps scroll tracking, disclosures, and copy actions working
across live viewport changes. Language and color controls remain reachable at
every width, and the color selector exposes Auto, Light, and Dark as explicit
preferences.

Navigation entries gain consistent icons, the mobile menu traps keyboard focus,
footer columns fill the available width, and the compact page-action menu no
longer duplicates the right rail. Copy Markdown, view Markdown, edit, issue, and
print actions now come from one implementation.

### Publishing and content {#publishing-and-content}

Syntax highlighting now uses class-based Chroma output with coordinated light
and dark palettes. Code remains readable before JavaScript initializes a color
mode, and sites can still opt out with `params.highlight_classes: false`.

Blog lists gain a deterministic featured-image resolver. In 0.1.0, it checks
front matter `images`, a matching page resource, inherited
`default_featured_image`, site parameters, and finally the theme placeholder.
The same resolver serves both modern blog rows and the compatible legacy
partial.

The new ink-mark logo and the placeholder artwork respond correctly to all four
system-theme and selected-theme combinations. Oink now declares the used
`color-scheme` in both directions, so an explicit site preference wins over the
operating-system preference.

### Accessibility and correctness {#accessibility-and-correctness}

0.1.0 fixes a set of issues found during desktop, mobile, print, and assistive
technology review:

- Corrects heading order, landmark names, task-list labels, and printable list
  semantics.
- Keeps blog rows inside the viewport at tablet widths and lets long URLs or
  identifiers wrap safely.
- Builds GitHub issue links with correctly encoded titles and URLs.
- Localizes the 404 page and removes hard-coded punctuation from translated
  accessible names.
- Gives iframe embeds titles and lazy loading, registers their resize helper
  once, and safely handles cross-origin frames.
- Emits one `contentinfo` landmark per page and keeps theme extension partials
  and opt-in SCSS entry points available to consumer sites.

The compatibility audit also removes genuinely unreachable legacy shell code
while restoring files that downstream sites can import directly. Reachability is
evaluated from consumer layouts and `_styles_project.scss`, not only from the
theme's own entry points.

## Upgrade to 0.1.0 {#upgrade}

Update the Hugo Module and rebuild the site:

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

No content migration is required. If a site imports Oink partials or SCSS
directly, build that site as part of the upgrade so its customization surface is
checked alongside the theme.

## Compatibility {#compatibility}

| Contract                     | Oink 0.1.0                                 |
| ---------------------------- | ------------------------------------------ |
| Hugo                         | Extended 0.160.1 or newer                  |
| Module path                  | `github.com/pgsty/oink`                    |
| Consumer frontend toolchain  | None                                       |
| Default browser dependencies | Local-first                                |
| Primary content model        | Docsy-compatible Markdown and front matter |

## Verification {#verification}

The final 0.1.0 candidate was swept against the theme fixture and the Oink
project site across seven viewport widths. The recorded run reported no console
errors, failed requests, horizontal overflow, or axe violations. Separate
fixtures cover minimum and current Hugo versions, LTR and RTL languages,
subpaths, print output, repeated component instances, and network-isolated
consumer builds.

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

See the [v0.1.0 source snapshot](https://github.com/pgsty/oink/tree/v0.1.0).
