This is the multi-page printable view of this section. .
Oink Release Notes
- 1: Oink 0.2.0 — Richer content and sharper presentation
- 2: Oink 0.1.0 — A stable local-first foundation
1 - Oink 0.2.0 — Richer content and sharper presentation
Release date: 2026-08-10 · Theme tag: v0.2.0 · Repository: 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.
Release highlights
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 for the complete data shape.
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
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 for the new steps contract and Oink components for the broader component model.
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.ymland 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
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:
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
- Replace every
default_featured_imagesetting withdefault_featured. - Update the Hugo Module and tidy the module graph.
- Build the site and inspect representative homepage, blog, documentation, mobile, and color-mode pages.
No Markdown content rewrite is required. Existing homepage sections, logo-only branding, shortcodes, and ordinary Docsy-compatible pages continue to work.
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
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
See the complete source diff from v0.1.0 to v0.2.0.
2 - 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.