v4.20.0
·
47 commits
to main
since this release
Focus: Static SSR — every route ships as hydration-ready HTML, rendered at build time.
Changes
- 🖥️ Added opt-in static SSR (
ssr: { enabled: true }in docsector.config.js):docsector buildruns Quasar's SSR mode as a build-time renderer — every route is rendered withrenderToString(real hydration anchors, per-route meta via useMeta, manifest-driven preloads) and deployed as plain static files indist/spa; no Node server ever runs in production - 💧 Added lazy hydration: server-rendered pages hydrate their above-the-fold blocks synchronously, below-the-fold chunks on scroll (
hydrateOnVisible) and the sidebar menu on first interaction (hydrateOnInteraction) — the server-rendered links work natively before hydration - 🚰 Added a
hydrationboot that detects server-rendered markup before mount, so first-paint gates (layout settling, progressive reveal) start in the exact serialized state and hydration stays mismatch-free - 🔗 Internal-link pages now emit static redirect documents (meta refresh + canonical) instead of empty app shells
- ⚡ Early Hints Link rules are derived from the real rendered head in SSR builds
- 🛠️ Fixed three latent SSR blockers: book-tab colors now resolve isomorphically (getPaletteColor requires a live DOM), raw HTML blocks are balanced at tokenize time (unclosed author tags corrupted the serialized stream and every sibling after them), and the header declares a
height-hintso the page-container padding no longer shifts +61px on mount - ✅ Validated with local Lighthouse (mobile): LCP −800 ms and FCP −700 ms across pages, +6 on manual pages and +9 on the homepage with zero hydration mismatches across sampled routes and viewports (335 passing tests)