Deno 2.9.7 is a patch release focused on regressions in 2.9.6, plus a handful of compatibility, security-hardening, and performance improvements. Most upgrades should be straightforward, with fixes spanning the CLI, Node compatibility, networking, desktop, and schema/tooling behavior.
What's new
-
deno auditnow uses the configured certificate settings for HTTPS requests, so it honorsDENO_CERT,DENO_TLS_CA_STORE, and existing certificate-error configuration. This fixes audit in environments that use a private CA, such as TLS-inspecting proxies, where other npm-related commands already worked. (#36728) -
JSR prerelease resolution in the LSP now matches CLI resolution for packages that have no stable release. A
*requirement can resolve to the newest prerelease only when there is no unyanked stable version at all, which avoids LSP/CLI mismatches on prerelease-only packages. (#36655) -
Deno’s JSON schemas now identify themselves with the maintained GitHub raw URLs, which fixes broken cross-file
$refresolution in editors. This also clears untrusted-schema warnings and restores newer lint rule lists in VS Code-based validation flows. (#36747, #36774) -
node:dnscompatibility got a broader pass: Deno now returns more Node-like resolver error codes, accepts string ports indns.lookupService(), and implementsResolver.setLocalAddress()validation/storage behavior instead of throwingERR_NOT_IMPLEMENTED. It also alignsdomainToASCIIhandling for Unicode, NUL-containing hostnames, and bracketed IPv6 input. (#36552) -
node:child_processnow allows repeated non-terminating signals likeSIGSTOPfollowed bySIGCONT, instead of treatingchild.killedas a one-shot block. It keeps IPC and stdio alive until the process or channel actually terminates, which restores Node-compatible signal handling for pause/resume and graceful-then-forceful shutdown flows. (#36644) -
Several core and Node-path performance improvements landed in this patch. Buffer hex encode/decode paths now use V8’s native
Uint8Array.prototype.toHexandsetFromHex, which substantially speeds upBufferhex operations, and core op/module metadata now keeps less per-realm/per-runtime state alive. (#36531, #36683, #36693, #36696)
Fixes
-
Fixed
deno completions bashgenerating invalid scripts with literal\n, and fixed zsh completions breaking on short flags like-h. (#36736, #36720) -
Restored valid parsing for granular
--allow-sysand--deny-sysdescriptors such asinspector,setuid, andumask. (#36753) -
Restored
deno bundle --sourcemapoptional-value behavior: bare--sourcemapworks again, attached values are validated, and the entrypoint is no longer swallowed. (#36723) -
Fixed
deno run -- script.ts,deno eval -- code, and similar entrypoint-style commands so--before the entrypoint works again. (#36835) -
Fixed duplicated passthrough arguments in
deno deployanddeno sandbox, which could make forwarded flags appear twice. (#36722) -
Fixed desktop regressions from 2.9.6 where the native window close button stopped working, and where
deno desktop --hmrcould crash on Linux with Vite 8 / Rolldown. (#36718) -
Fixed
deno transpile --declarationreporting type errors from Deno’s own bundled declaration assets when users explicitly setcompilerOptions.lib. (#36716) -
Fixed pnpm lockfile import against real-world lockfiles, including aliases, workspace/link dependencies, and pnpm v6 layout differences. (#36727)
-
Fixed HTTP cache authority encoding so hosts with underscores or explicit ports map to unambiguous cache paths; affected cache entries will be regenerated as needed. (#36356)
-
Fixed SQLite-backed
node:sqliteandDeno.openKvto refuse symlink database paths. (#36357) -
Fixed multicast group joins to check network permissions against the group address and bound port. (#36529)
-
Fixed Unix-socket permission handling on case-insensitive filesystems, and fixed cross-compiling
--allow-net=unix:/...from Windows by parsing POSIX-style socket paths correctly. (#36553, #36785) -
Fixed lockfile tarball validation for both install and npm resolution paths, including origin and registry-path checks. (#36473, #36430)
-
Fixed stale or incorrect behavior in tracing and caching: top-level
fetch/cronno longer leak active spans,Deno.servenow readstraceparentregardless of header-name case, and V8 code cache entries are keyed by full source contents to avoid stale cache reuse. (#36757, #36840, #36743) -
Fixed
CompressionStreamflushing on every write, which made compressed output chunk-dependent and larger than necessary. (#36744) -
Fixed several Node compatibility issues, including
AsyncLocalStorage.exit()context restoration,IncomingMessageheader map prototypes, repeated child process signals,process.resourceUsage().maxRSSon macOS, and prime-size validation in crypto APIs. (#36464, #36438, #36644, #36784, #36400)
Other notable changes
- Various internal cleanup, test updates, and CI/dependency maintenance also landed in this patch.
Contributors
@tomas-zijdemans, @xz-dev, @MLuc24, @r3wretrhy, @nathanwhit, @bartlomieju, @CertainLach, @taljeon, @cuishuang, @crowlKats, @hugojosefson, @ErikAbele, @pttydou, @lucacasonato, @piscisaureus, @melbinjp, @denobot