v3.2.0

Changelog version 3.2.0

Changelog v3.2.0Link

FeatureLink

  • feat(ask-ai): multi-provider support, dev-mode token chip, useConfig-driven client config.
  • provider — provider preset name (default 'openai').
  • systemPrompts — per-provider system-prompt override map. Matching provider key wins over global systemPrompt.
  • devMode — when true, the chat UI renders a token-consumption chip (provider/model, prompt/completion/total tokens, elapsed ms) below each assistant response. Auto-enabled when process.env.NODE_ENV !== 'production'.
  • handler.ts: API key lookup now uses providerEnvKey instead of hardcoded OPENAI_API_KEY.
  • ServerResponse import moved from vite to node:http.
  • Adapter eventToSse switches now have a default case (TS2366).
  • Middleware narrows question to string via local safeQuestion (TS2322 fix).
  • Reduce package weight for downstream consumers.
  • Boltdocs 3.2.0 — Nitro Phase 1 performance optimizations

Bug FixLink

  • Fix mermaid pages having extra scroll space at the bottom
  • Fix body scroll bug: changed min-height: 100% to height: 100%; overflow: hidden on html/body in reset.css to prevent the browser scrollbar from appearing on all pages
  • Mermaid SVG cleaning now uses DOMParser to only strip sizing attributes from the root <svg> element, preserving inner element styles (transforms, font-size) that mermaid uses for node positioning
  • Added not-prose class to mermaid wrapper to prevent Tailwind typography plugin from adding margins to the SVG
  • Added margin: 0 !important to mermaid SVG CSS as additional safety
  • Added overflow: hidden to the root SVG element via cleanSvg
  • Moved <style> tag inside the mermaid container div to avoid prose layout interference
  • Updated dependencies [, ]:
  • @bdocs/ssg@0.3.0
  • @bdocs/unist-utils@0.2.0

PerformanceLink

  • SSR output consolidated: Moved from .vite-react-ssg-temp/ to .boltdocs/build/ssr/ — all build artifacts now live under a single .boltdocs/ directory
  • Server build skip preserved: SSR output no longer deleted when client code hasn't changed, making warm builds skip the expensive SSR Vite bundle (~40s saved)
  • Mtime cache in memory: getFileMtime() now uses an in-memory TTL cache (2s) instead of fs.statSync() on every call — 5.9x faster for repeated stat calls
  • Client hash single stat: computeClientCodeHash() reduced from 3 stat calls per file to 1 — 66% fewer syscalls
  • Hash meta persistence: hash-meta.json stores file count + last mtime for fast cache validation without full directory scans
  • Dev gzip skipped: TransformCache no longer gzips cache shards in dev mode

OtherLink

  • MDX cache key for dev: Uses file path + mtime instead of content hash in dev mode — cache survives restarts when files haven't changed
  • Bounded route parsing: Promise.all replaced with runWithConcurrency(32) to prevent memory pressure and I/O contention
  • docCache loaded flag: docCache.load() skips disk read when already in memory
  • HMR O(1) module graph lookup: Pre-built lowercase index replaces brute-force O(N) scan for faster content edits
  • Prewarming with route priority: Index pages and getting-started are prewarmed first; 150ms delay to avoid CPU contention with first page request
  • Pipeline parallel steps: SEO validation and type generation run concurrently via addParallelSteps()
  • Pipeline timing logs: Per-step timing reported after build completion
  • Critical CSS concurrency: Beasties processor runs at concurrency: min(cpus, 4) instead of 1
  • Shiki WASM engine: Oniguruma WASM engine replaces JavaScript regex — 13% faster syntax highlighting
  • Phase 1 of the new plugin API. The unist/mdast/hast utilities that used to
  • Phase 2 of the new plugin API: enrich PluginContext with four
  • packages/core/src/node/plugins/plugin-context.ts — new module
  • PluginLifecycleManager.createContext() — extended to inject them.
  • packages/core/src/node/plugin/virtual-modules.ts — resolveId and
  • New __resetPluginContextStateForTests() test helper is exported
  • The eager flag on add() is accepted but not yet wired into the
  • The diagnostics queue is process-local. For multi-instance
  • Phase 7 of the new plugin API: transform middleware pipeline and lazy slot
  • packages/core/src/shared/types.ts — PluginTransformMiddleware,
  • packages/core/src/node/plugins/plugin-types.ts — middleware on
  • packages/core/src/node/plugins/plugin-context.ts —
  • packages/core/src/node/plugins/plugin-lifecycle.ts —
  • packages/core/src/node/plugin/layout-slots.ts — lazy in
  • packages/core/src/node/schema/config.ts — lazy and middleware
  • packages/core/src/client/hooks/use-slot-registry.ts —
  • packages/core/src/client/components/docs-layout-default.tsx —
  • packages/core/src/client/virtual.d.ts — slotLazyFlags declaration
  • packages/core/tests/slots/layout-slots-generator.test.ts — 3 new lazy
Last updated on October 18, 2026

Was this page helpful?