🎉 Hinode v3: a new module generation with a redesigned argument engine #2007
Replies: 5 comments
📊 Follow-up: the faster builds, measured in CITo put concrete numbers behind the "much faster builds" highlight, I compared the Pure Hugo build time (
That's roughly −22s per build job (up to −32s on Windows), consistent across both Node 22.x and 24.x — the payoff of compiling each argument schema once and caching it per structure. It lines up nicely with the ~2 minutes of cumulative template time we saw disappear on the docs site. Note: this is Hugo build time, not end-to-end pipeline time (which includes runner setup). Sample: 7 v2 runs (Jul 9–12) vs 16 v3 runs (Jul 13–15), |
|
For anyone upgrading a customized theme — one that overrides Hinode by shadowing its layouts, partials, or SCSS — those forked copies don't follow the module bump and can break in non-obvious ways: build errors that point at vendored files, moved partials, changed signatures. I've expanded the upgrade guide with a section covering exactly this — re-syncing shadowed SCSS variables and the entry point, the common partial moves, and a method for exercising the override paths your own content doesn't reach: |
⚡ Follow-up: the build pipeline got another big boostWe further optimized the build pipeline of Hinode. The latest version
Sample: 42 v2 build jobs (Jul 9–13) vs 12 v3.5.2+ jobs (Jul 17, n growing); consistent across Node 22.x and 24.x. As a bonus, builds are now fully reproducible — building the same site twice produces byte-identical output. |
Update: the v3 generation, measuredSince this announcement, the v3 series has delivered three coordinated modernization rounds — Build performance (v3.2.7 → v3.5.2)
The render-once round eliminated duplicate content rendering and moved expensive work out of Stylesheets (v3.6)CSS purging is now enabled by default (production builds only; development serves unpurged CSS,
Scripts (v3.7)Hinode's own JavaScript is now bundled as ES modules with Hugo's js.Build (esbuild): es2022
Our production site (gethinode.com) mirrors these numbers: −54% CSS and −25% total homepage Beyond the byte counts, v3.7 also makes the leaflet, KaTeX, Lottie, and Mermaid shortcodes Benchmarks were taken on an Apple M1 Pro against the example site; your numbers will vary |
♿ Follow-up: an accessibility & performance roundAfter the render (v3.5), styles (v3.6), and script (v3.7) pipelines, the v3 series added a coordinated accessibility & performance round — from v3.8 onward, together with Performance
Accessibility — swept across the full component library Every element the docs render (21 blocks + 42 components) was audited. 55 of 65 pages already scored 100; the rest are now there too. Representative fixes:
Measured on a real Hinode site (gethinode.com, mobile Lighthouse):
On the homepage, largest-contentful-paint dropped 4.1 s → 2.5 s and Speed Index 4.9 s → 1.9 s. The accessibility and font-loading gains apply to every Hinode site. The headline performance number still depends on deployment choices — a synchronous cookie-consent script, for instance — so it varies from site to site; the theme now gives you the preconnect and caching hooks to soften that where you can. |
Uh oh!
There was an error while loading. Please reload this page.
Hinode v3 is here
We're excited to announce Hinode v3, a coordinated major release of the Hinode theme and its module ecosystem. At its heart is a fully redesigned argument validation engine in mod-utils v6 — the system that validates every argument you pass to shortcodes, partials, and Bookshop components.
Highlights
heading,illustration, orlinksentries) are now validated at any depth — types, permitted values, ranges, and unknown attributes. Previously only top-level arguments were checked.Args.htmlpartial returns a separated envelope (args,err,errmsg,warnmsg,defaulted) with camelCase keys. The familiarInitArgs.htmlkeeps working as a compatibility shim, so existing shortcodes and partials don't need changes.heading.title— and every warning tells you exactly what to fix.The v3 module generation
Hinode v3 pins a coordinated set of module majors. If you maintain a site that imports modules directly, update the paths in your
hugo.tomlandgo.mod:github.com/gethinode/hinode/v3github.com/gethinode/mod-utils/v6github.com/gethinode/mod-blocks/v2github.com/gethinode/mod-fontawesome/v6github.com/gethinode/mod-flexsearch/v5github.com/gethinode/mod-leaflet/v3github.com/gethinode/mod-lottie/v3github.com/gethinode/mod-mermaid/v5github.com/gethinode/mod-simple-datatables/v4github.com/gethinode/mod-hanko/v3github.com/gethinode/mod-hubspot/v4github.com/gethinode/mod-llm/v2github.com/gethinode/mod-bootstrap-icons/v2github.com/gethinode/mod-flaticon/v2Modules not listed (mod-bootstrap, mod-csp, mod-katex, and friends) are unaffected and keep their current versions.
Migrating
v5/v2paths (e.g._vendor/github.com/gethinode/mod-utils/v5/→/v6/) and regenerate your Bookshop configuration.Quality notes
The entire generation was validated against Hinode's full block and component library — every page compared structurally against the previous production rendering, backed by a new golden-file regression suite in mod-utils covering the engine's behavior in detail. Rendered output is intended to be identical to v2; if you spot a visual difference after upgrading, please open an issue.
Happy building! 🌅
All reactions