v2.3.0
Headline: lecture pages gain in-page live compute (a JupyterLite/Pyodide Power toggle in the header toolbar) and an inline git-history changelog on the page header's author line. All third-party CDN stylesheets are gone — KaTeX and jupyter-matplotlib are served from the site's own origin and Font Awesome is dropped — so maths and styling no longer degrade where jsdelivr/cdnjs are unreachable (notably mainland China). Consumers upgrade by bumping the pinned release URL in
site.template.
Added
- In-page live compute via Thebe (Phase 2 of
PLAN.md, closes #88): setting the standard MySTproject.thebeconfig surfaces a Power toggle in the header toolbar next to Launch on notebook pages (desktop); clicking it boots the kernel, after which Run / Restart / Clear take its place and cells execute live. The control is the@myst-theme/jupyternotebook toolbar, portaled into the header (ComputeToolbarSlot.tsx→#qe-compute-slot) so it stays inside the Thebe providers while living in the always-visible header — no provider-tree lift. The QuantEcon default is JupyterLite (thebe: { lite: true }): Python runs in the browser via Pyodide, with no server or Binder to host;binder:/server:backends remain available through the same config. Pyodide package caveat (numba/JAX unavailable) documented in the README. Covered by a presence test scoped to the header slot and a disabled-path test against a second no-thebe fixture served on its own port, proving the toggle is gated on the project opting in (#98). - Git history in page headers (Phase 1 of
PLAN.md): a "Last changed" control on the page-header author line expands an inline changelog with GitHub-linked commit hashes and a full-history link, mirroring thequantecon-book-themeheader. The panel opens above the header's blue divider, pushing it down and sitting flush on it, so the divider reads as the panel's own bottom edge and the changelog stays clear of the lecture content. It grows to fit rather than scrolling — length is bounded at the source, with the plugin capping entries per page (default 6). Data is injected at build time by a new MyST transform plugin (plugins/git-metadata.mjs,git log --followper page →mdast.data.git_metadata), with asite.git_metadatapage-frontmatter override for manual pinning. mystmd has no built-in last-modified support (jupyter-book/mystmd#2213), and plugin transforms cannot modify page frontmatter, hence the AST channel (#83).
Changed
- The KaTeX and jupyter-matplotlib stylesheets are now served from the site's own origin instead of
cdn.jsdelivr.net. jsdelivr is intermittently unreachable from mainland China, and when it is blocked the maths markup still renders but arrives unstyled — fractions, radicals and matrices collapse into run-together text. The KaTeX CSS (plus the font files it references) is bundled from the installedkatexpackage, which also retires the KaTeX 0.15.2 pin in the upstreamKatexCSSexport; the 316-byte jupyter-matplotlib stylesheet is vendored into the Tailwind bundle, costing no request at all (#125).
Removed
- The render-blocking Font Awesome 4.7 stylesheet from cdnjs. Nothing used it: the theme renders no
fa-*classes (the toolbar uses the bundledlucide-reacticons), and the library has been end-of-life since 2016. Dropping it removes a third-party origin (a DNS lookup and TLS handshake) from the critical rendering path (#124).
Fixed
- Contents sidebar no longer flashes open on page load. On static builds the first paint can happen before
app.cssapplies, leaving the panel in flow and fully visible; it then animated itself shut over 300ms because the transition predated the stylesheet. The inlined critical CSS now parks the panel off-screen on that first frame, and the transition is withheld until after mount (#123).