canopy-pagecanopy-page on GitHub

August 9, 2026

Every build now carries a working reading experience out of the box — nothing in settings.json to turn on.

Search, with a shortcut

A search box in the top bar matches a query's terms against every page's title, headings, and body. Ctrl+K (Cmd+K on macOS) jumps to it from anywhere on the page. See What a reader gets.

The current page and section, marked

The sidebar entry for the page you're reading is highlighted, and — on a page long enough to have its own contents list — so is the section currently in view, updating as you scroll.

Dark and light, remembered

A toggle in the top bar lets a reader override the system's dark/light setting and keeps that choice for their next visit. Without one, pages still follow the system setting exactly as before.

Continuing to the next page

Every page's foot now carries prev/next cards linking to its neighbors in the sidebar's own order, alongside the backlinks that were already there.

A full-screen menu on narrow screens

Opening the sidebar below a page's own width now covers the screen with the full navigation, rather than pushing the page's content down — and no longer leaves an empty band behind when closed.

One highlighting style for every code fence

A fence naming a language nothing can resolve, or naming none at all, now renders with the same background and layout as a highlighted block — plain text rather than a block that looks broken. See Code and math.

Upgraded to canopy 0.6.0

All six changes above ship from canopy's rendering — canopy-page only carries the search index and the client-side script that makes search and the theme toggle interactive. See canopy's changelog for the underlying markup and CSS.

Diagrams, rendered at build time

A new rehypePlugins setting names rehype plugins to run on every page, so markdown that needs more than CommonMark and GFM has somewhere to go. Diagrams shows what it enables: a declart fence and a mermaid fence, both rendered to inline SVG when this site was built — not screenshots, not client-side rendering. See the settings reference for the field itself.

Ships from canopy 0.7.0's fixed rehype extension point. See canopy's changelog for where in the pipeline it runs and why.