Oink 0.4.0 — Scenario components for complete publishing workflows
Release date: 2026-08-14 · Signed theme tag: v0.4.0 · Repository: pgsty/oink
Oink 0.4.0 delivers the complete Scenario Components system. The original design
separated Reading & Release, Landing, and Book work into 0.4, 0.5, and 0.6
milestones. The public release consolidates those tracks into one signed
v0.4.0 tag so consumers can adopt one coherent contract instead of a chain of
interdependent previews.
The release remains local-first: consumer sites still build with Hugo Extended and Go, without Node.js, a browser-time API, or a CDN. Interactive behavior is progressive enhancement; HTML, print, Markdown, and RSS output retain the content needed to understand each surface.
Release highlights
Reading and release
Documentation, Book, and blog pages now have a sequential pager derived from the
same flattened navigation tree readers see in the sidebar. Previous and next
links also appear as same-origin rel metadata in the document head. Explicit
navigation data, link-only entries, sidebar dividers, and blog time order keep
their own semantics instead of becoming accidental destinations.
Math can use Goldmark passthrough with the theme’s local KaTeX renderer. Sites
that cannot enable passthrough yet have a strict, parameter-free eq escape
hatch for display math. Numbered Book equations use the same shortcode only when
an explicit num is supplied.
Release pages can render local front-matter facts, release cards, checksums, and
asset lists without querying GitHub from the browser. A validated
data/download/<key>.yaml model feeds both the download shortcode and Landing
download sections, with separate rolling and pinned channels and an explicit
pending-release state.
See Sequential reading and mathematics and Releases and downloads for the complete contracts.
Landing pages
The data-driven homepage renderer is now a reusable layout: landing shell for
ordinary pages. A page may load inline data or language-aware records from
data/landing/<key>/, then compose 21 built-in sections including pricing,
comparison tables, command boxes, steps, timelines, code plates, case studies,
downloads, and bar charts.
All facts are local at build time. Optional reveal, count-up, copy, theme-image, and compact-menu behavior loads only when a Landing page needs it. Without JavaScript, the same page remains complete; marquees pause on focus or request, respect reduced motion, and hide duplicate tracks from assistive technology.
See Landing pages for data resolution, all 21 section types, local-fact rules, and the output matrix.
Book publishing
Long-form manuals can declare Book metadata on the existing documentation shell.
Chapters gain draft labels, active-page sidebar headings, and semantic fig,
tbl, numbered eq, and language-aware xref targets. Whole-Book figure lists
and tables of contents use those same registries.
An opt-in aggregate print document rewrites cross-chapter component links into document-local references and namespaces repeated heading IDs. The accompanying migration tool is dry-run first and idempotent, with reproducible TPME, DDIA, and pg-internal recipes, machine-readable reports, ambiguity skips, and a second-run zero-change check.
See Book publishing for the authoring and migration contract.
Keyboard and shell
The shell now supports single-key reading navigation. w and s move through
the sidebar, a and d fold or unfold groups, j and k move through the
page outline, and q and e follow the sequential pager. h toggles a session
reading mode; l, t, f, and c switch language, theme, search, and command
surfaces. Every binding yields to editable controls, composition, held
modifiers, and dialogs.
The navbar now spans documentation, blog, taxonomy, and Swagger layouts with one
compact state instead of a second mobile menu. Page actions move into the
breadcrumb row as a Copy Markdown split button. Footers support validated fat,
slim, and none styles, while readers can collapse the fat footer’s link grid
and retain that preference.
See Keyboard navigation and Navigation and menus.
Compatibility and behavior changes
- Hugo Extended 0.160.1 remains the minimum supported version.
- The module path remains
github.com/pgsty/oink; consumers still need no frontend toolchain. - Pagers default to the
docs,book, andblogcontent types. Set an explicit type list orpager: falsewhen a page should opt out. /now opens full search;\opens command-only mode. The>prefix still selects command mode inside the Palette.params.footer_icpandparams.footer_icp_urlare replaced by one inline Markdown value,params.footer_center_info. An explicit empty string hides the center region.params.ui.navbar_enableddefaults totrue. Sites can override it globally, by section cascade, or on one page.- Legacy homepage data and Docsy block shortcodes remain compatible, but new Landing work should use the canonical section registry.
Upgrade to 0.4.0
- Pin the signed tag and tidy the module graph.
- Replace ICP-specific footer fields with
footer_center_infoif the site used them. - Review pager defaults,
/and\shortcuts, and any local navbar or footer overrides. - Remove copied theme partials only after comparing their local differences with the 0.4 implementation.
- Build representative docs, blog, Landing, Book, print, Markdown, mobile, and color-mode surfaces.
Follow the project-site 0.4.0 upgrade guide for the consumer checklist. The theme repository retains the frozen PRD 5 migration reference.
Verification
The signed tag resolves to the same commit as the released theme source. Theme CI exercises Hugo Extended 0.160.1 and 0.164.0, 32-locale parity, vendored assets, runtime unit tests, every PRD 4/5/6 contract, and the warning-strict example site. The project site pins the public tag and covers bilingual source, rendered Markdown, internal links, alternate builds, browser behavior, and the full multilingual WCAG AA matrix.
Representative documentation, portal, Book, and archive sites also build from
the public v0.4.0 module with workspaces disabled.
Source validation, a public tag, a consumer pin, and hosted deployment are separate evidence gates. Publishing this note does not replace a smoke test of the deployed URL after the site pipeline finishes.
Full change set
See the complete source diff from v0.3.0 to v0.4.0.