Deno v2.9.2stable Released Jul 08, 2026
Impact Score: 5/10

Deno v2.9.2 โ€” Release Notes & Engineering Impact

Source available โ€” automated, not human-reviewed

Component: deno ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.

Analysis updated: 2026-11-01.

Compatibility not verified โ€” check source notes
๐Ÿ“„ .MD
โšก Executive Summary (TL;DR)

Deno v2.9.2. Source highlight: feat(desktop): autodetect React Router framework (#35557)

Who Does This Impact? (Role-Based Analysis)

๐Ÿ’ป Software Engineers & Devs

Check the source notes against the package and APIs you use before upgrading.

๐Ÿ“Š Product & Engineering Leads

Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.

โš™๏ธ DevOps & Security

Verify the target version, runtime requirements and rollback procedure in the official documentation.

โœจ New Features & Capabilities (6)

  • feat(desktop): autodetect React Router framework (#35557)
  • feat(desktop): enable `--hmr` for Vite and Nuxt (#35851)
  • feat(desktop): run HMR by framework dev server (#35722)
  • feat(desktop): window opacity and transparency APIs (#35646)
  • feat(desktop): wire --exclude-unused-npm through to compile (#35740)
  • feat(ext/node): implement v8.setHeapSnapshotNearHeapLimit (#35694)

โšก Performance & Enhancements (6)

  • perf(config): literal-suffix reject and prune irrelevant globs per base
  • perf(core): defer residual lazy source registration (#35731)
  • perf(ext/fetch): stream wasm bytes to the compiler from Rust (#35704)
  • perf(ext/node): remove per-chunk copying on TLSWrap data paths (#35705)
  • perf(ext/node): zero-copy async Buffer writes on the stream_wrap path (#35780)
  • perf(ext/web): identity pipeThrough writable bypass (#35799)

๐Ÿ”ง Bug Fixes & Patches (6)

  • fix(check): don't interleave errors with "Check" lines in a workspace (#35687)
  • fix(compile): bump libsui to 0.16.1 to survive eu-strip in flatpak (#35699)
  • fix(compile): bump libsui to 0.16.3 to fix segfault under gVisor/Cloud Run
  • fix(core): don't drain microtasks in mod_evaluate_sync mid-evaluation (#35707)
  • fix(coverage): count a branch-junction line as covered when either arm runs
  • fix(coverage): don't count V8 block-boundary gaps as branches (#35767)
๐Ÿ“„ View Raw Release Notes (Original Developer Log)
### 2.9.2 / 2026.07.08 - feat(desktop): autodetect React Router framework (#35557) - feat(desktop): enable `--hmr` for Vite and Nuxt (#35851) - feat(desktop): run HMR by framework dev server (#35722) - feat(desktop): window opacity and transparency APIs (#35646) - feat(desktop): wire --exclude-unused-npm through to compile (#35740) - feat(ext/node): implement v8.setHeapSnapshotNearHeapLimit (#35694) - feat(ext/telemetry): honor OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT (#35068) - feat(inspector): start inspector server on SIGUSR1 (#35738) - feat(node): implement getTestContext() in node:test (#35678) - feat: support wildcard patterns in minimumDependencyAge.exclude (#35746) - fix(check): don't interleave errors with "Check" lines in a workspace (#35687) - fix(compile): bump libsui to 0.16.1 to survive eu-strip in flatpak (#35699) - fix(compile): bump libsui to 0.16.3 to fix segfault under gVisor/Cloud Run (#35701) - fix(core): don't drain microtasks in mod_evaluate_sync mid-evaluation (#35707) - fix(coverage): count a branch-junction line as covered when either arm runs (#35858) - fix(coverage): don't count V8 block-boundary gaps as branches (#35767) - fix(coverage): don't let a trailing comment change a line's hit count (#35741) - fix(deploy): disable config discovery and refresh the cached CLI version (#35754) - fix(desktop): attribute bind calls to the registering window id (#35654) - fix(desktop): honor desktop.backend from deno.json (#35815 - fix(desktop): pin @std/http in generated Vite SPA entrypoint + add hermetic compile test (#35676) - fix(desktop): rename launcher to <app> so it self-loads the runtime (#35709) - fix(desktop): run framework build step before bundling output (#35603) - fix(desktop): surface compiled-app startup errors instead of exiting silently (#35567) - fix(dprint): exclude `tools/lzld` submodule (#35778) - fix(ext): throw DataCloneError when posting non-serializable values (#35604) - fix(ext/cache): implement Cache.keys() (#35455) - fix(ext/fetch): reject transport failures with Node's "fetch failed" shape (#35618) - fix(ext/http): error non-Uint8Array response streams (#35783) - fix(ext/http): honor explicit content-length header on HEAD responses (#35728) - fix(ext/http): point legacy abort warning at docs.deno.com/go link (#35713) - fix(ext/napi): add uv_cond_* polyfills for native addons (#35536) - fix(ext/net): abort pending Deno.connect during DNS resolution (#35729) - fix(ext/node): allow adopting inherited extra stdio TCP fds (#35805) - fix(ext/node): don't panic when main module path has invalid percent-encoding (#35534) - fix(ext/node): don't schedule a pause in inspector.waitForDebugger() (#35796) - fix(ext/node): flush StringDecoder in cipher final() for stream ciphers (#35800) - fix(ext/node): mark TLSWrap dead on teardown before tls_conn check (#35706) - fix(ext/node): report all active resources from process.getActiveResourcesInfo (#35532) - fix(ext/node): require --allow-net=unix for node:net unix sockets (#35835) - fix(ext/node): support fd 3 pipes in spawned Deno children (#34133) - fix(ext/signals): unregister handler when SignalStream is dropped (#35832) - fix(ext/web): resolve pending BYOB read when teeing a byte stream that closes (#35828) - fix(fmt): format Astro inline scripts as TypeScript (#35852) - fix(fs): support pre-1970 (negative) timestamps in FsStat (#35517) - fix(inspector): close WebSocket connections when the runtime is torn down (#35791) - fix(install): don't panic on jsr specifier with a tag like @latest (#35605) - fix(install): don't write through hardlinks when copying package files (#35735) - fix(install): make setup cache packages hash deterministic (#35825) - fix(install): resolve lifecycle script dependency bins against the hoisted layout (#35762) - fix(install): support uninstalling multiple global packages (#29352) - fix(lint): don't error on non-analyzable package exports like CSS files (#35732) - fix(lint): include config file in workspace member invalid version error (#35759) - fix(lsp): fix CPU busy loop by creating tokio runtime before JsRuntime in TSC thread (#35595) - fix(node/fs): implement followSymlinks option for fs.glob() (#35524) - fix(npm): don't re-fetch packuments on every run when registry has no time data (#35834) - fix(npm): don't retain full npm `exports` value + fix `--watch` memory leak (#35677) - fix(npm): widen node_modules lock staleness margin to avoid false preemption (#35806) - fix(permissions): split comma-separated paths in --ignore-read (#35661) - fix(test): run Node-API finalizers at test worker shutdown (#35695) - fix(watch): accept watch paths in fmt/lint/bench --watch (#35720) - fix(watch): execute preload modules under --watch (#35792) - fix(watch): terminate on Ctrl+C while blocked in synchronous code (#35826) - fix: enable rusqlite "fallible_uint" feature in workspace deps (#35681) - perf(config): literal-suffix reject and prune irrelevant globs per base (#35688) - perf(core): defer residual lazy source registration (#35731) - perf(ext/fetch): stream wasm bytes to the compiler from Rust (#35704) - perf(ext/node): remove per-chunk copying on TLSWrap data paths (#35705) - perf(ext/node): zero-copy async Buffer writes on the stream_wrap path (#35780) - perf(ext/web): identity pipeThrough writable bypass (#35799) - perf(ext/web): persistent pump for the generic pipeTo loop (#35813) - perf(ext/web): pump readableStreamCollectIntoUint8Array with a persistent read request (#35790) - perf(ext/web): reduce per-chunk allocations on stream read and tee paths (#35786) - perf(ext/web): reduce per-chunk overhead in Web Streams (#35773) - perf(ext/web): run synchronous pull completion without a microtask hop (#35788) - perf(ext/web): shared underlying-source algorithms, hoist resource-bridge read request (#35810) - perf(ext/web): sync fast path for ReadableStream async iterator next() (#35842) - perf(ext/web): synchronous transform fast path for TransformStream (#35844) - perf(npm): index packuments with SIMD JSON scanner (#35698) - perf(streams): offload resource-backed pipeTo to Rust via op_pipe (#35689) - perf(workers): optimize message passing (#35110) - perf(workers): return raw buffer from receive ops for no-transferable messages (#35756) - perf: use V8 native queueMicrotask instead of op (#35787)