Change8

v2.9.2

📦 denoView on GitHub →
10 features🐛 54 fixes🔧 11 symbols

Summary

This release introduces several new features across desktop, extensions, and Node compatibility, alongside numerous performance improvements, especially within Web Streams and NPM handling. Numerous bug fixes address stability, coverage reporting, and installation reliability.

✨ New Features

  • Desktop: Autodetect React Router framework.
  • Desktop: Enable `--hmr` for Vite and Nuxt.
  • Desktop: Run HMR by framework dev server.
  • Desktop: Implement window opacity and transparency APIs.
  • Desktop: Wire `--exclude-unused-npm` through to compile.
  • Extension (Node): Implement v8.setHeapSnapshotNearHeapLimit.
  • Extension (Telemetry): Honor OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT.
  • Inspector: Start inspector server on SIGUSR1.
  • Node: Implement getTestContext() in node:test.
  • Support wildcard patterns in minimumDependencyAge.exclude.

🐛 Bug Fixes

  • Check: Prevent interleaving errors with "Check" lines in a workspace.
  • Compile: Bump libsui to 0.16.1 to survive eu-strip in flatpak.
  • Compile: Bump libsui to 0.16.3 to fix segfault under gVisor/Cloud Run.
  • Core: Prevent draining microtasks in mod_evaluate_sync mid-evaluation.
  • Coverage: Count a branch-junction line as covered when either arm runs.
  • Coverage: Don't count V8 block-boundary gaps as branches.
  • Coverage: Don't let a trailing comment change a line's hit count.
  • Deploy: Disable config discovery and refresh the cached CLI version.
  • Desktop: Attribute bind calls to the registering window id.
  • Desktop: Honor desktop.backend from deno.json.
  • Desktop: Pin @std/http in generated Vite SPA entrypoint + add hermetic compile test.
  • Desktop: Rename launcher to <app> so it self-loads the runtime.
  • Desktop: Run framework build step before bundling output.
  • Desktop: Surface compiled-app startup errors instead of exiting silently.
  • Dprint: Exclude `tools/lzld` submodule.
  • Extension: Throw DataCloneError when posting non-serializable values.
  • Extension (Cache): Implement Cache.keys().
  • Extension (Fetch): Reject transport failures with Node's "fetch failed" shape.
  • Extension (HTTP): Error non-Uint8Array response streams.
  • Extension (HTTP): Honor explicit content-length header on HEAD responses.
  • Extension (HTTP): Point legacy abort warning at docs.deno.com/go link.
  • Extension (NAPI): Add uv_cond_* polyfills for native addons.
  • Extension (Net): Abort pending Deno.connect during DNS resolution.
  • Extension (Node): Allow adopting inherited extra stdio TCP fds.
  • Extension (Node): Don't panic when main module path has invalid percent-encoding.
  • Extension (Node): Don't schedule a pause in inspector.waitForDebugger().
  • Extension (Node): Flush StringDecoder in cipher final() for stream ciphers.
  • Extension (Node): Mark TLSWrap dead on teardown before tls_conn check.
  • Extension (Node): Report all active resources from process.getActiveResourcesInfo.
  • Extension (Node): Require --allow-net=unix for node:net unix sockets.
  • Extension (Node): Support fd 3 pipes in spawned Deno children.
  • Extension (Signals): Unregister handler when SignalStream is dropped.
  • Extension (Web): Resolve pending BYOB read when teeing a byte stream that closes.
  • Fmt: Format Astro inline scripts as TypeScript.
  • Fs: Support pre-1970 (negative) timestamps in FsStat.
  • Inspector: Close WebSocket connections when the runtime is torn down.
  • Install: Don't panic on jsr specifier with a tag like @latest.
  • Install: Don't write through hardlinks when copying package files.
  • Install: Make setup cache packages hash deterministic.
  • Install: Resolve lifecycle script dependency bins against the hoisted layout.
  • Install: Support uninstalling multiple global packages.
  • Lint: Don't error on non-analyzable package exports like CSS files.
  • Lint: Include config file in workspace member invalid version error.
  • LSP: Fix CPU busy loop by creating tokio runtime before JsRuntime in TSC thread.
  • Node (FS): Implement followSymlinks option for fs.glob().
  • NPM: Don't re-fetch packuments on every run when registry has no time data.
  • NPM: Don't retain full npm `exports` value + fix `--watch` memory leak.
  • NPM: Widen node_modules lock staleness margin to avoid false preemption.
  • Permissions: Split comma-separated paths in --ignore-read.
  • Test: Run Node-API finalizers at test worker shutdown.
  • Watch: Accept watch paths in fmt/lint/bench --watch.
  • Watch: Execute preload modules under --watch.
  • Watch: Terminate on Ctrl+C while blocked in synchronous code.
  • Fix: Enable rusqlite "fallible_uint" feature in workspace deps.

Affected Symbols