defineNorthwesternConfig config helper. Single function that returns a complete Astro config with integration ordering (mermaid → starlight), plugin registration, and Expressive Code. Replaces the manual defineConfig + starlight() + northwesternMermaid() wiring. New ./config package export.
Automatic Expressive Code line numbers.defineNorthwesternConfig injects pluginLineNumbers() and GitHub syntax themes (github-dark / github-light). No ec.config.mjs file needed. A Vite plugin separates serializable config from plugin instances so the <Code> Astro component continues to work.
Type declarations (.d.ts) shipped for all public exports.
OG images for changelog version pages with multi-line titles (e.g., “Changelog / 1.4.0”).
JSON-LD structured data on each page.
Unit test suite (Vitest) covering config.ts, expressive-code.ts, mermaid.ts, and rehype-table-scroll.ts. E2E tests moved to tests/e2e/. CI runs unit tests in a dedicated job.
Fixed
Replaced astro-og-canvas + canvaskit-wasm with satori + @resvg/resvg-wasm. pnpm users no longer need canvaskit-wasm as a direct dependency.
OG image generation logs a warning and disables when Starlight title is empty or site is not set, instead of crashing or producing broken URLs.
OG font buffer uses correct Uint8Array offset slicing instead of casting the full backing ArrayBuffer.
Larger OG text: title 48→56px, description 28→32px, logo 60→80px. Separate vertical (60px) and horizontal (220px) padding to avoid clipping.
Runtime config validation now catches invalid theme, Mermaid, and config-helper options with friendly errors at the public API boundary instead of failing later with cryptic behavior.
Aside borders use solid brand colors (#5091cd, #008656, #ffc520, #ef553f) and a 3px left accent stripe instead of a translucent 1px box border. Dark mode borders match the text accent for each variant.
Changed
h1 keeps Noto Serif; h2–h6 switched to Poppins.
Package exports map includes types fields pointing to dist/*.d.ts for all entry points.