Oink 0.1.0 — A stable local-first foundation
Release date: 2026-08-10 · Theme tag: v0.1.0 · Repository: 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
Local-first theme 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
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
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
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
contentinfolandmark 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
Update the Hugo Module and rebuild the site:
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
| 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
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
See the v0.1.0 source snapshot.