v4.7.0
v4.7.0
Released: 2026-10-23
Breaking Changes
Source builds only: the
embed_v8Cargo feature and thedeno_corehost are removed (c0f16f31). The default build usesdirect-v8.--no-default-featuresstill builds the slim, V8-free CLI. The V8-off error now namesdirect-v8 = offinstead ofembed_v8 = off. npm and Homebrew users are not affected.Source builds only:
deno_core,deno_ops,deno_error,serde_v8and 17 other crates leave the dependency graph (21 records in total). No remaining crate's version changed.
Features
Engine: zfb now runs JavaScript (config evaluation, SSR, plugins) on its own direct V8 host (
zfb-js-host,v8147.4.0) instead of thedeno_core-based host (9b7fbdad, c0f16f31). npm and Homebrew users need to do nothing: commands, config and output are unchanged.Engine: the ICU 77 data that V8 needs is vendored and embedded in the binary. No environment variable or download is needed at build or run time (b8699c6e).
Bundler: zfb now bundles pages/SSR and islands with Rolldown, in process, instead of the embedded esbuild (#4408). Set
ZFB_BUNDLER=esbuildto go back to esbuild.ZFB_BUNDLERaccepts onlyrolldownoresbuild, and any other value fails at startup.zfb.config.tsand plugins still compile with esbuild.Island JS output changes: Rolldown's island bundles are about 4% larger raw and about 4% smaller gzipped than esbuild's, so asset hashes change on the first build after upgrading (#4408).
Bug Fixes
Islands: chunks that hold a plugin virtual module, such as zudo-doc's shadowed
zdtp-loaderstub, keep the sameislands-chunk-[hash]name across identical rebuilds. The virtual-module file is now named after its content (7460a65d, 8d7f581a).Windows: an island build that imports a
?urlresource, such as@takazudo/, no longer fails withzfb- md- wasm/ highlight read esbuild resolved graph input …?url(os error 123) on the esbuild path (#4419, fixes #4413).Windows:
zfb devre-renders a page when the target of its:::includechanges. Verbatim (\\?\C:\…) dependency paths keep\separators, and virtual-module remapping handles verbatim imports (a8432f84, 38c251ab).
Other Changes
Dependencies: YAML frontmatter uses
noyalib/noyalib-serde-yaml0.0.58 (cf92bfa5). Parsing very large frontmatter is about 2.3–2.9x slower than with 0.0.55. Typical pages are unaffected.Dependencies: RUSTSEC-2025-0141 (
bincode1) is now reached only throughsyntect, and RUSTSEC-2024-0436 (paste) only throughv8. Both stay recorded as accepted exceptions indeny.toml(929ed12c).Known limitation: the direct host does not interrupt CPU-bound JavaScript (for example a page stuck in an endless loop) and sets no hard heap limit. On shutdown the CLI waits up to 10 seconds for its V8 thread, then detaches it.
Known limitation: Rolldown refuses two inputs it does not support yet, with a message naming
ZFB_ROLLDOWN_TRAILING_ROOT_DIRS_UNSUPPORTEDorZFB_ROLLDOWN_RAW_CSS_UNSUPPORTED: atsconfig.jsonthat setscompilerOptions.rootDirstogether with apathstarget ending in a directory, and raw CSS loaded into a JavaScript bundle. SetZFB_BUNDLER=esbuildto build such a project.