v2.1.0
Release[email protected] — 2026-06-19
Client-side search (⌘K), SSRF hardening, SEA binary fixes, and a dependency refresh.
Features
-
add built-in client-side search (⌘K) to the modern template (a3d3c1c, #445)
// docula.config.json — search is on by default for the modern template; // build emits search-index.json and renders the ⌘K / Ctrl-K modal. { "enableSearch": true } // set to false to disable
Bug Fixes
- search: robust HTML stripping and Enter-key race in client search (5d4392c, #445)
- search: match lenient script/style end tags; enable search for changelog-only sites (d6ac6e9, #445)
- api: mitigate SSRF in remote OpenAPI spec fetch (1ca11c5, #431)
- safe-fetch: handle both lookup signatures; destroy dispatcher inline on redirect (396618c, #431)
- binary: support docula.config.json; SEA mode loads JSON only (083ed53, #428)
- binary: load .mjs configs without dynamic import() in SEA mode (6fcecc5, #428)
- binary: use createRequire instead of new Function; preserve aliases and scope (10edf8b, #428)
- binary: dedupe require() calls and verify multi-line import handling (1d2e758, #428)
- binary: build SEA as ESM to enable dynamic import of file URLs (eef80ee, #426)
- binary: drop githubPath from smoke fixture to skip GH API call (eabbada, #429)
- binary: skip site config loading for version command (077f4cd, #425)
- release: grant id-token: write for npm OIDC trusted publishing (7ae3269, #424)
Documentation
- security: add Aikido badge and expand SECURITY.md (6352d7e, #432)
- security: qualify PR scan coverage to main branch (7b55ddd, #432)
- readme: move Aikido badge into dedicated Security section (c2eabf7, #433)
- security: switch vulnerability reports to private email only (4690e60, #433)
- readme: drop vulnerability reporting line from summary (4cb858f, #433)
- add Binary Download page documenting JSON-only SEA config (985cc1f, #428)
- add rel="noopener noreferrer" to Aikido badge link (1f6d5a6, #427)
- add Aikido security audit report badge to README (b5d2d2d, #427)
- re-add Aikido Security Audit badge (1d96c29, #435)
Internal
- upgrade hashery to 3 — no public API change; Node ≥22.18 already satisfied (dfd72a1, #443)
- upgrade undici to 8; bump engines.node to ^22.19.0 (0f38083, #442)
- upgrade ipaddr.js (1721a15, #441)
- upgrade ecto (5eae9fd, #440)
- upgrade @cacheable/net (9e0e5b0, #439)
- upgrade AI SDK dependencies (211bb19, #438)
- upgrade GitHub Actions — checkout v7, codecov v7 (e8e0d3b, #437)
- upgrade TypeScript and build tooling (b9cc26d, #436)
- upgrade code quality dependencies — biome, vitest (5880166, #435)
- test: rebuild test harness for isolation, determinism, and 100% coverage (bcd6d9c, #444)
- test: harden harness per review — no failure-hiding, no env leaks, safer cloneSite (4f72069, #444)
- test: address Codex review findings on the migrated tests (b78007a, #444)
- ci(binary): drop macOS x64 build, keep only macos-latest arm64 (33619a6, #430)
- ci(binary): replace deprecated macos-13 runner with macos-15-intel (c8308d2, #430)
- ci(release): drop NPM_TOKEN fallback now that OIDC publishes (21607ac, #424)
Contributors
- @jaredwray (21)
Full List of Changes
- fix(release): grant id-token: write so pnpm OIDC publish succeeds by @jaredwray in #424
- fix(binary): skip site config loading for
versioncommand by @jaredwray in #425 - fix(binary): build SEA as ESM to enable dynamic import of file URLs by @jaredwray in #426
- docs: add Aikido security audit report badge to README by @jaredwray in #427
- fix(binary): load .mjs configs without dynamic import() in SEA mode by @jaredwray in #428
- fix(binary): drop githubPath from smoke fixture to skip GH API call by @jaredwray in #429
- ci(binary): drop macOS x64 build, keep only macos-latest (arm64) by @jaredwray in #430
- fix(api): mitigate SSRF in remote OpenAPI spec fetch by @jaredwray in #431
- docs(security): add Aikido badge and expand SECURITY.md by @jaredwray in #432
- docs(readme): move Aikido badge into dedicated Security section by @jaredwray in #433
- root - chore: upgrade code quality dependencies by @jaredwray in #435
- root - chore: upgrade TypeScript and build tooling by @jaredwray in #436
- root - chore: upgrade GitHub Actions (breaking) by @jaredwray in #437
- root - chore: upgrade AI SDK dependencies by @jaredwray in #438
- root - chore: upgrade @cacheable/net by @jaredwray in #439
- root - chore: upgrade ecto by @jaredwray in #440
- root - chore: upgrade ipaddr.js by @jaredwray in #441
- root - chore: upgrade undici to 8 (breaking) by @jaredwray in #442
- root - chore: upgrade hashery to 3 (breaking) by @jaredwray in #443
- test: rebuild test harness for isolation, determinism, and 100% coverage by @jaredwray in #444
- feat: built-in client-side search (⌘K) for the modern template by @jaredwray in #445
Full diff: https://github.com/jaredwray/docula/compare/v2.0.0...v2.1.0