Skip to content

v0.4.0

Choose a tag to compare

@kirchdev-release kirchdev-release released this 14 Sep 00:11
95231e3

0.4.0 (2026-09-14)

⚠ BREAKING CHANGES

  • sections: hand a section type its input rather than a string
  • cli: the duxt-report binary is replaced by duxt report. Use pnpm exec duxt report and pnpm exec duxt report --json where pnpm exec duxt-report was used.
  • shortcuts: duxt.shortcuts is a policy object, not a binding list. A site that replaced the bindings sets shortcuts.singleCharacter instead; there is no per-key override. onDuxtShortcut() takes a getter for the live list and an action-keyed handler, and matchesDuxtShortcut() and shortcutLabel() are gone — useDuxtShortcuts() replaces both.

Features

  • align machine-readable exports with llms.txt v2 (3809e2a), closes #71
  • analytics: report reader interactions to an opt-in callback (7b2eb01), closes #50
  • announcements: add a configurable site-wide banner (97617d9), closes #49
  • bruno: build a downloadable archive per version and locale (3239c09), closes #18
  • bruno: publish a Bruno collection as a reference section (b05f825), closes #18
  • bruno: read a Bruno collection out of its directory (af2e1b5), closes #18
  • changelog: show a release's contributors in the history (4d47767), closes #67
  • changelog: version generated changelogs alongside docs and API (0d0eae8), closes #83
  • ci: cache remote sources for pull-request checks (4f2f10a), closes #36
  • cli: make the report command discoverable (fc1672c), closes #73
  • config: expose consumer-owned layer behavior (e35c68b), closes #14
  • content: document and verify the database adapters (baa18d7), closes #35
  • demo: gather openapi, bruno and terraform under /demo (51de1c8)
  • deploy: skip superseded builds before publication (8f5e4c3), closes #46
  • footer: center and reorder the mobile layout (dec597c), closes #41
  • frontmatter: let a page control the docs shell around it (ffff134), closes #15
  • header: add tooltips to header controls (550d27f)
  • hooks: open one build-time extension point (059cd6a), closes #16
  • images: serve responsive sources and show the zoom affordance (6018680), closes #17
  • image: view images full screen with zoom and theme backgrounds (273a79f)
  • landing: drop the tab strip from the preview window (ef3cacb)
  • mcp: deepen the documentation interface (40d261e), closes #72
  • og-image: cache rendered images between deploys (c9a2a25), closes #43
  • prerender: benchmark the concurrency instead of assuming it (f9fe00e), closes #44
  • search: benchmark a candidate index instead of assuming it (b90611c), closes #33
  • search: give palette rows a shared context line (3565678), closes #78
  • search: name sources and preview results (ba90088), closes #38
  • sections: hand a section type its input rather than a string (9537f7d), closes #18
  • sheet: default the sheet's side to the reader's end (0f0146e), closes #13
  • shortcuts: make global keyboard shortcuts configurable (f13d5ef), closes #79
  • shortcuts: surface and document the keys (6cdc8e4), closes #80
  • sources: discover documentation releases (a1d55f3), closes #60
  • sources: key the remote download cache (e46f24f), closes #36
  • support tfplugindocs sources (8e3a973), closes #12
  • theme: make direction a property of the theme (8fd818a), closes #13

Bug Fixes

  • api-client: read the config before the body mode needs it (8e8900e)
  • app-config: read an edited app.config after a dev restart (1f2c324)
  • bruno: close the three holes in the redaction guarantee (86473c9), closes #18
  • bruno: keep two requests that slugify alike from becoming one page (f3db69a), closes #18
  • bruno: put the archive where the build output serves it from (3004a4f), closes #18
  • changelog: read release contributors from the own checkout (a38aa79)
  • check-images: run the badge assertion that never matched (00a4a98), closes #17
  • check-routes: read the manifest the Cloudflare build actually writes (a9fd43e), closes #70
  • check-routes: require a row or an exemption for every handler (d89fcbe), closes #70
  • cli: point the cache commands at their guide (332cc18)
  • code: copy through one composable in the reader's language (bc11262)
  • content: replace the deprecated nativeSqlite option (8018cb9), closes #34
  • copy-page: divide the model hand-off from the source link (e02ea0a), closes #14
  • demo: answer every method on the echo route from the page origin (c2170a4)
  • dialog: stop forwarding showCloseButton to reka (0df73d5)
  • dialog: style the close control as an icon button (ce300a9)
  • error: list the nearest pages once and in one column (3ba32d5)
  • error: provide tooltips and one title template on the error page (f24ca0f)
  • frontmatter: give every boolean page control a default (df2dabe), closes #88
  • header: hide the shortcuts trigger below lg (19134a7)
  • highlight: load the grammars the landing demos name (ceebe6e)
  • i18n: register the bruno messages for every locale (7a82798)
  • images: restore the zoom and gate its prerendered variants (06166af), closes #17
  • landing: crossfade code tabs and keep the prose in place (d5078c2)
  • llms: avoid loading page bodies for index (6b196ba), closes #84
  • locale: keep machine routes at the root in every locale (d8be082)
  • locale: keep the switcher trigger a single stable element (a24bcb8)
  • mcp: take the request from the event, not from the SDK's extra (08c7045), closes #90
  • navigation: make page: false authoritative for every traversal (0e93a9b), closes #12
  • navigation: mark external links with an arrow kept beside the label (7a032e3)
  • navigation: resolve the tfplugindocs prefix before the first await (f9de044)
  • navigation: skip synthetic tfplugindocs groups (ee27e00), closes #12
  • og-image: take the cache reset from the removal, not a prior check (161f1ec)
  • package: declare the sitemap dependency the layer imports (632cbc0), closes #14
  • package: describe duxt as the landing page does (f04c769)
  • package: ship the tfplugindocs module (4530e6f), closes #12
  • page-header: let the title row wrap rather than push the page sideways (f71143e), closes #91
  • page: render a missing page as a 404 without a fatal log (16db4b5)
  • page: render nothing for a missing page on its way to the 404 (31a0cdf)
  • progress: measure scroll position once per frame (54887d6)
  • scripts: refuse a build run from inside a .git directory (24e877c), closes #87
  • search: reach the results from the search input (ad5e721), closes #89
  • search: show the closest-match note only with results (44fc6ad)
  • section-row: reserve the bold label width so chips stay put (9cdce36)
  • sections: point a hand-listed per-version section at the reader (04c0002)
  • sections: write generated pages through shared markdown helpers (3e7710c)
  • sources: keep non-Markdown out of the partials collection (0dd4e69), closes #14
  • sources: report unreadable Git tags as a Git failure (1896bc9), closes #60
  • storage: read stored lists through one guarded helper (8ddd6a8)
  • theme: see the direction in a declaration, not only in a utility (a27a9d8), closes #13
  • ui: draw every tab and choice strip with one pill (6a30d84)
  • version: point the banner and canonical at a page that exists (d8f52b6), closes #83
  • versions: keep sections, sidebar and search on every edition (90c716d)