## denoland/deno — v2.8.3…v2.9.0

_198+ commits._

### Features
- **feat(npm): publishing-trust ranking and no-downgrade trust policy (#34927)** (702cafb)
- **feat: enable default minimum dependency age (#35458)** (90d901d)
- **feat(desktop): autodetect Vite framework (#35470)** (2c7612d)
- **feat(http): disable Deno.serve automatic compression by default (#35486)** (57f4d00)
- **feat(fmt): add sortNamedImports and sortNamedExports options (#33313)** (e16ad56)
- **feat(npm): install jsr deps into node_modules via npm-compat registry (#35029)** (552fd06)
- **feat(ext/web): web locks api (#31166)** (741f4df)
- **feat(task): input-based caching with files/output/env (#34509)** (72497f3)
- **feat(lsp): add inferred type request (#35099)** (28a535f)
- **feat(cli): add `deno watch` subcommand (#35301)** (cfddb71)
- **feat(http): allow disabling serve compression (#35253)** (3c3a651)
- **feat(compile): persist Web Storage/KV in a per-app data directory (#34618)** (fd41ccc)
- **feat(cli): auto-migrate pnpm-workspace.yaml on resolution failure (#34993)** (dbcd1a9)
- **feat: add "preferPackageJson" deno.json setting (#35392)** (bc6e3cb)
- **feat(fmt): infer config from .editorconfig (#34071)** (969f8cd)
- **feat(desktop): default UI backend to webview (#35442)** (a4d902c)
- **feat(cli): add deno list subcommand to list declared dependencies (#34972)** (755552e)
- **feat(test): add --changed and --related flags to deno test (#35199)** (be1723a)
- **feat(desktop): --compress for self-extracting app bundles (#35420)** (27a90a3)
- **feat(desktop): add Windows .msi installer output format (#35378)** (222d30d)
- **feat(install): seed deno.lock from bun.lock (#35394)** (1a62c3c)
- **feat(test): built-in snapshot testing via t.assertSnapshot (#35139)** (2ac9a90)
- **feat(ext/node): implement node:test mock.module (#35329)** (e38a472)
- **feat(install): seed deno.lock from yarn.lock (#35350)** (2812d6e)
- **feat(desktop): add Linux .deb and .rpm installer output formats (#35296)** (818af9c)
- **feat(task): add --jobs/--concurrency flag to deno task (#35318)** (b95c621)
- **feat: `deno remove --global` as alias for `deno uninstall --global` (#35327)** (2c40806)
- **feat(install): seed deno.lock from pnpm-lock.yaml (#35346)** (678e1ae)
- **feat(install): seed deno.lock from package-lock.json (#35330)** (150d784)
- **feat(task): add --if-present flag to deno task (#35315)** (846bc88)
- **feat(task): set npm_execpath, npm_node_execpath and npm_command for package.json scripts (#35317)** (b585efb)
- **feat(ext/node): implement node:test mock.timers (#33946)** (42cd23e)
- **feat(install): warn on package.json engines mismatch (#34225)** (b40113d)
- **feat(coverage): add configurable coverage thresholds (#35056)** (f8be21c)
- **feat(cli): provide a `node` on PATH when Node.js is not installed (#34969)** (f2f8666)
- **feat(napi): implement Node-API version 10 (#35270)** (7b5aa7c)
- **feat(ext/net): implement Happy Eyeballs for `Deno.connect` and `Deno.connectTls` (#31726)** (99a06b5)
- **feat(node): bump reported process.version to v26.3.0 (#34747)** (b21d5e2)
- **feat(test): add retry and repeats options to Deno.test (#35053)** (df9398d)
- **feat: `deno desktop` subcommand (#33441)** (8398162)
- **feat(runtime): add request_builder_hook for fetch token and cdn-loop headers (#35088)** (b4a5cdc)
- **feat(cli): add `deno link` and `deno unlink` subcommands (#34359)** (d39e189)
- **feat(test): add --shard flag to split a test run across machines (#35057)** (3afd027)
- **feat: add stable --unsafe-proto flag (#34738)** (1e5125b)
- **feat: support `ignore` option in `Deno.watchFs` (#31582)** (2fd0493)

### Fixes
- **fix(deploy): use JSR latest for deploy CLI (#35493)** (2894458)
- **fix(ext/node): avoid panic when vm.SourceTextModule uses import.meta (#35375)** (9eeca7b)
- **fix(lsp): report TS2307 for unresolved imports in .d.ts entrypoints (#35469)** (27a0882)
- **fix(ext/node): support AbortSignal.timeout in node:test mock.timers (#35474)** (5317e3c)
- **fix(ext/crypto): pad JWK to multiple of 8 bytes for AES-KW wrap (#35475)** (4068b5b)
- **fix(ext/node): implement process.resourceUsage() (#35468)** (7ba7023)
- **fix(ext/node): implement t.assert.fileSnapshot for node:test (#35478)** (446902a)
- **fix(desktop): add macOS desktop Info.plist keys (#35484)** (caf8824)
- **fix(desktop): use native Wayland instead of XWayland on Wayland systems (#35485)** (75af360)
- **fix: Headers inspect for duplicate Set-Cookie values (#35461)** (04ac9f1)
- **fix(node): expose lazy console stdio streams (`console._stdout`/`_stderr`) (#35488)** (16254ac)
- **fix(ext/http): apply automatic compression for zero-arg serve handlers (#35490)** (250b584)
- **fix(desktop): add Bluetooth usage descriptions to macOS Info.plist (#35472)** (3f7e0e9)
- **fix(core): don't cache WebIDL sequence keys in thread-local v8::Eternal (#35462)** (8509ae7)
- **perf(workers): incremental message-passing cleanups (#35108)** (70ac96e)
- **fix(ext/http): close active WebSockets on Deno.serve shutdown (#35105)** (133cef3)
- **fix(publish): continue publishing workspace after a package fails (#35133)** (103ad49)
- **fix(ext/kv): validate remote KV URL when opening the connection (#35106)** (9bb79b1)
- **fix(test): ignorelist leaks from sanitizer-ignoring tests (#35005)** (9a7b580)
- **fix(lsp): honor --env-file from deno.json `test` task in test runner (#34905)** (0a89dad)
- **fix(runtime): capture blob worker roots before revocation (#35128)** (118b787)
- **fix(desktop): hide bundled libc++ symbols so the desktop runtime can be dlopen'd on Linux (#35424)** (df018b9)
- **fix(ext/node): forward permissions when spawning deno with subcommand args (#35443)** (a72c413)
- **fix(core): always register isolate to prevent silent foreground task drop (#35408)** (aa90115)
- **fix(ext/node): initialize named stdio exports lazily (#35428)** (303871d)
- **fix(ext/crypto): allow deriving AES-OCB keys (#35426)** (9d5d449)
- **fix(desktop): Wayland support for CEF and webview backends (#35425)** (faa2dd2)
- **fix(ext/node): import attributes and custom module types in registerHooks ESM hooks (#35028)** (77f9001)
- **fix(core): unwrap global exports in Wasm ESM integration (#34912)** (f3acb84)
- **fix(pack): include assets matched by publish.include in the tarball (#35331)** (893d85b)
- **fix(node/test): route nested top-level test() to a subtest (#35406)** (a6f2917)
- **perf(macos): enable chained fixups to cut pre-main startup (~0.8ms) (#35409)** (f0cdcd8)
- **fix(coverage): merge coverage for modules loaded with different hash/search params (#35354)** (e8a9000)
- **fix(ext/node): fix `node:test` hook ordering and error handling (#35393)** (9855054)
- **fix(pack): surface slow type diagnostics (#35379)** (0b96ea9)
- **fix(test): skip invalid doctest import bindings (#35382)** (e5f6a9b)
- **fix(ext/node): avoid panic deserializing empty buffers over child_process IPC (#35340)** (5967471)
- **fix(test/node): mark test-worker-fshandles-open-close-on-termination as flaky (#35387)** (ed4b0b6)
- **fix(npm): symlink workspace npm members into root node_modules by name (#35383)** (717715a)
- **fix(node): propagate source thread id to `process` `workerMessage` event (#35374)** (da7c5a8)
- **fix(install): seed pnpm workspace members and catalog deps (#35376)** (dcfb5ed)
- **perf(runtime): lazy-load node:buffer and node:timers globals (#35373)** (0fa73d7)
- **perf: lazy-load OSX frameworks with `lzld` (#35341)** (80bc12f)
- **fix(update): refetch npm metadata so stale cache doesn't hide newer versions (#35380)** (73ba7ce)
- **perf: V8 code cache for residual lazy-loaded ESM modules (#35338)** (7b73526)
- **fix(tests): skip npm/playwright_compat on windows-aarch64 (#35358)** (32fbf2c)
- **fix(runtime): make Deno.test.* sub-methods no-op under `deno run` (#35344)** (bb74540)
- **perf(snapshot): guard against lazy modules leaking into eager snapshot (#35332)** (dbffba8)
- **perf: gate eager node bootstrap to node workers (#35337)** (1e9ce15)
- **fix(jupyter): report cell errors instead of failing silently (#35328)** (3568da2)
- **perf: startup time (22ms -> 15ms) (#34450)** (7b54748)
- **fix(resolver): better hint when importing a linked package by the wrong name (#35319)** (53caf04)
- **fix(ext/node): fail node:test on unhandled rejection and enforce timeout (#35297)** (05f553e)
- **fix(ext/signals): build windows-sys only on Windows (#35283)** (754ec19)
- **fix(ext/net): cancel in-flight reads when closing TCP/Unix/Vsock streams (#35294)** (c72a8a9)
- **perf(core): reduce snapshotted cppgc op member templates (#35298)** (455f44b)
- **fix(ext/node): don't apply requestTimeout to active streaming responses (#35291)** (576c38f)
- **fix(ext/node): support HTTP/2 on the DENO_SERVE_ADDRESS override listener (#35089)** (ab81178)
- **fix(serve): exit cleanly on SIGTERM/SIGINT in deno serve (#32862)** (bf4017d)
- **fix(npm): don't apply import map to npm bin main module (#35097)** (a249752)
- **fix(test): use `#` instead of `$` as the doc test virtual file sigil (#35095)** (55f2eee)
- **fix(ext/node): stop coloring non-TTY streams in `util.styleText` (#35236)** (bfc32bd)
- **fix(install): resolve package.json dependencies in global install (#35135)** (7479822)
- **fix(core): preserve custom .stack getters in error/test formatter (#35246)** (932bd1e)
- **fix(upgrade): stream zstd delta patch to avoid 2GiB OOM (#35284)** (e19228d)
- **fix(ext/net): set transport on address for TlsListener (#35258)** (cc733e3)
- **fix(ext/node): single source of truth for emulated Node version (#35273)** (82e8ca0)
- **fix(lsp): include tsconfig roots in script names (#34136)** (792bea4)
- **fix(ext/node): check --allow-net for proxied request target in node:http(s) (#35241)** (2d710e6)
- **fix(npm): slim cached full packument when minimumDependencyAge is set (#35285)** (adb7a2b)
- **fix(permissions): don't require --allow-run for process.kill on self (#34382)** (039bcdc)
- **fix(desktop): correct libdenort unpack path with non-executable extension (#35267)** (32a1447)
- **perf: startup profiling instrumentation + clap fast-path (#35263)** (ef99209)
- **fix(task): set npm lifecycle env vars when running package.json scripts (#35252)** (1340dc5)
- **perf(snapshot): minify snapshot sources (#35183)** (37aa346)
- **fix(ext/node): preserve AsyncLocalStorage context across node:net callbacks (#35237)** (e602dfe)
- **fix(ext/node): keep dns.lookup permission token internal (#35224)** (c3d7c51)
- **fix(ext/fs): truncate should not follow a terminal symlink (#35239)** (bb751c7)
- **fix(runtime): suggest --unstable-unsafe-proto after __proto__ access (#35192)** (cffc8d7)
- **fix(npm): make peer dependency warning actionable and show importers (#35242)** (2420701)
- **fix(ext/node): restore Node binding signature for zlib write/writeSync (#35238)** (0edb72e)
- **fix(ext/fetch): require --allow-net for Unix proxy in createHttpClient (#35231)** (75094e8)
- **fix(ext/node): allow registerHooks with no resolve or load hook (#35235)** (78ffcf0)

### Backend
- **2.9.0 (#35502)** (94d375d)

### Tests
- **test: bound npm/playwright_compat so a wedged step fails fast (#35396)** (ae375f8)

### Docs
- **docs: consolidate Deno.bundle reference category (#35342)** (4c74594)
- **docs: improve JSDoc for Deno namespace types from docs feedback (#35326)** (8eb1c1c)
- **docs(cli): clarify install --node-modules-dir, --dev, --reload, --check help (#35325)** (0cb6844)
- **docs(ext/net): clarify Deno.TcpConn.setNoDelay Nagle's algorithm wording (#35324)** (cb3a529)
- **docs: fix dead MDN link to Body interface (#35266)** (67057f9)
- **docs: update Chocolatey install link to community.chocolatey.org (#35282)** (d32108f)

### Chore
- **chore: bump libsui to 0.16.0 (#35467)** (ab8c254)
- **chore: add tests for JSDoc @event, @fires, @emits, @listens (#34688)** (0e13f2c)
- **build: add support for loong64 and ppc64 (#35410)** (1de2b16)
- **chore(tests): bump npm/playwright test fixture to 1.60.0 (#35405)** (74d1313)
- **refactor: add the zero-cost CLI argument parser engine (#35334)** (bf3e0bc)
- **refactor(core): route residual lazy_loaded_js code cache through ModuleLoader (#35335)** (fb197b5)
- **refactor: extract CLI flag types into deno_cli_parser crate (#35333)** (85b4cb5)
- **chore: bump node_compat test suite to Node.js 26.3.0 (#34746)** (b843651)
- **refactor(runtime): allow disabling the OffscreenCanvas global via env var (#35287)** (52962aa)
- **refactor(resolver): allow disabling verbatimModuleSyntax via env var (#35288)** (d5d3815)
- **refactor(ext/fetch): check net deny list against connected peer addr (#34418)** (e4444d5)
- **chore: deprecate no-op --unstable-node-globals flag (#35278)** (6516647)
- **refactor(cli): restrict DENO_UNSTABLE_CONTROL_SOCK to local transports (#35276)** (9794b4e)
- **chore(tools): make lint.js work in jj checkouts (#35255)** (a8fb3a3)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/denoland/deno?utm_source=github-action)._