Immutable
release. Only release title and notes can be modified.
2.9.2 / 2026.07.08
- feat(desktop): autodetect React Router framework (#35557)
- feat(desktop): enable
--hmrfor 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 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/lzldsubmodule (#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
exportsvalue + fix--watchmemory 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)