{"id":"src_C3EIjhObhF9qXL6wRqW7W","slug":"deno","name":"Deno","type":"github","url":"https://github.com/denoland/deno","orgId":"org_Q4HvEwlrMb0GlP7I8nu1t","productId":null,"productSlug":null,"org":{"id":"org_Q4HvEwlrMb0GlP7I8nu1t","slug":"deno","name":"Deno"},"isPrimary":false,"isHidden":false,"discovery":"curated","metadata":"{\"evaluatedMethod\":\"github\",\"evaluatedAt\":\"2026-04-07T23:42:12.015Z\",\"changelogDetectedAt\":\"2026-04-08T00:02:23.007Z\",\"wellKnownSweptAt\":\"2026-06-24T06:00:01.224Z\"}","notice":null,"kind":"tool","stars":107334,"starsFetchedAt":"2026-06-27T11:02:34.374Z","releaseCount":108,"releasesLast30Days":3,"avgReleasesPerWeek":0.8,"latestVersion":"v2.9.0","latestDate":"2026-06-25T15:00:40.000Z","changelogUrl":null,"hasChangelogFile":false,"lastFetchedAt":"2026-06-27T11:02:34.374Z","lastPolledAt":"2026-06-27T11:02:28.292Z","trackingSince":"2024-05-18T01:42:45.000Z","releases":[{"id":"rel_VKdUhQ4C-fy8vte9Xq1IY","version":"v2.9.0","type":"feature","title":"v2.9.0","summary":"Deno.serve automatic compression is now disabled by default (opt-in via --compress/compress config). This release also ships the `deno desktop` subcommand for building cross-platform desktop apps, plus `deno watch`, `deno link`/`unlink`, `deno list`, CSS module imports, Web Locks API, Happy Eyeballs for TCP/TLS connections, and built-in snapshot testing.","titleGenerated":"Deno v2.9.0 ships desktop subcommand, Deno.serve compression now opt-in","titleShort":"Deno.serve compression now opt-in; desktop apps land","content":"### 2.9.0 / 2026.06.25\r\n\r\nRead more: http://deno.com/blog/v2.9\r\n\r\n- feat(bundle): add --declaration flag to generate rolled-up .d.ts files\r\n  (#33838)\r\n- feat(cli): add `deno link` and `deno unlink` subcommands (#34359)\r\n- feat(cli): add `deno watch` subcommand (#35301)\r\n- feat(cli): add deno list subcommand to list declared dependencies (#34972)\r\n- feat(cli): auto-migrate pnpm-workspace.yaml on resolution failure (#34993)\r\n- feat(cli): provide a `node` on PATH when Node.js is not installed (#34969)\r\n- feat(compile): persist Web Storage/KV in a per-app data directory (#34618)\r\n- feat(coverage): add configurable coverage thresholds (#35056)\r\n- feat(desktop): --compress for self-extracting app bundles (#35420)\r\n- feat(desktop): add Linux .deb and .rpm installer output formats (#35296)\r\n- feat(desktop): add Windows .msi installer output format (#35378)\r\n- feat(desktop): autodetect Vite framework (#35470)\r\n- feat(desktop): default UI backend to webview (#35442)\r\n- feat(ext/crypto): support remaining modern WebCrypto algorithms (#35223)\r\n- feat(ext/http): deprecation warning for legacy request abort (#34397)\r\n- feat(ext/net): implement Happy Eyeballs for `Deno.connect` and\r\n  `Deno.connectTls` (#31726)\r\n- feat(ext/node): implement node:test mock.module (#35329)\r\n- feat(ext/node): implement node:test mock.timers (#33946)\r\n- feat(ext/web): web locks api (#31166)\r\n- feat(fmt): add sortNamedImports and sortNamedExports options (#33313)\r\n- feat(fmt): infer config from .editorconfig (#34071)\r\n- feat(fmt): use lax-css for CSS, SCSS, and Less (#35160)\r\n- feat(fmt): use lax-markup for HTML, XML, SVG, and components (#35174)\r\n- feat(fmt): use lax-sql for SQL formatting (#35161)\r\n- feat(http): allow disabling serve compression (#35253)\r\n- feat(http): disable Deno.serve automatic compression by default (#35486)\r\n- feat(install): create node_modules for workspace members (#34970)\r\n- feat(install): seed deno.lock from bun.lock (#35394)\r\n- feat(install): seed deno.lock from package-lock.json (#35330)\r\n- feat(install): seed deno.lock from pnpm-lock.yaml (#35346)\r\n- feat(install): seed deno.lock from yarn.lock (#35350)\r\n- feat(install): warn on package.json engines mismatch (#34225)\r\n- feat(lockfile): auto-resolve git merge conflicts in deno.lock (#34726)\r\n- feat(lsp): add inferred type request (#35099)\r\n- feat(napi): implement Node-API version 10 (#35270)\r\n- feat(node): bump reported process.version to v26.3.0 (#34747)\r\n- feat(npm): install jsr deps into node_modules via npm-compat registry (#35029)\r\n- feat(npm): publishing-trust ranking and no-downgrade trust policy (#34927)\r\n- feat(runtime): add request_builder_hook for fetch token and cdn-loop headers\r\n  (#35088)\r\n- feat(task): add --if-present flag to deno task (#35315)\r\n- feat(task): add --jobs/--concurrency flag to deno task (#35318)\r\n- feat(task): input-based caching with files/output/env (#34509)\r\n- feat(task): set npm_execpath, npm_node_execpath and npm_command for\r\n  package.json scripts (#35317)\r\n- feat(test): add --changed and --related flags to deno test (#35199)\r\n- feat(test): add --shard flag to split a test run across machines (#35057)\r\n- feat(test): add Deno.test.each for parameterized tests (#34938)\r\n- feat(test): add retry and repeats options to Deno.test (#35053)\r\n- feat(test): built-in snapshot testing via t.assertSnapshot (#35139)\r\n- feat(test): show sub-millisecond test durations (#35200)\r\n- feat(unstable): CSS module imports (with { type: \"css\" }) (#35093)\r\n- feat: `deno desktop` subcommand (#33441)\r\n- feat: `deno remove --global` as alias for `deno uninstall --global` (#35327)\r\n- feat: add \"preferPackageJson\" deno.json setting (#35392)\r\n- feat: add stable --unsafe-proto flag (#34738)\r\n- feat: enable default minimum dependency age (#35458)\r\n- feat: stabilize \"links\" field in deno.json (#34996)\r\n- feat: stabilize bare node built-in resolution (#33316)\r\n- feat: support `ignore` option in `Deno.watchFs` (#31582)\r\n- feat: support navigator.userAgentData (#34743)\r\n- fix(check): treat npm .d.ts as CJS based on package.json (#35166)\r\n- fix(core): always register isolate to prevent silent foreground task drop\r\n  (#35408)\r\n- fix(core): don't cache WebIDL sequence keys in thread-local v8::Eternal\r\n  (#35462)\r\n- fix(core): handle async op promise id wraparound (#35126)\r\n- fix(core): make uv_compat ready queues thread-safe (#35175)\r\n- fix(core): preserve custom .stack getters in error/test formatter (#35246)\r\n- fix(core): unwrap global exports in Wasm ESM integration (#34912)\r\n- fix(coverage): don't panic in summary reporter without a common root (#35211)\r\n- fix(coverage): merge coverage for modules loaded with different hash/search\r\n  params (#35354)\r\n- fix(deploy): use JSR latest for deploy CLI (#35493)\r\n- fix(desktop): Wayland support for CEF and webview backends (#35425)\r\n- fix(desktop): add Bluetooth usage descriptions to macOS Info.plist (#35472)\r\n- fix(desktop): add macOS desktop Info.plist keys (#35484)\r\n- fix(desktop): correct libdenort unpack path with non-executable extension\r\n  (#35267)\r\n- fix(desktop): hide bundled libc++ symbols so the desktop runtime can be\r\n  dlopen'd on Linux (#35424)\r\n- fix(desktop): use native Wayland instead of XWayland on Wayland systems\r\n  (#35485)\r\n- fix(ext/crypto): allow deriving AES-OCB keys (#35426)\r\n- fix(ext/crypto): clamp X448 scalar per RFC 7748 (#35157)\r\n- fix(ext/crypto): pad JWK to multiple of 8 bytes for AES-KW wrap (#35475)\r\n- fix(ext/fetch): keep content-encoding and content-length on decompressed\r\n  responses (#35124)\r\n- fix(ext/fetch): require --allow-net for Unix proxy in createHttpClient\r\n  (#35231)\r\n- fix(ext/fs): truncate should not follow a terminal symlink (#35239)\r\n- fix(ext/http): apply automatic compression for zero-arg serve handlers\r\n  (#35490)\r\n- fix(ext/http): close active WebSockets on Deno.serve shutdown (#35105)\r\n- fix(ext/kv): validate remote KV URL when opening the connection (#35106)\r\n- fix(ext/napi): restore Explicit microtask policy in napi_resolve_deferred\r\n  (#35212)\r\n- fix(ext/net): cancel in-flight reads when closing TCP/Unix/Vsock streams\r\n  (#35294)\r\n- fix(ext/net): set transport on address for TlsListener (#35258)\r\n- fix(ext/node): allow registerHooks with no resolve or load hook (#35235)\r\n- fix(ext/node): avoid panic deserializing empty buffers over child_process IPC\r\n  (#35340)\r\n- fix(ext/node): avoid panic when vm.SourceTextModule uses import.meta (#35375)\r\n- fix(ext/node): check --allow-net for proxied request target in node:http(s)\r\n  (#35241)\r\n- fix(ext/node): don't apply requestTimeout to active streaming responses\r\n  (#35291)\r\n- fix(ext/node): fail node:test on unhandled rejection and enforce timeout\r\n  (#35297)\r\n- fix(ext/node): fix `node:test` hook ordering and error handling (#35393)\r\n- fix(ext/node): forward permissions when spawning deno with subcommand args\r\n  (#35443)\r\n- fix(ext/node): implement process.resourceUsage() (#35468)\r\n- fix(ext/node): implement t.assert.fileSnapshot for node:test (#35478)\r\n- fix(ext/node): implement test.TestContext.runOnly (#35158)\r\n- fix(ext/node): implement worker_threads.isInternalThread (#35234)\r\n- fix(ext/node): import attributes and custom module types in registerHooks ESM\r\n  hooks (#35028)\r\n- fix(ext/node): initialize named stdio exports lazily (#35428)\r\n- fix(ext/node): keep dns.lookup permission token internal (#35224)\r\n- fix(ext/node): make registerHooks resolve hook work for nested imports\r\n  (#35169)\r\n- fix(ext/node): preserve AsyncLocalStorage context across node:net callbacks\r\n  (#35237)\r\n- fix(ext/node): restore Node binding signature for zlib write/writeSync\r\n  (#35238)\r\n- fix(ext/node): single source of truth for emulated Node version (#35273)\r\n- fix(ext/node): stop coloring non-TTY streams in `util.styleText` (#35236)\r\n- fix(ext/node): support AbortSignal.timeout in node:test mock.timers (#35474)\r\n- fix(ext/node): support HTTP/2 on the DENO_SERVE_ADDRESS override listener\r\n  (#35089)\r\n- fix(ext/node): trace v8 serializer delegate (#35132)\r\n- fix(ext/signals): build windows-sys only on Windows (#35283)\r\n- fix(install): remove stale root node_modules symlink on deno remove (#35137)\r\n- fix(install): resolve package.json dependencies in global install (#35135)\r\n- fix(install): seed pnpm workspace members and catalog deps (#35376)\r\n- fix(jupyter): report cell errors instead of failing silently (#35328)\r\n- fix(lsp): honor --env-file from deno.json `test` task in test runner (#34905)\r\n- fix(lsp): include tsconfig roots in script names (#34136)\r\n- fix(lsp): make requests work for files opened from node_modules (#35176)\r\n- fix(lsp): report TS2307 for unresolved imports in .d.ts entrypoints (#35469)\r\n- fix(node): expose lazy console stdio streams (`console._stdout`/`_stderr`)\r\n  (#35488)\r\n- fix(node): propagate source thread id to `process` `workerMessage` event\r\n  (#35374)\r\n- fix(node/test): route nested top-level test() to a subtest (#35406)\r\n- fix(npm): avoid spurious npm re-resolution that fails under --cached-only\r\n  (#35051)\r\n- fix(npm): don't apply import map to npm bin main module (#35097)\r\n- fix(npm): make peer dependency warning actionable and show importers (#35242)\r\n- fix(npm): slim cached full packument when minimumDependencyAge is set (#35285)\r\n- fix(npm): support `catalog:` protocol in deno.json imports (#35168)\r\n- fix(npm): symlink workspace npm members into root node_modules by name\r\n  (#35383)\r\n- fix(pack): include assets matched by publish.include in the tarball (#35331)\r\n- fix(pack): surface slow type diagnostics (#35379)\r\n- fix(permissions): don't require --allow-run for process.kill on self (#34382)\r\n- fix(permissions): require --allow-net for Unix domain socket ops (#34395)\r\n- fix(permissions): treat Windows `\\\\?\\` verbatim paths as equivalent (#35096)\r\n- fix(publish): continue publishing workspace after a package fails (#35133)\r\n- fix(publish): skip already-published versions before type checking (#35134)\r\n- fix(repl): highlight regex literals correctly (#35103)\r\n- fix(resolver): better hint when importing a linked package by the wrong name\r\n  (#35319)\r\n- fix(resolver): resolve linked packages by bare specifier (#35228)\r\n- fix(runtime): capture blob worker roots before revocation (#35128)\r\n- fix(runtime): don't silently lose Deno.watchFs events (#35122)\r\n- fix(runtime): make Deno.test.* sub-methods no-op under `deno run` (#35344)\r\n- fix(runtime): suggest --unstable-unsafe-proto after **proto** access (#35192)\r\n- fix(serve): exit cleanly on SIGTERM/SIGINT in deno serve (#32862)\r\n- fix(serve): shut down old workers on watcher restart (#35136)\r\n- fix(serve): update request_signal_streaming spec for legacy abort warning\r\n  (#35193)\r\n- fix(task): set npm lifecycle env vars when running package.json scripts\r\n  (#35252)\r\n- fix(test): ignorelist leaks from sanitizer-ignoring tests (#35005)\r\n- fix(test): skip invalid doctest import bindings (#35382)\r\n- fix(test/node): mark test-worker-fshandles-open-close-on-termination as flaky\r\n  (#35387)\r\n- fix(tests): skip npm/playwright_compat on windows-aarch64 (#35358)\r\n- fix(update): refetch npm metadata so stale cache doesn't hide newer versions\r\n  (#35380)\r\n- fix(upgrade): stream zstd delta patch to avoid 2GiB OOM (#35284)\r\n- fix: Headers inspect for duplicate Set-Cookie values (#35461)\r\n- fix: accept U+30FB KATAKANA MIDDLE DOT in identifiers (#35147)\r\n- fix: cache 404 responses for remote modules (#35138)\r\n- perf(core): reduce snapshotted cppgc op member templates (#35298)\r\n- perf(core): skip source ASCII checks in release runtime setup (#35186)\r\n- perf(ext/crypto): port WebCrypto from JS to Rust (#34966)\r\n- perf(ext/web): port console/inspect to Rust (cppgc object wrap) (#35087)\r\n- perf(macos): enable chained fixups to cut pre-main startup (~0.8ms) (#35409)\r\n- perf(runtime): lazy-load node:buffer and node:timers globals (#35373)\r\n- perf(snapshot): guard against lazy modules leaking into eager snapshot\r\n  (#35332)\r\n- perf(snapshot): minify snapshot sources (#35183)\r\n- perf(workers): incremental message-passing cleanups (#35108)\r\n- perf: V8 code cache for residual lazy-loaded ESM modules (#35338)\r\n- perf: gate eager node bootstrap to node workers (#35337)\r\n- perf: lazy-load OSX frameworks with `lzld` (#35341)\r\n- perf: startup profiling instrumentation + clap fast-path (#35263)\r\n- perf: startup time (22ms -> 15ms) (#34450)","publishedAt":"2026-06-25T15:00:40.000Z","fetchedAt":"2026-06-25T19:02:40.407Z","url":"https://github.com/denoland/deno/releases/tag/v2.9.0","media":[],"coverageCount":0},{"id":"rel_7LB7kq-cIVG6z6BwQlsTM","version":"v2.8.3","type":"feature","title":"v2.8.3","summary":"Deno v2.8.3 introduces watch mode for `deno compile` and supports glob patterns in `deno.json` links. New features also include diagnostic reporting for import map files and ML-DSA JWK import/export in `ext/crypto`. The release also addresses numerous issues across the CLI, bundling, fetching, and Node.js compatibility.","titleGenerated":"Deno v2.8.3 adds watch mode to compile and support for globs in links","titleShort":"Compile gets watch mode; globs supported in links","content":"### 2.8.3 / 2026.06.11\r\n\r\n- feat(cli): suggest DENO_TLS_CA_STORE on untrusted TLS certificate (#34756)\r\n- feat(cli): support --env-file in dependency and registry subcommands (#34843)\r\n- feat(compile): support watch mode (#34860)\r\n- feat(config): support globs in links (#34849)\r\n- feat(ext/crypto): implement SubtleCrypto.supports() static method (#34903)\r\n- feat(ext/crypto): support ML-DSA JWK import/export (#34914)\r\n- feat(ext/fetch): support `priority` in `RequestInit` (#34716)\r\n- feat(ext/node): auto-instrument node:http2 with OpenTelemetry (#34510)\r\n- feat(ext/node): notify control socket when node:http server starts serving\r\n  (#34949)\r\n- feat(ext/telemetry): honor OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT (#34787)\r\n- feat(ext/telemetry): honor OTEL_SPAN_EVENT_COUNT_LIMIT (#34795)\r\n- feat(ext/telemetry): support OTEL_TRACES_SAMPLER (#34764)\r\n- feat(fmt): add JSON trailing comma config (#33383)\r\n- feat(info): add localPath to npm packages in `deno info --json` (#34806)\r\n- feat(info): support --minimum-dependency-age flag (#34762)\r\n- feat(lsp): add \"Debug\" code lens for test steps (#34742)\r\n- feat(lsp): add Deno.test ignore and only code actions (#34861)\r\n- feat(lsp): diagnose import map files (#34864)\r\n- feat(lsp): provide hover info for import map resolutions (#34854)\r\n- feat(lsp): report `deno doc --lint` diagnostics (#34733)\r\n- feat(lsp): show no-slow-types diagnostics for JSR packages (#34740)\r\n- feat(outdated): warn about packages skipped due to registry errors (#34974)\r\n- feat(test): forward shebang permissions into `deno test --doc` (#35052)\r\n- feat(workspace): auto-discover external deno.json import maps (#34803)\r\n- feat(x): add deno x --ignore-scripts (#34952)\r\n- feat: `bump-version -c` to handle deno.json + package.json in same dir\r\n  (#34770)\r\n- fix(add): accept npm version ranges on the command line (#34799)\r\n- fix(bundle): apply node-style CJS interop on all platforms (#34939)\r\n- fix(bundle): don't panic when esbuild binary is busy or unavailable (#34845)\r\n- fix(bundle): instantiate .wasm imports instead of emitting raw bytes (#34923)\r\n- fix(bundle): rename sourcemap for HTML entrypoints (#34901)\r\n- fix(bundle): respect `--check` and run the type checker (#33514)\r\n- fix(cache): retry locked cache database instead of deleting it (#34873)\r\n- fix(check): honor ts suppressions for unresolved imports (#34163)\r\n- fix(check): ignore doc comment dynamic imports (#34888)\r\n- fix(check): surface unresolved imports in .d.ts entrypoints (#34168)\r\n- fix(check): treat .d.ts in ESM-supporting npm packages as ESM (#34613)\r\n- fix(clean): keep cleaning when cache files are locked and report holders\r\n  (#34946)\r\n- fix(clean): support `deno clean --dry-run` without --except (#34846)\r\n- fix(cli): accept allow-import for deno add (#35019)\r\n- fix(cli): check worker's own permissions for dynamic asset imports (#34707)\r\n- fix(cli): collect re-exported names for `deno test --doc` injection (#33511)\r\n- fix(cli): don't let --env-file set Deno's own runtime control vars (#35032)\r\n- fix(cli): don't suggest non-existent subcommand-flag combinations (#34810)\r\n- fix(cli): generate type-only doc-test imports under verbatimModuleSyntax\r\n  (#33508)\r\n- fix(cli): include the typed name in unrecognized subcommand error (#34882)\r\n- fix(cli): strip trailing CR from args so CRLF shebangs work (#34968)\r\n- fix(compile): prune managed npm snapshot to graph-reachable packages (#34741)\r\n- fix(compile): resolve bare npm imports in --bundle worker sources (#34967)\r\n- fix(compile): run forked child's module instead of entrypoint (#34687)\r\n- fix(compile): support fs.fstatSync on vfs (#34892)\r\n- fix(console): %c colors with same red component as previous color (#34784)\r\n- fix(core): don't set ERR_MODULE_NOT_FOUND code on module linking errors\r\n  (#34800)\r\n- fix(core): externalize lazy loaded sources (#34936)\r\n- fix(core): silence too_many_arguments on Callable trait method (#33475)\r\n- fix(core): use isolate_unchecked accessors for fast `&v8::Isolate` args\r\n  (#33474)\r\n- fix(coverage): exclude linked/patched packages from coverage report (#34834)\r\n- fix(coverage): improve HTML report PageSpeed score (#34980)\r\n- fix(dotenv): include underscore in unbraced variable names (#34797)\r\n- fix(ext/crypto): ChaCha20-Poly1305 uses raw-secret format and iv param\r\n  (#34915)\r\n- fix(ext/crypto): ML-KEM raw-seed, seed-form PKCS#8, and JWK (#34924)\r\n- fix(ext/crypto): align WebCrypto modern algorithms with the spec (#34941)\r\n- fix(ext/crypto): move getPublicKey to SubtleCrypto and validate usages\r\n  (#34913)\r\n- fix(ext/crypto): support raw-public format for existing asymmetric keys\r\n  (#34920)\r\n- fix(ext/crypto): use outputLength for SHAKE/cSHAKE/TurboSHAKE digests (#34911)\r\n- fix(ext/fetch): block requests to bad ports per Fetch Standard (#34863)\r\n- fix(ext/fetch): don't decompress empty body advertised as gzip/br (#34880)\r\n- fix(ext/fetch): only match multipart delimiter lines (#34587)\r\n- fix(ext/fetch): preserve empty multipart filenames (#35009)\r\n- fix(ext/ffi): accept Uint8Array<ArrayBufferLike> in FFI buffer types (#34999)\r\n- fix(ext/fs): clarify that Deno.symlink() needs unscoped permissions (#34991)\r\n- fix(ext/fs): report broken symlink read as NotFound, not FilesystemLoop\r\n  (#34833)\r\n- fix(ext/fs): stream Deno.readDir entries (#35130)\r\n- fix(ext/http): don't crash server on dead streaming-body resource (#34933)\r\n- fix(ext/http): include buffered request bytes in size hint (#34831)\r\n- fix(ext/http): join split request headers consistently (#35081)\r\n- fix(ext/http): prefer brotli for equal compression q-values (#35011)\r\n- fix(ext/http): surface errors thrown while streaming a Deno.serve body\r\n  (#35104)\r\n- fix(ext/io): cancel pending readable stream reads (#34986)\r\n- fix(ext/kv): update access_token error message to new deno deploy console\r\n  (#34918)\r\n- fix(ext/kv): validate batchSize and expireIn inputs (#34782)\r\n- fix(ext/net): handle missing port and path in listen and listenDatagram\r\n  (#31681)\r\n- fix(ext/node): accept non-canonical RSA SPKI keys (#34134)\r\n- fix(ext/node): accept scoped IPv6 interface in dgram addMembership (#34899)\r\n- fix(ext/node): bump emulated Node version to v24.15.0 (#34804)\r\n- fix(ext/node): clear nonblocking fd stdio for child pipes (#34962)\r\n- fix(ext/node): count forked child process sockets (#34096)\r\n- fix(ext/node): don't cache a pointer to the zlib result buffer (#35043)\r\n- fix(ext/node): don't expose Module.register stub (#34894)\r\n- fix(ext/node): enforce maxBuffer in child_process.spawnSync (#34053)\r\n- fix(ext/node): export runMain from node:module (#35065)\r\n- fix(ext/node): fix asciiSlice & ucs2Slice & hexSlice being too slow (#34525)\r\n- fix(ext/node): fix broken encoding validation in indexOfBuffer (#33393)\r\n- fix(ext/node): guard TCPWrap.open against adopting tracked fds (#35045)\r\n- fix(ext/node): guard sqlite authorizer reentrant replacement (#34983)\r\n- fix(ext/node): handle EMFILE in child_process.spawn and compound shell\r\n  commands (#33544)\r\n- fix(ext/node): implement mock.property() in node:test (#34959)\r\n- fix(ext/node): implement setKeepAlive on native TCPWrap (#34865)\r\n- fix(ext/node): implement url.fileURLToPathBuffer (#34883)\r\n- fix(ext/node): keep node:vm ContextifyContext wrapper alive with its context\r\n  (#35090)\r\n- fix(ext/node): keep sqlite iterator callbacks alive (#34982)\r\n- fix(ext/node): keep v8.serialize output readable by Node.js (#35118)\r\n- fix(ext/node): keep worker alive while holding a refed MessagePort (#34877)\r\n- fix(ext/node): match Node's UTF-8 replacement for invalid bytes in Buffer\r\n  decode (#34947)\r\n- fix(ext/node): match Node.js when dns.lookup hostname is falsy (#34887)\r\n- fix(ext/node): propagate nextLoad(newUrl) redirect to default loader (#35027)\r\n- fix(ext/node): read proxy env vars without --allow-env (#34807)\r\n- fix(ext/node): replay direct writes on stale http retry (#34992)\r\n- fix(ext/node): support ChildProcess.send with net.Server handles (#34948)\r\n- fix(ext/node): throw ERR_UNKNOWN_BUILTIN_MODULE for unknown node: builtins\r\n  (#34766)\r\n- fix(ext/node): trace v8 deserializer delegate (#34981)\r\n- fix(ext/node): transfer TCP handle ownership in http2 consumeStream (#35047)\r\n- fix(ext/node): unblock static module loads when registerHooks is active\r\n  (#35026)\r\n- fix(ext/node): wire ConnectionsList hooks so headersTimeout doesn't spuriously\r\n  fire (#34356)\r\n- fix(ext/node_crypto): support PBES2/AES-CBC bags in tls.createSecureContext\r\n  pfx (#34438)\r\n- fix(ext/os): don't expose invalid env var keys from Deno.env.toObject()\r\n  (#34711)\r\n- fix(ext/process): run shebang-less scripts via /bin/sh on ENOEXEC (#34945)\r\n- fix(ext/process): treat Windows kill on exited process as NotFound (#34889)\r\n- fix(ext/web): URL.createObjectURL throws ERR_INVALID_ARG_TYPE for non-Blob\r\n  args (#34878)\r\n- fix(ext/web): clearer error when a resource-backed stream is consumed after\r\n  close (#34964)\r\n- fix(ext/web): don't trip debugger on handled stream writer-release rejection\r\n  (#35100)\r\n- fix(ext/web): fire FileReader progress events as tasks (#34763)\r\n- fix(ext/web): friendlier URLPattern construction errors (#35102)\r\n- fix(ext/web): repair text_decoder_stream bench after BlobStoreTrait change\r\n  (#35044)\r\n- fix(ext/web): show state and supportsBYOB in ReadableStream inspect (#34932)\r\n- fix(ext/web): support SharedArrayBuffer over BroadcastChannel (#34961)\r\n- fix(ext/web): writableStreamForRid accepts any ArrayBufferView/ArrayBuffer\r\n  (#35020)\r\n- fix(ext/webgpu): bounds-check + view-aware setBindGroup Uint32Array fast path\r\n  (#33980)\r\n- fix(ext/webgpu): update published crate repository url (#33916)\r\n- fix(ext/websocket): send URL userinfo as Basic auth header (#34708)\r\n- fix(fmt): align singleBodyPosition schema values (#34304)\r\n- fix(fmt): pass newlineKind option to JSON and Markdown formatters (#32579)\r\n- fix(http): handle raw h1 serve regressions (#35049)\r\n- fix(info): normalize trailing spaces in file path args on Windows (#35008)\r\n- fix(inspector): attribute idle event-loop wait to (idle) in CPU profiles\r\n  (#35034)\r\n- fix(install): handle ETXTBSY when setting up node_modules (#33311)\r\n- fix(install): preserve workspace member resolution in global install (#34989)\r\n- fix(install): suppress peer dependency warnings for overridden packages\r\n  (#34935)\r\n- fix(jupyter): handle completion cursor_pos as Unicode codepoints (#35098)\r\n- fix(jupyter): verify HMAC signatures on incoming kernel messages (#34825)\r\n- fix(lint): helpful error for Deno.lint.runPlugin outside deno test (#35018)\r\n- fix(lint): name the offending plugin in lint plugin load errors (#35067)\r\n- fix(lockfile): write through deno.lock symlink instead of replacing it\r\n  (#34826)\r\n- fix(lsp): cache JSR type roots (#34886)\r\n- fix(lsp): evict on-disk documents from cache when deleted or changed (#34858)\r\n- fix(lsp): ignore relative import map remaps (#34856)\r\n- fix(lsp): prefer exact import map remaps (#34855)\r\n- fix(lsp): start rename after extract refactors (#34832)\r\n- fix(lsp): suggest import map aliases for remaps (#34857)\r\n- fix(lsp): update cache after workspace folder changes (#32823)\r\n- fix(net): preserve unix abstract socket paths (#34874)\r\n- fix(npm): resolve workspace members with prerelease versions (#34928)\r\n- fix(npm): run workspace package lifecycle scripts (#34615)\r\n- fix(npm): support workspace: dependencies with an alias in package.json\r\n  (#34990)\r\n- fix(ops): build fast-call errors without re-entering JS (#35042)\r\n- fix(outdated): include catalog dependencies in deno outdated/update (#34977)\r\n- fix(outdated): send npm Accept header when fetching package metadata (#35012)\r\n- fix(permissions): allow non-recursive reads/writes on ancestors of deny\r\n  (#34504)\r\n- fix(permissions): correct -A wording in raw-mode prompt message (#35070)\r\n- fix(permissions): don't hang prompt when stdin is in raw mode (#34457)\r\n- fix(permissions): run special-file guard for no-follow ops (#34393)\r\n- fix(publish): allow stable text imports (#34692)\r\n- fix(publish): catch banned triple slash directives anywhere in file during\r\n  dry-run (#35010)\r\n- fix(publish): detect circular workspace dependencies before authorization\r\n  (#34823)\r\n- fix(publish): ignore unused type parameter diagnostics from fast check\r\n  (#35017)\r\n- fix(publish): improve error reporting for JSR manifest verification (#34690)\r\n- fix(publish): preserve default export of `export *` re-exported module\r\n  (#34709)\r\n- fix(repl): print uncaught exceptions from timers at the prompt (#35002)\r\n- fix(repl): report descriptive syntax error instead of \"Unexpected token '<'\"\r\n  (#35016)\r\n- fix(repl): show tab completions for navigator.gpu (#35006)\r\n- fix(repl): treat trailing `.` as incomplete input (#35101)\r\n- fix(resolver): collapse redundant slashes in file specifiers (#34713)\r\n- fix(resolver): don't treat a linked deno.json package as an npm link (#34841)\r\n- fix(resolver): prefer deno jsx options over tsconfig (#34141)\r\n- fix(run): error instead of panicking when watch flags are used with stdin\r\n  (#34785)\r\n- fix(runtime): cancel prompt on esc (#35004)\r\n- fix(runtime): don't panic on missing SnapshotOptions when no snapshot (#34929)\r\n- fix(runtime): keep lazy Deno namespace APIs writable (#35050)\r\n- fix(runtime): serialize terminal permission prompts (#34821)\r\n- fix(runtime): show import location for unsupported import attributes (#34824)\r\n- fix(runtime): source map maybe cjs modules (#35013)\r\n- fix(serde_v8): add recursion depth limit to deserializer (#34984)\r\n- fix(serve): apply import map to main module in `deno serve --watch` (#34893)\r\n- fix(test): do not report \"only\" notice when a test fails on its own (#35063)\r\n- fix(test): handle escaped markdown code fences (#35125)\r\n- fix(test): skip markdown roots when building watcher graph (#35003)\r\n- fix(test): support blockquoted markdown doc tests (#34871)\r\n- fix(test): wait for worker termination before pending promise failures\r\n  (#35127)\r\n- fix(update): show version requirement in interactive picker (#34671)\r\n- fix(watch): detect newly created files in fmt/lint/test/bench --watch (#34828)\r\n- fix(watch): keep watcher alive when script calls Deno.exit() (#35021)\r\n- fix(watch): respect --watch-exclude in deno serve (#34847)\r\n- fix: ignore 0 value for OTEL_METRIC_EXPORT_INTERVAL (#35054)\r\n- fix: resolve global install import maps from original cwd (#34165)\r\n- fix: support --inspect family in NODE_OPTIONS (#34717)\r\n- fix: throw ERR_DIR_CLOSED on use-after-close in Dir (#34910)\r\n- perf(config): match glob paths relative to base (#35039)\r\n- perf(core): reduce native callback snapshot overhead (#35121)\r\n- perf(ext/fs): use file identity instead of canonicalize in copyFile same-path\r\n  guard (#34750)\r\n- perf(ext/http): add Deno-owned HTTP/1.1 serve path (#34446)\r\n- perf(ext/web): ASCII fast path for streaming TextDecoder.decode (#34299)\r\n- perf(ext/web): convert geometry.js from lazy_loaded_esm to lazy_loaded_js\r\n  (#34997)\r\n- perf(lsp): cache lint and doc diagnostics per document module (#34875)\r\n- perf(lsp): cache shared workspace data across members (#32476)","publishedAt":"2026-06-11T15:57:47.000Z","fetchedAt":"2026-06-11T20:02:53.309Z","url":"https://github.com/denoland/deno/releases/tag/v2.8.3","media":[],"coverageCount":0},{"id":"rel_-mlmnjNJ9tYFPS0Fn3K25","version":"v2.8.2","type":"feature","title":"v2.8.2","summary":"Added ML-DSA (FIPS 204) post-quantum signatures and ML-KEM (FIPS 203) post-quantum key encapsulation, plus ChaCha20-Poly1305, SHAKE, and SHA-3 HMAC support to the crypto API. Improved deno compile --bundle dependency resolution, scoping npm embeds to packages actually reached, and added --minify flag. Also fixed numerous bugs across compile, node compatibility, Jupyter kernel, LSP, and file I/O.","titleGenerated":"Deno v2.8.2 adds post-quantum cryptography and improves compile bundling","titleShort":"ML-DSA and ML-KEM post-quantum signatures; compile --bundle hardened","content":"### 2.8.2 / 2026.06.03\r\n\r\n- feat(compile): improve --bundle dependency resolution and add --minify\r\n  (#34536)\r\n- feat(compile): scope --bundle npm embed to packages actually reached (#34532)\r\n- feat(ext/crypto): add ChaCha20-Poly1305, SHAKE, cSHAKE, TurboSHAKE, SHA-3 HMAC\r\n  (#34417)\r\n- feat(ext/crypto): add ML-DSA (FIPS 204) post-quantum signatures (#34448)\r\n- feat(ext/crypto): implement ML-KEM (FIPS 203) post-quantum KEM (#34447)\r\n- feat(ext/node): env/global proxy support for node:http and node:https (#34257)\r\n- feat(ext/node): support DENO_SERVE_ADDRESS override in node:http servers\r\n  (#34662)\r\n- feat(jupyter): rewrite kernel in JS, drop zeromq/runtimelib deps (#34083)\r\n- feat(lsp): autocomplete jsr:/npm:/node: in deno.json(c) imports (#34724)\r\n- feat(publish): unfurl import specifiers in Wasm modules (#34549)\r\n- feat(task): support --env-file flag (#34508)\r\n- feat(task): support exclusion groups in task name wildcards (#34506)\r\n- feat(unstable): add --bundle flag to `deno compile` (#34527)\r\n- feat: bump deno_task_shell to 0.33.0 (#34642)\r\n- fix(add): handle version tags like `@latest` in `deno add` for JSR packages\r\n  (#32859)\r\n- fix(add): replace panic with error when deno.json discovery fails (#34517)\r\n- fix(bundle): skip decorator pass when module has no decorators (#34489)\r\n- fix(bundle): use node-style CJS interop for the Deno platform (#34533)\r\n- fix(cache): skip WAL journal mode on WSL-1 (#34499)\r\n- fix(cache_dir): EnsureCachedStrategy must surface cached redirects (#34563)\r\n- fix(check): make node:stream/web types alias the globals (#34606)\r\n- fix(check): resolve npm packages without types when type checking (#34551)\r\n- fix(cli): suppress bug-report banner on broken pipe print panics (#34552)\r\n- fix(cli/task): run recursive workspace tasks in parallel (#34512)\r\n- fix(compile): allow process.chdir() into the VFS (#34610)\r\n- fix(compile): bundle workers separately under --bundle (#34531)\r\n- fix(compile): cover CJS-deep imports under --bundle (#34534)\r\n- fix(compile): create code cache when importing JSON or Wasm modules (#34614)\r\n- fix(compile): detect svelte-adapter-deno build output (#34535)\r\n- fix(compile): don't surface graph errors for --include files (#34568)\r\n- fix(compile): embed workspace package.json files in the VFS (#34530)\r\n- fix(compile): enable ANSI colors on Windows in compiled binaries (#34701)\r\n- fix(compile): handle CJS and native addons in --bundle (#34529)\r\n- fix(compile): respect npm registry sub-paths when flattening node_modules\r\n  (#34575)\r\n- fix(compile): support workers loaded from blob URLs (#34574)\r\n- fix(compile): transpile TypeScript imported at runtime (#34616)\r\n- fix(config): hook up verbatimModuleSyntax for the emit pipeline (#34495)\r\n- fix(config): make config auto-discovery skip the same errors on every platform\r\n  (#34558)\r\n- fix(config): surface invalid \"exports\" map in linked/workspace packages\r\n  (#34473)\r\n- fix(config): warn instead of erroring when start dir is not a workspace member\r\n  (#34458)\r\n- fix(config): warn instead of erroring when workspace member dir is missing\r\n  (#34511)\r\n- fix(core): TLA hang on dyn import when async dep triggers lazy ESM load\r\n  (#34469)\r\n- fix(core): preserve WebAssembly streaming callback across new contexts\r\n  (#34679)\r\n- fix(crypto): correct X448 PKCS#8 handling (#34578)\r\n- fix(doc): don't lint private-type-ref for cross-package types (#34339)\r\n- fix(doc): handle non-ASCII doc lint diagnostics (#34626)\r\n- fix(ext/console): degrade gracefully when getKeys throws (#24980) (#34464)\r\n- fix(ext/fetch): implement missing Request properties (#34607)\r\n- fix(ext/fetch): preserve static request body length (#34546)\r\n- fix(ext/ffi): match V8 stack-arg layout in turbocall trampoline on Apple\r\n  silicon (#34561)\r\n- fix(ext/fs): error when copyFile source and destination are the same file\r\n  (#34718)\r\n- fix(ext/fs): retry without FILE_FLAG_BACKUP_SEMANTICS on Windows when driver\r\n  rejects it (#34686)\r\n- fix(ext/fs): surface non-UTF-8 file names from read_dir (#34623)\r\n- fix(ext/http): reject Response-like return from respondWith (#34589)\r\n- fix(ext/http): reject Response-like return from serve handler (#34416)\r\n- fix(ext/io): cancel pending FileResource reads on close (#34544)\r\n- fix(ext/napi): clear error for Windows addons that link against node.exe\r\n  (#34696)\r\n- fix(ext/napi): disallow JS execution during napi_new_instance (#34496)\r\n- fix(ext/napi): polyfill libuv thread + semaphore primitives (#34571)\r\n- fix(ext/napi): polyfill more libuv symbols from compat layer (#34488)\r\n- fix(ext/net): re-enable 0-RTT support in QUIC (#34520)\r\n- fix(ext/node): add module findPackageJSON export (#34597)\r\n- fix(ext/node): add node:test/reporters builtin (#34595)\r\n- fix(ext/node): add stripTypeScriptTypes export (#34594)\r\n- fix(ext/node): capture IPC handle eagerly to fix cluster send deadlock\r\n  (#34661)\r\n- fix(ext/node): cover node:module SourceMap export (#34591)\r\n- fix(ext/node): disable repl preview when a custom eval is supplied (#34498)\r\n- fix(ext/node): drop bogus Buffer.prototype._isBuffer marker (#34502)\r\n- fix(ext/node): export syncBuiltinESMExports from node:module (#34593)\r\n- fix(ext/node): expose gc from v8 setFlagsFromString (#34604)\r\n- fix(ext/node): fix latin1Slice being too slow (#34503)\r\n- fix(ext/node): honor windowsHide in child_process spawn (#34627)\r\n- fix(ext/node): prevent buffer decode detach race (#34632)\r\n- fix(ext/node): re-export inner spec for module.exports = require(X).Y (#34363)\r\n- fix(ext/node): refuse sqlite close() while a user callback is running (#34515)\r\n- fix(ext/node): report real error code for failed dns.lookup (#34697)\r\n- fix(ext/node): resolve global cache packages when require referrer is outside\r\n  DENODIR (#34497)\r\n- fix(ext/node): route node:fs.statfs through FileSystem trait (#34444)\r\n- fix(ext/node): support cyclic imports in vm.Module.prototype.link() (#34472)\r\n- fix(ext/node): support vm dynamic import callback (#34572)\r\n- fix(ext/node): tolerate unreadable cwd in require._nodeModulePaths (#34542)\r\n- fix(ext/node): vm dynamic import without callback throws\r\n  ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING (#34427)\r\n- fix(ext/web): forward console.group label to inspector log (#34341)\r\n- fix(ext/web): honor PerformanceObserver buffered flag (#34748)\r\n- fix(ext/web): make MessageEvent.ports a frozen array (#34773)\r\n- fix(fmt): update markup_fmt to fix quadratic inline CSS formatting (#34663)\r\n- fix(install): allow \"minimumDependencyAge\" object without \"age\" (#34523)\r\n- fix(install): handle pre-existing node_modules symlink on Windows (#34659)\r\n- fix(install): rewrite relative imports/scopes in copied deno.json (#34562)\r\n- fix(install): run workspace member dependency lifecycle scripts with member\r\n  INIT_CWD (#34700)\r\n- fix(install): vendor type-only imports during `deno ci` (#34459)\r\n- fix(jupyter): exit kernel process after sending shutdown reply (#34554)\r\n- fix(jupyter): keep kernel alive across transient peer disconnects (#34550)\r\n- fix(jupyter): make kernel ZMTP handshake compatible with libzmq (#34755)\r\n- fix(jupyter): send transient: {} in execute_result so nbclient doesn't crash\r\n  (#34483)\r\n- fix(jupyter): use stable PATH entry for kernel binary path (#34492)\r\n- fix(lsp): avoid empty import specifier completions (#34647)\r\n- fix(lsp): complete npm package exports (#34675)\r\n- fix(lsp): complete string union literals containing dots (#34664)\r\n- fix(lsp): discover all tests when names are duplicated (#34624)\r\n- fix(lsp): handle empty jsx completion ranges (#34651)\r\n- fix(lsp): handle parser panics while parsing documents (#34640)\r\n- fix(lsp): honor `moduleResolution: \"bundler\"` for npm dir imports (#34643)\r\n- fix(lsp): include configured deps in auto-imports (#34650)\r\n- fix(lsp): limit node_modules auto-import aliasing (#34674)\r\n- fix(lsp): merge duplicate completion imports (#34658)\r\n- fix(lsp): preserve URL extensions in `typeof import(...)` hovers (#34565)\r\n- fix(lsp): recover from TSC isolate OOM instead of crashing the language server\r\n  (#34693)\r\n- fix(lsp): release idle memory back to the OS (#34727)\r\n- fix(lsp): skip parent process check when PID isn't visible (#34744)\r\n- fix(lsp): spurious diagnostics in Jupyter notebook cells (#34734)\r\n- fix(lsp): support test steps from imported helpers (#34648)\r\n- fix(lsp): surface CSS imports as .js to TypeScript (#34419)\r\n- fix(lsp): surface module-level uncaught errors in test runs (#34641)\r\n- fix(lsp): use cached registry config when offline (#34723)\r\n- fix(lsp): use file uris for neovim virtual definitions (#34653)\r\n- fix(lsp): walk to enabled nested workspaces (#34654)\r\n- fix(napi): report a clear error for legacy V8/nan native addons (#34683)\r\n- fix(napi): support ZeroMQ libuv addon symbols (#34657)\r\n- fix(node): avoid spurious ERR_MULTIPLE_CALLBACK on process.stdout/stderr\r\n  (#34728)\r\n- fix(node): classify required js files as commonjs by default (#34673)\r\n- fix(node): full re-export fallback for unresolvable member re-exports (#34689)\r\n- fix(node): resolve CJS requires with multi-level relative specifiers on\r\n  Windows (#34655)\r\n- fix(node): support module-sync export condition (#34599)\r\n- fix(node/repl): gate preview through V8 inspector throwOnSideEffect (#34566)\r\n- fix(npm): apply scoped registry auth to same-origin tarballs (#34698)\r\n- fix(npm): clean node_modules after deno remove (#34110)\r\n- fix(npm): downgrade latest tag for release age (#34581)\r\n- fix(npm): execute native binaries from npm package bin entries (#34375)\r\n- fix(npm): hoist direct deps over higher transitive versions (#34470)\r\n- fix(npm): share copy-package variants via symlink for class identity (#34691)\r\n- fix(resolver): don't resolve linked packages via bare specifier (#34519)\r\n- fix(rt): support host-FS CJS files in the standalone runtime (#34560)\r\n- fix(runtime): better error message when Deno.consoleSize() has no tty (#34538)\r\n- fix(runtime): suggest --allow-scripts for `bindings` native addon error\r\n  (#34666)\r\n- fix(runtime): suggest N-API alternatives for legacy V8/nan addons (#34695)\r\n- fix(runtime): suggest Worker/node:vm alternatives for npm:isolated-vm (#34702)\r\n- fix(runtime/ops): unwatch shared RecommendedWatcher on FsWatcher close\r\n  (#34467)\r\n- fix(task): preserve trailing backslashes in task arguments (#34505)\r\n- fix(task): restore terminal mode after task exits on Windows (#34685)\r\n- fix(test): abort with a message when a test exits with sanitizeExit disabled\r\n  (#34491)\r\n- fix(test): don't kill the deno process on top-level Deno.exit() (#34564)\r\n- fix(test): wait for inspector to disconnect before exiting (#34559)\r\n- fix(tsc): resolve Web globals to Deno's versions in npm packages (#34634)\r\n- fix(watch): register dynamic raw imports with file watcher (#34463)\r\n- fix(watch): restore original cwd between watcher restarts (#34465)\r\n- fix: absolute links should be processed using directory functions (#34218)\r\n- fix: link to docs in JSON import error message (#34611)\r\n- fix: load classic blob worker main script directly (#34592)\r\n- fix: opt-in mitigation for React RCE/DoS CVEs (#34676)\r\n- fix: reject empty package name in package.json dependencies (#34514)\r\n- fix: remove node_shim exec dependency (#34739)\r\n- fix: resolve local file when folder name matches import-mapped package\r\n  (#32854)\r\n- fix: send BroadcastChannel messages before close (#34628)\r\n- perf(cli): drop unused deno_ast bundler feature (#34424)\r\n- perf(ext/fetch): cache lowercased header names per Headers instance (#33683)\r\n- perf(ext/node): bulk-build header array and trim header OWS in place (#34443)\r\n- perf(ext/node): cache member-export-props analysis (#34471)\r\n- perf(ext/node): gate node:http async resource entry (#34608)\r\n- perf(ext/node): optimize empty node:http response end (#34493)\r\n- perf(ext/node): optimize node:http header matching (#34484)\r\n- perf(ext/node): skip node:http perf timing without observers (#34409)\r\n- perf(ext/web): convert hot stream queues to O(1) Queue, cache _state reads\r\n  (#34437)\r\n- perf(http): remove legacy hyper 0.14 from deno_http (#34557)\r\n- perf(node): lazy stdio + fix LazyEsmModuleLoader source consumption (#34440)\r\n- perf(node): lazy-load node:stream/web cluster out of the snapshot (#34548)\r\n- perf(node): skip require permission checks when read is fully granted (#34722)\r\n- perf(runtime): update notify watcher dependency (#34567)\r\n- perf(web): reduce Brotli CompressionStream binary size (#34432)\r\n- perf: enable safe ICF (identical code folding) when linking (#34478)\r\n- perf: replace ipnetwork with ipnet (#34580)","publishedAt":"2026-06-03T13:41:42.000Z","fetchedAt":"2026-06-03T17:02:44.605Z","url":"https://github.com/denoland/deno/releases/tag/v2.8.2","media":[],"coverageCount":0},{"id":"rel_W6sEtSve2YzogbIN4tQFs","version":"v2.8.1","type":"feature","title":"v2.8.1","summary":"Fixed multiple Node.js compatibility issues including TLSSocket.authorized behavior when clients present no certificate, PKCS#12 MAC support in TLS SecureContext, and fs.watch error event emission on open failures. Network permission checks now apply to resolved IPs in fetch and WebSocket, and a panic in deno test --parallel is fixed.","titleGenerated":"Deno v2.8.1 fixes Node.js polyfill bugs and network permission checks","titleShort":"Node.js TLS/fs fixes; network deny list enforced on resolve","content":"### 2.8.1 / 2026.05.27\r\n\r\n- Revert \"fix(ext/node): polyfill module.enableCompileCache and companions\"\r\n  (#34190) (#34348)\r\n- feat(bundle): support `browser` field map in package.json (#34407)\r\n- fix(bundle): read package.json sideEffects field (#34406)\r\n- fix(cli): clearer error when importing .node addon via ESM (#34361)\r\n- fix(config): don't panic when --config path can't be converted to URL (#34351)\r\n- fix(core): allow host objects to round-trip through core.deserialize (#34380)\r\n- fix(core): keep lazy_loaded_esm sources across concurrent loads (#34353)\r\n- fix(ext/fetch,ext/websocket): check resolved IPs against net deny list\r\n  (#34236)\r\n- fix(ext/node): TLSSocket.authorized=false when client presents no cert\r\n  (#34381)\r\n- fix(ext/node): accept array forms of cert/key/pfx in createSecureContext\r\n  (#34379)\r\n- fix(ext/node): add missing node:util APIs getSystemErrorMap,\r\n  transferableAbortSignal, transferableAbortController (#34372)\r\n- fix(ext/node): allow omitting arguments in base64Slice (#34318)\r\n- fix(ext/node): attach register as static on Module (#34305)\r\n- fix(ext/node): do not throw NotFound for fs.exists (#34244)\r\n- fix(ext/node): drop extra positional args in promisified fs.promises.*\r\n  (#34347)\r\n- fix(ext/node): emit 'error' event for fs.watch open failures (#34398)\r\n- fix(ext/node): enforce minimum Miller-Rabin rounds in checkPrime (#34391)\r\n- fix(ext/node): extract cert/key from pfx in tls SecureContext (#34383)\r\n- fix(ext/node): prevent panic on `node:sqlite` aggregate method (#34385)\r\n- fix(ext/node): require env permission for process.loadEnvFile (#34350)\r\n- fix(ext/node): reset req.reusedSocket on transparent retry (#34376)\r\n- fix(ext/node): support PKCS#12 MACs other than SHA-1 (#34342)\r\n- fix(ext/node): tolerate non-AsyncWrap handles in _getNewAsyncId (#34413)\r\n- fix(http): wake runtime after direct serve dispatch (#34387)\r\n- fix(inspector): emit NodeWorker.attachedToWorker for late workers (#34377)\r\n- fix(node/util): don't invoke Proxy traps in util.inspect (#34373)\r\n- fix(pack): remove automatic @deno/shim-deno injection (#34411)\r\n- fix(runtime): lazy-loaded globals should shadow on inherited [[Set]] (#34405)\r\n- fix(task): walk ancestor node_modules/.bin in BYONM mode (#34364)\r\n- fix(transpile): preserve newlines after multi-line block comments (#34357)\r\n- fix(types): restore brotli in CompressionFormat for dom/webworker libs\r\n  (#34349)\r\n- fix(upgrade): zstd-compress bsdiff delta patches (#34354)\r\n- fix: allow --inspect=localhost:0 to resolve hostnames (#34230)\r\n- fix: panic in deno test --parallel (#34378)\r\n- fix: support npm: specifiers in --preload and --import (#34346)\r\n- perf(ext/node): reuse keep-alive timer in node:http server (#34302)","publishedAt":"2026-05-27T12:56:27.000Z","fetchedAt":"2026-05-27T15:02:34.041Z","url":"https://github.com/denoland/deno/releases/tag/v2.8.1","media":[],"coverageCount":0},{"id":"rel_HQ5mSyNNxv3W1jXtDnYKr","version":"v2.8.0","type":"feature","title":"v2.8.0","summary":"Deno v2.8.0 adds workspace support to deno bump-version and a catalog: protocol for centralized dependency versions, implements module.registerHooks() for CommonJS and ESM, and expands Node.js compatibility with node:wasi, node:module SourceMap API, and Inspector CDP domain support. Also stabilizes text imports, adds deno ci and deno pack commands, and upgrades TypeScript to 6.0.3 and V8 to 14.9.","titleGenerated":"Deno v2.8.0 adds workspace support, module hooks, and Node.js compatibility enhancements","titleShort":"Workspace support; module.registerHooks(); Node.js compat expanded","content":"### 2.8.0 / 2026.05.22\r\n\r\nRead more: http://deno.com/blog/v2.8\r\n\r\n- feat: accept `deno audit fix` as alias for `deno audit --fix` (#34273)\r\n- feat: add --watch flag to deno check (#34224)\r\n- feat: add `deno bump-version` subcommand (#30562)\r\n- feat: add `deno why` subcommand (#32908)\r\n- feat: support workspaces in `deno bump-version` (#33689)\r\n- feat(add/install): default to npm registry for unprefixed packages (#33246)\r\n- feat(compile): add progress bar for deno compile (#33874)\r\n- feat(compile): support module.registerHooks() in compiled binaries (#33853)\r\n- feat(core): add `Deno.core.loadExtScript()` for lazy-loaded scripts (#33739)\r\n- feat(core): add async module resolution support via ModuleResolveResponse\r\n  (#32432)\r\n- feat(core): support lazy_loaded_esm modules via import statements (#33873)\r\n- feat(core): synthetic_esm extension DSL + node:worker_threads canary (#34038)\r\n- feat(ext/fetch): emit Network.* inspector events for fetch() (#34220)\r\n- feat(ext/node): ESM import() support for module.registerHooks() (#33763)\r\n- feat(ext/node): add createHistogram to node:perf_hooks (#34003)\r\n- feat(ext/node): buffer Network.* bodies for inspector body-fetch commands\r\n  (#34201)\r\n- feat(ext/node): convert node:url/util/zlib to synthetic_esm (#34041)\r\n- feat(ext/node): emit Network.* inspector events for node:http (#34231)\r\n- feat(ext/node): expose inspector.isEnabled() via process.binding('inspector')\r\n  (#34203)\r\n- feat(ext/node): implement Network CDP domain for inspector (#32707)\r\n- feat(ext/node): implement NodeRuntime.notifyWhenWaitingForDisconnect (#34204)\r\n- feat(ext/node): implement module.registerHooks() API for CommonJS (#33733)\r\n- feat(ext/node): implement node:module SourceMap API (#32890)\r\n- feat(ext/node): implement node:wasi (#34089)\r\n- feat(ext/node): implement postMessageToThread cross-thread messaging (#34015)\r\n- feat(ext/node): implement vm.SourceTextModule with microtaskMode afterEvaluate\r\n  support (#33603)\r\n- feat(ext/node): make Network.* CDP events fire under plain --inspect (#34270)\r\n- feat(ext/node): restore module.registerHooks (#34081)\r\n- feat(ext/node): support KeyObject structured clone over MessagePort (#34229)\r\n- feat(ext/node): support NODE_EXTRA_CA_CERTS (#33148)\r\n- feat(ext/node): support sending dgram.Socket handles over IPC (#33863)\r\n- feat(ext/telemetry): add gRPC protocol support for OTLP exporter (#30365)\r\n- feat(ext/web): support structured clone for Blob and File (#33827)\r\n- feat(ext/websocket): emit Network.* inspector events for WebSocket (#34222)\r\n- feat(install): add --os and --arch flags for cross-platform npm installs\r\n  (#32785)\r\n- feat(install): added --prod to skip dev deps and @types (#33248)\r\n- feat(install): default to npm for `deno install -g` unprefixed packages\r\n  (#34290)\r\n- feat(npm): add `catalog:` protocol for centralized dependency versions in\r\n  workspaces (#32947)\r\n- feat(npm): add hoisted node_modules linker mode (#32788)\r\n- feat(npmrc): support min-release-age (#33983)\r\n- feat(task): prefix output lines with task name when running in parallel\r\n  (#33805)\r\n- feat(test): add timeout option to Deno.test() (#33815)\r\n- feat(types): add Math.sumPrecise and Intl.Locale.prototype.variants (#34287)\r\n- feat(unstable): Geometry Interfaces Module Level 1 (#27527)\r\n- feat(unstable): support TC39 import defer proposal (#32360)\r\n- feat(x): add --package/-p flag for specifying package separately from binary\r\n  (#32855)\r\n- feat: OffscreenCanvas (#29357)\r\n- feat: add --package-json flag to deno add/install/remove/uninstall (#33199)\r\n- feat: add `deno ci` subcommand (#34235)\r\n- feat: add `deno pack` command to create npm tarballs (#32139)\r\n- feat: add `deno transpile` subcommand (#32691)\r\n- feat: disable \"no-process-global\", \"no-node-globals\" lint rules by default\r\n  (#33247)\r\n- feat: disable ops and resources sanitizers by default in deno test (#33250)\r\n- feat: framework detection for deno compile (#33164)\r\n- feat: implement `deno audit --fix` (#32909)\r\n- feat: include node lib by default and use NodeJS.Timeout for timers (#33823)\r\n- feat: stabilize text imports (#34238)\r\n- feat: support Deno.upgradeWebSocket with node:http upgrade events (#33342)\r\n- feat: update TypeScript to 6.0.3 (#32944)\r\n- feat: use Node.js timers by default and remove global proxy (#33249)\r\n- feat: v8 14.9 (#34226)\r\n- fix(ci): disable test-child-process-send-returns-boolean.js on windows\r\n  (#33883)\r\n- fix(cli): make deno why work with jsr deps (#34227)\r\n- fix(console): don't trigger proxy get trap for nodejs.util.inspect.custom\r\n  (#33730)\r\n- fix(core): disable include_icu_data feature (#34279)\r\n- fix(core): evaluate pre-instantiated module in lazy_load_esm_module (#33973)\r\n- fix(core): prevent TLA hang when has_tick_scheduled is set during async module\r\n  evaluation (#33278)\r\n- fix(core): short-circuit async-resolve when it returns an already-registered\r\n  module (#34058)\r\n- fix(doc): resolve npm entrypoints without types (#34147)\r\n- fix(ext/crypto): add SHA3 support to crypto.subtle.digest (#32342)\r\n- fix(ext/crypto): normalize P-521 SPKI exports (#34087)\r\n- fix(ext/crypto): validate raw key length on X25519/X448/Ed25519 importKey\r\n  (#33944)\r\n- fix(ext/fetch): close response_rid when abort races op_fetch_send completion\r\n  (#33928)\r\n- fix(ext/fs): run open_async on the blocking pool so FIFO opens don't stall the\r\n  runtime (#33667)\r\n- fix(ext/image): handle bitmaps in `createImageBitmap` correctly (#34285)\r\n- fix(ext/napi): run weak-callback finalizers synchronously in second-pass\r\n  (#34023)\r\n- fix(ext/node): DSA keygen with arbitrary modulusLength (#34206)\r\n- fix(ext/node): MessagePort.on('message') should deduplicate listeners (#33991)\r\n- fix(ext/node): Node-compatible TAP reporter for node:test (#34255)\r\n- fix(ext/node): TLSSocket.setServername throws typed errors (#33744)\r\n- fix(ext/node): Worker rejects --heap-prof and --cpu-prof execArgv flags with\r\n  wrong error (#34011)\r\n- fix(ext/node): accept ArrayBufferView in tls.setDefaultCACertificates (#33700)\r\n- fix(ext/node): accept CryptoKey input in createPublicKey/createPrivat…\r\n  (#33750)\r\n- fix(ext/node): add ERR_REQUIRE_ASYNC_MODULE and ERR_REQUIRE_CYCLE_MODULE error\r\n  codes (#33921)\r\n- fix(ext/node): add `limits` property on `node:sqlite` DatabaseSync (#33106)\r\n- fix(ext/node): add active process resources APIs (#34101)\r\n- fix(ext/node): add emitExperimentalWarning/pendingDeprecate to internal/util,\r\n  support modifyPrototype option in util.deprecate (#33660)\r\n- fix(ext/node): add http2.performServerHandshake to polyfill (#33668)\r\n- fix(ext/node): add linkRequests/moduleRequests/instantiate to node:vm (#34131)\r\n- fix(ext/node): add post-resolution deny check in TCPWrap connect (#33880)\r\n- fix(ext/node): add process._debugEnd() / process._debugProcess() (#34194)\r\n- fix(ext/node): add test.expectFailure to node:test (#34130)\r\n- fix(ext/node): add tls.getCaCertificates() (#32032)\r\n- fix(ext/node): add util.setTraceSigInt stub (#34013)\r\n- fix(ext/node): add v8.GCProfiler (#34158)\r\n- fix(ext/node): add v8.queryObjects() and util.queryObjects() (#34159)\r\n- fix(ext/node): add v8.startupSnapshot API polyfill (#34189)\r\n- fix(ext/node): align crypto KeyObject PKCS#8 encryption, JWK input and PSS\r\n  salt with Node (#33757)\r\n- fix(ext/node): align inspector WebSocket URL with Node.js format\r\n  (ws://host:port/UUID) (#33592)\r\n- fix(ext/node): align nextTick ordering in ESM (#34085)\r\n- fix(ext/node): align node stream `destroy` named export (#33573)\r\n- fix(ext/node): align scrypt behavior and performance with Node (#33773)\r\n- fix(ext/node): allow explicit paramEncoding for EC key generation (#33807)\r\n- fix(ext/node): allow tls.Server SecureContext without cert/key for SNICallback\r\n  (#33715)\r\n- fix(ext/node): apply Deno's resolver inside loader-hook defaultResolve\r\n  (#33964)\r\n- fix(ext/node): apply encoding to Dirent name/parentPath in fs.readdir (#33972)\r\n- fix(ext/node): apply http1Options to HTTP/2 secure server fallback (#33678)\r\n- fix(ext/node): attach addAbortListener to EventEmitter, fix errorMonitor\r\n  (#34262)\r\n- fix(ext/node): avoid panic in vm.createContext loop at isolate teardown\r\n  (#34195)\r\n- fix(ext/node): bind setImmediate callback this to the Immediate instance\r\n  (#33716)\r\n- fix(ext/node): bind to IPv6 wildcard for default Server.listen() to enable\r\n  dual-stack (#33617)\r\n- fix(ext/node): cancel pending TLS writes when the socket closes (#33690)\r\n- fix(ext/node): close named-pipe handles after child_process.spawn on Windows\r\n  (#33941)\r\n- fix(ext/node): complete TLS peer cert chains (#34098)\r\n- fix(ext/node): decrypt encrypted private keys in publicEncrypt/privateDecrypt\r\n  and ignore passphrase (#33770)\r\n- fix(ext/node): decrypt legacy Proc-Type/DEK-Info encrypted PEM private keys\r\n  (#33769)\r\n- fix(ext/node): defer http2 stream window replenishment while paused (#33640)\r\n- fix(ext/node): detect non-mtime stat changes in StatWatcher (#33950)\r\n- fix(ext/node): dns resolveAny with real ANY query, retry/maxTimeout support\r\n  (#33577)\r\n- fix(ext/node): don't emit ServerResponse 'finish' after client abort (#34026)\r\n- fix(ext/node): drive TLSWrap cycle on JSStream writes to fix deadlock (#33914)\r\n- fix(ext/node): emit DEP0111/DEP0119 from process.binding under\r\n  --pending-deprecation (#33594)\r\n- fix(ext/node): emit DEP0192 deprecation warning when _tls_common is required\r\n  (#33819)\r\n- fix(ext/node): emit ERR_HTTP2_MAX_PENDING_SETTINGS_ACK via session error\r\n  instead of throwing (#33679)\r\n- fix(ext/node): emit ERR_HTTP2_TOO_MANY_INVALID_FRAMES for empty DATA frames\r\n  without END_STREAM (#33644)\r\n- fix(ext/node): emit Protocol error when http2 client connects to non-h2 server\r\n  (#33740)\r\n- fix(ext/node): emit deprecation warnings for legacy stream/_tls_wrap requires\r\n  and module.parent (#34086)\r\n- fix(ext/node): emit destroy for cleared immediates (#34084)\r\n- fix(ext/node): emit diagnostics_channel events for HTTP server (#33908)\r\n- fix(ext/node): emit drained server close on next tick for Node parity (#33672)\r\n- fix(ext/node): emit http PerformanceObserver entries for HttpClient and\r\n  HttpRequest (#33826)\r\n- fix(ext/node): emit perf_hooks PerformanceEntry for http2 sessions and streams\r\n  (#33618)\r\n- fix(ext/node): enable quic node compat tests by correcting .mjs file\r\n  extensions in config (#33824)\r\n- fix(ext/node): enable test-crypto-keygen-async-explicit-elliptic-curve\r\n  (#33812)\r\n- fix(ext/node): enable test-crypto-rsa-dsa node compat test with DSA encrypted\r\n  keys (#33811)\r\n- fix(ext/node): enable test-crypto-sign-verify node compat test (#33810)\r\n- fix(ext/node): enable test-crypto.js node compat test (#33822)\r\n- fix(ext/node): enable test-http2-server-shutdown-redundant (#33793)\r\n- fix(ext/node): enforce OpenSSL SECLEVEL key-strength check in\r\n  createSecureContext (#33686)\r\n- fix(ext/node): expand diagnostics_channel coverage (#34243)\r\n- fix(ext/node): export UV_EOF and fix Socket._final without connect (#34211)\r\n- fix(ext/node): expose Http2Session and nghttp2ErrorString on http2\r\n  internalBinding (#33732)\r\n- fix(ext/node): expose Http2Session and nghttp2ErrorString on http2\r\n  internalBinding (#33742)\r\n- fix(ext/node): expose Http2Stream and nghttp2ErrorString on http2\r\n  internalBinding (#33729)\r\n- fix(ext/node): expose TLS server name (SNI) on server-side TLSSocket via\r\n  getServername op (#33725)\r\n- fix(ext/node): expose `E` and `SystemError` from `internal/errors` (#34080)\r\n- fix(ext/node): expose http2 internalBinding and add missing HTTP2_HEADER_*\r\n  constants (#33726)\r\n- fix(ext/node): expose http2 session setNextStreamID with capital-ID method\r\n  name (#33666)\r\n- fix(ext/node): expose http2 test bindings and route pushStream through\r\n  pushPromise (#33741)\r\n- fix(ext/node): expose internal webstreams modules (#34107)\r\n- fix(ext/node): expose internal/async_hooks as requireable module (#34116)\r\n- fix(ext/node): expose internal/fs/promises with FileHandle (#34118)\r\n- fix(ext/node): expose internal/js_stream_socket and add default read path\r\n  (#34088)\r\n- fix(ext/node): expose internal/net as requireable module (#34152)\r\n- fix(ext/node): expose internal/options as requireable module (#34117)\r\n- fix(ext/node): expose internal/tty as requireable module (#34105)\r\n- fix(ext/node): expose internal/url so require('internal/url') works (#34012)\r\n- fix(ext/node): expose internal/util/debuglog and add formatTime helper\r\n  (#33665)\r\n- fix(ext/node): fire uncaughtExceptionMonitor with correct origin for sync\r\n  top-level throws (#34048)\r\n- fix(ext/node): fix TLS crash with Happy Eyeballs address fallback (#33641)\r\n- fix(ext/node): fix TLS peer certificate multi-value fields, issuer chain, and\r\n  EC curve names (#33782)\r\n- fix(ext/node): fix child_process.send() backpressure return value (#33869)\r\n- fix(ext/node): fix module resolution for nested package.json files (#33767)\r\n- fix(ext/node): flesh out node:trace_events polyfill (#34216)\r\n- fix(ext/node): forward http2 protocol errors from invalid frame callback to\r\n  session error event (#33630)\r\n- fix(ext/node): handle HTTP/2 flow control (#33795)\r\n- fix(ext/node): handle connectionsCheckingInterval option and send 408 for\r\n  request timeout (#33836)\r\n- fix(ext/node): handle unhandled rejections in node:test without crashing\r\n  runner (#33749)\r\n- fix(ext/node): implement AES Key Wrap and Key Wrap with Padding ciphers\r\n  (#33813)\r\n- fix(ext/node): implement ALPNCallback and SNICallback for TLS server (#33360)\r\n- fix(ext/node): implement ECDH validation and DH verifyError (#33751)\r\n- fix(ext/node): implement Module._stat (#34157)\r\n- fix(ext/node): implement SocketAddress class (#34020)\r\n- fix(ext/node): implement TCP/TLS socket useUserBuffer (#34164)\r\n- fix(ext/node): implement displayErrors for vm scripts (#33942)\r\n- fix(ext/node): implement h2 END_STREAM packing and Http2Session\r\n  PerformanceObserver entries (#33796)\r\n- fix(ext/node): implement missing node:test APIs (#33764)\r\n- fix(ext/node): implement mock.getter, mock.setter, mockImplementation in\r\n  node:test (#33755)\r\n- fix(ext/node): implement noDelay property on net.Server and apply TCP_NODELAY\r\n  to accepted (#33828)\r\n- fix(ext/node): implement node:cluster on unix (#33752)\r\n- fix(ext/node): implement node:wasi preview1 compat (#34245)\r\n- fix(ext/node): implement vm.SyntheticModule constructor (#34014)\r\n- fix(ext/node): import/export PKCS#8 and legacy encrypted PEM private keys\r\n  (#33762)\r\n- fix(ext/node): improve http server parser compat (#34094)\r\n- fix(ext/node): improve https agent compat (#34091)\r\n- fix(ext/node): improve module hooks support (#33877)\r\n- fix(ext/node): improve node:tls test compatibility (#34067)\r\n- fix(ext/node): improve worker_threads MessagePort compatibility (#34250)\r\n- fix(ext/node): isolate TLS client reject session resumption (#34097)\r\n- fix(ext/node): make hideStackFrames actually hide frames, expose\r\n  internal/validators (#33673)\r\n- fix(ext/node): map rustls record-decode errors to OpenSSL-style \"wrong version\r\n  number\" (#33711)\r\n- fix(ext/node): module hook fixes for ESM nextLoad, createRequire URL, and\r\n  builtin redirects (#34219)\r\n- fix(ext/node): node:repl improvements (#33930)\r\n- fix(ext/node): node:test improvements (#33929)\r\n- fix(ext/node): node:test with watch-mode events (#34254)\r\n- fix(ext/node): normalize underscored V8 flags (#34129)\r\n- fix(ext/node): omit glibc version fields on musl/non-Linux (#33987)\r\n- fix(ext/node): pad DH shared secret and fix prime sign byte for stateless\r\n  diffieHellman (#33761)\r\n- fix(ext/node): pass URL to kOnHeadersComplete when request has no headers\r\n  (#33831)\r\n- fix(ext/node): per-request executionAsyncResource() for async_hooks (#34188)\r\n- fix(ext/node): polyfill module.enableCompileCache and companions (#34190)\r\n- fix(ext/node): port internal/priority_queue and expose it via require (#33696)\r\n- fix(ext/node): preserve AsyncLocalStorage context across HTTP/2 client streams\r\n  (#33677)\r\n- fix(ext/node): preserve raw socket connect when wrapping TLS (#34093)\r\n- fix(ext/node): prevent panic when importing node builtins after\r\n  module.register() (#33920)\r\n- fix(ext/node): prevent top-level `await test(...)` deadlock in node:test\r\n  (#33947)\r\n- fix(ext/node): propagate highWaterMark option from http.createServer to req\r\n  and res (#33825)\r\n- fix(ext/node): readFile of large file via fd returns scrambled content\r\n  (#34258)\r\n- fix(ext/node): refresh async id for reused agent sockets (#34138)\r\n- fix(ext/node): register sigwinch listeners for stdout/stderr (#33890)\r\n- fix(ext/node): reject structuredClone for file-backed Blobs (#34075)\r\n- fix(ext/node): report directory imports with node error code (#34076)\r\n- fix(ext/node): restore llhttp parser.data after execute to handle re-entrant\r\n  calls (#33832)\r\n- fix(ext/node): retry named-pipe connect on ERROR_PIPE_BUSY (Windows) (#33974)\r\n- fix(ext/node): route ServerHttp2Stream.respond through binding proto (#33736)\r\n- fix(ext/node): run load hook chain on every require() of a builtin (#34223)\r\n- fix(ext/node): run register() hooks in worker thread, add\r\n  --experimental-loader flag (#33906)\r\n- fix(ext/node): satisfy agent-base node:https stack-trace check (#34264)\r\n- fix(ext/node): send http2 GOAWAY before stream RSTs so peer sees session\r\n  destroy code (#33637)\r\n- fix(ext/node): set OSSL error codes and key-type checks in stateless\r\n  diffieHellman (#33772)\r\n- fix(ext/node): share TLS session cache and ticketer for tls.TLSSocket session\r\n  resumption (#33693)\r\n- fix(ext/node): skip ESM load hook bridge for CJS modules (#33861)\r\n- fix(ext/node): support CA certificate introspection and off-thread loading\r\n  tests (#33708)\r\n- fix(ext/node): support PKCS#8 encrypted private key PEM export via PBES2\r\n  (#33758)\r\n- fix(ext/node): support TLS client resume compat tests (#34095)\r\n- fix(ext/node): support `encoding` option in `fs.watch` (#33634)\r\n- fix(ext/node): support `signal` option in `fs.watch`/`fs.promises.watch`\r\n  (#33650)\r\n- fix(ext/node): support abstract Unix sockets in node:net pipe bind (#33872)\r\n- fix(ext/node): support encrypted PKCS#8 DER private key export and import\r\n  (#33756)\r\n- fix(ext/node): support node:fs APIs on VFS files in deno compile (#33803)\r\n- fix(ext/node): support sending net.Socket and net.Server handles to child\r\n  processes on unix (#33605)\r\n- fix(ext/node): support shouldUpgradeCallback in http server (#34092)\r\n- fix(ext/node): support undici dispatcher for allowHTTP1 websocket upgrades\r\n  (#33731)\r\n- fix(ext/node): surface ERR_REQUIRE_ASYNC_MODULE/CYCLE_MODULE codes and fix TLA\r\n  retry (#34060)\r\n- fix(ext/node): tagged template literal support for SQL (#34018)\r\n- fix(ext/node): throw ERR_CRYPTO_HASH_FINALIZED on subsequent Hash.digest()\r\n  calls (#33774)\r\n- fix(ext/node): throw ERR_INVALID_ARG_VALUE for falsy dns.lookup hostname\r\n  (#34234)\r\n- fix(ext/node): throw ERR_INVALID_ARG_VALUE for odd-length headers array in\r\n  http.ServerResp (#33820)\r\n- fix(ext/node): throw OpenSSL-shaped error from tls.createSecureContext when\r\n  clientCertEngine is set (#33691)\r\n- fix(ext/node): throw correct error for encrypted PEM key in privateDecrypt\r\n  (#33808)\r\n- fix(ext/node): tls server error message, rejection capture, two compat tests\r\n  (#34183)\r\n- fix(ext/node): unblock fs.open on FIFOs and read pipes correctly in http2\r\n  respondWithFile (#33792)\r\n- fix(ext/node): use ASCII byte-truncation in http2 writeAsciiString polyfill\r\n  (#33645)\r\n- fix(ext/node): use core.loadExtScript for deno_web/deno_io polyfill deps\r\n  (#33798)\r\n- fix(ext/node): use primordials in internal_binding/symbols.ts (#33865)\r\n- fix(ext/node): use proper error codes for tls.TLSSocket.setServername()\r\n  (#33745)\r\n- fix(ext/node): use queueMicrotask in fs.close to avoid sanitizer\r\n  false-positive (#33714)\r\n- fix(ext/node): validate data type in Cipheriv/Decipheriv update() (#33649)\r\n- fix(ext/node): validate fs.watch options.ignore (#33574)\r\n- fix(ext/node): wire HTTP/2 PING ack callbacks and emit payload buffer (#33794)\r\n- fix(ext/node): wire http2 maxSettings option to\r\n  nghttp2_option_set_max_settings (#33790)\r\n- fix(ext/node): wire up http2 per-session maxOutstandingPings flag (#33791)\r\n- fix(ext/node): wrap process.chdir errors with path/dest/syscall (#33584)\r\n- fix(ext/process): respect AbortSignal in Deno.Command.output() (#34069)\r\n- fix(ext/process): tolerate unlinked cwd in spawn (#33587)\r\n- fix(ext/tls): upgrade rustls to fix SSL cert validation regression (#33912)\r\n- fix(ext/url): URLSearchParams Node-compat error messages on invalid this and\r\n  missing args (#34017)\r\n- fix(ext/url): align URLSearchParams with Node for node:url compat (#34119)\r\n- fix(ext/web): convert MessageEvent ports via WebIDL sequence iteration\r\n  (#33652)\r\n- fix(ext/web): respect cancelable and passive flags in Event.returnValue setter\r\n  (#33651)\r\n- fix(ext/websocket): don't panic on H2 stream reset in poll_write (#33982)\r\n- fix(fmt): panic on tagged HTML template with multi-level indent (#34263)\r\n- fix(init): replace add(2,3) template with Deno.serve HTTP server (#33042)\r\n- fix(install): don't treat JS scripts with non-Node shebang as native binaries\r\n  (#33971)\r\n- fix(install): regenerate lockfile with --force on global install (#33970)\r\n- fix(lsp): don't panic on unresolved dts import hover (#34112)\r\n- fix(node): fix registerHooks for custom file type loaders (#33899)\r\n- fix(node): weakly track util.aborted resources (#34142)\r\n- fix(node/fs): readSync with position argument returns EINVAL (#34021)\r\n- fix(node/sqlite): implement DatabaseSync.serialize() and deserialize()\r\n  (#34010)\r\n- fix(node/tls): handle detached ArrayBuffer in TLSWrap write methods (#33737)\r\n- fix(node:http2): preserve timeout inspect links on proxied session sockets\r\n  (#33721)\r\n- fix(npm): resolve catalog: overrides from workspaces object form (#33816)\r\n- fix(npm): support `catalog:` protocol in overrides (#33799)\r\n- fix(publish): don't panic on provenance generation in non-GitHub CI (#33802)\r\n- fix(repl): drain microtasks after inspector polling to avoid 'Promise was\r\n  collected' (#33735)\r\n- fix(resolver): handle tag version req in byonm resolver (#33962)\r\n- fix(task): escape backticks in forwarded args (#34151)\r\n- fix(task): support recursive task completions in workspaces (#32422)\r\n- fix(test): include --watch=<paths> in watched paths (fixes #21704) (#32621)\r\n- fix(update): `deno update --lockfile-only` should not update config (#33746)\r\n- fix(watch): apply `--watch-exclude` filter to file change events (#33854)\r\n- fix(workspace): clamp CLI include paths to member folder (#33949)\r\n- fix: bump deno_graph to 0.108.2 for wasm multi-value return types (#34070)\r\n- fix: disable V8 external memory check to prevent panic on large TypedArrays\r\n  (#33896)\r\n- fix: fix CJS re-export analysis for npm packages (#33263)\r\n- fix: handle native binary bin entries in global npm install (#33935)\r\n- fix: include node lib by default and use NodeJS.Timeout for timers (#33823)\r\n- fix: report eval scripts as `[eval]` URL for inspector (#34192)\r\n- perf(core): SIMD ASCII fast path for op_decode (#33720)\r\n- perf(core): cap V8 platform thread pool to 4 threads (#33697)\r\n- perf(ext): convert ext/cache, ext/canvas, ext/crypto JS sources to lazy-loaded\r\n  scripts (#33778)\r\n- perf(ext): convert ext/fetch JS sources to lazy-loaded scripts (#33784)\r\n- perf(ext): convert ext/ffi JS source to lazy-loaded script (#33780)\r\n- perf(ext): convert ext/io, ext/os, ext/net JS sources to lazy-loaded scripts\r\n  (#33779)\r\n- perf(ext): convert ext/kv and ext/webgpu JS sources to lazy-loaded scripts\r\n  (#33818)\r\n- perf(ext): convert ext/process and ext/http JS sources to lazy-loaded scripts\r\n  (#33817)\r\n- perf(ext): convert ext/telemetry and ext/cron JS sources to lazy-loaded\r\n  scripts (#33801)\r\n- perf(ext/fetch): fast-path string in BodyInit_DOMString converter (#33676)\r\n- perf(ext/fetch): skip dict-converter walk on default init in\r\n  Request/fetch/Response.json (#33999)\r\n- perf(ext/fs): convert ext/fs JS source to lazy-loaded script (#33800)\r\n- perf(ext/geometry): avoid heap allocation for the argument that requires a\r\n  fixed length of sequence (#33688)\r\n- perf(ext/net): reduce Quinn TLS provider size (#34294)\r\n- perf(ext/node): convert 62 more polyfill files to lazy-loaded scripts (#33835)\r\n- perf(ext/node): convert _stream_* polyfills to lazy-loaded JS (#33988)\r\n- perf(ext/node): convert child_process, cluster, console to lazy-loaded JS\r\n  (#33925)\r\n- perf(ext/node): convert child_process, fs, http, http2, https, inspector to\r\n  lazy-loaded JS (#33967)\r\n- perf(ext/node): convert cluster, console, constants, crypto, dgram, dns to\r\n  lazy-loaded JS (#33951)\r\n- perf(ext/node): convert errors.ts, util.mjs, and foundation layer to\r\n  lazy-loaded scripts (#33830)\r\n- perf(ext/node): convert fs helpers, streams, dgram, dns/utils to lazy-loaded\r\n  ESM (#33936)\r\n- perf(ext/node): convert fs internals, timers, tty, url, webstreams to\r\n  lazy-loaded ESM (#33939)\r\n- perf(ext/node): convert http2, readline, stream_base_commons to lazy-loaded JS\r\n  (#33932)\r\n- perf(ext/node): convert internal/crypto to lazy-loaded JS (#33919)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33871)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33882)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33897)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33900)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33902)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33909)\r\n- perf(ext/node): convert more polyfills to lazy-loaded JS (#33913)\r\n- perf(ext/node): convert net, _tls_common, _tls_wrap to lazy-loaded JS (#33997)\r\n- perf(ext/node): convert node:events and stream internals to lazy-loaded JS\r\n  (#33881)\r\n- perf(ext/node): convert node:path to lazy-loaded JS (#33917)\r\n- perf(ext/node): convert node:util, node:assert to lazy-loaded (#33876)\r\n- perf(ext/node): convert timers, tls, tty, url, v8, worker_threads, zlib to\r\n  lazy-loaded JS (#33960)\r\n- perf(ext/node): convert validators.mjs and dependencies to lazy-loaded scripts\r\n  (#33821)\r\n- perf(ext/node): optimize direct ServerResponse string end (#34253)\r\n- perf(ext/node): replace node: imports with core.loadExtScript for buffer and\r\n  nextTick (#33862)\r\n- perf(ext/node): true writev on tcp sockets for node:http (#33659)\r\n- perf(ext/web): add hyper-fast path for TextDecoder.decode (#33674)\r\n- perf(ext/web): convert all ext/web JS sources to lazy-loaded scripts (#33760)\r\n- perf(ext/web): fast path for TextEncoder.encodeInto (#33675)\r\n- perf(ext/web): lazy-init EventTarget listeners table (#33734)\r\n- perf(ext/web): linear-time set/delete on FormData, URLSearchParams, Headers\r\n  (#33961)\r\n- perf(ext/web): optimize TextEncoder encodeInto result (#34055)\r\n- perf(ext/web): structuredClone primitive fast path (#33728)\r\n- perf(ext/webidl): fast path for createDictionaryConverter undefined input\r\n  (#33692)\r\n- perf(ext/webidl): hoist EMPTY_OPTS for converter opts default (#34007)\r\n- perf(ext/websocket): lazy-load WebSocket and WebSocketStream JS (#33701)\r\n- perf(http): avoid ReadableStream when full body already buffered (#33844)\r\n- perf(http): directly dispatch into js request handler (#33845)\r\n- perf(http): don't add Vary header if response is not compressed (#33892)\r\n- perf(http): split clear-text HTTP autodetect connection task (#33887)\r\n- perf(libs/core): drop libuv-style partial-read break to fix node:http p99\r\n  (#33860)\r\n- perf(runtime): convert 8 runtime JS files to lazy-loaded scripts (#33864)\r\n- perf(snapshot): dedupe JS sources between binary and v8 snapshot (#33992)\r\n- perf: consolidate HTTP Brotli compressor setup (#34282)\r\n- perf: lazy-load more modules in the snapshot (#34061)\r\n- perf: monch 0.6 (#33643)\r\n- perf: use panic=abort in release builds (#34280)","publishedAt":"2026-05-22T10:51:19.000Z","fetchedAt":"2026-05-22T15:02:49.713Z","url":"https://github.com/denoland/deno/releases/tag/v2.8.0","media":[],"coverageCount":0},{"id":"rel_5TwiRKpLGVq1xgkyQHkGC","version":"v2.7.14","type":"feature","title":"v2.7.14","summary":"### 2.7.14 / 2026.04.28\r\n\r\n- feat(ext/node): add fs.Utf8Stream\r\n- feat(upgrade): delta updates via bsdiff patches (#33274)\r\n- fix(bundle): treat CSS s...","titleGenerated":null,"titleShort":null,"content":"### 2.7.14 / 2026.04.28\r\n\r\n- feat(ext/node): add fs.Utf8Stream\r\n- feat(upgrade): delta updates via bsdiff patches (#33274)\r\n- fix(bundle): treat CSS same-document fragment URLs as external (#33492)\r\n- fix(cache): add missing CacheStorage.keys() and Cache.keys() methods (#33275)\r\n- fix(config): don't exclude workspace members from deploy file patterns\r\n  (#33562)\r\n- fix(coverage): exclude transformer-injected helpers from coverage (#33481)\r\n- fix(doc): remove background from operators in dark mode code blocks (#33267)\r\n- fix(ext/bundle): clearer error when Deno.bundle is called in compiled binary\r\n  (#33503)\r\n- fix(ext/crypto): throw TypeMismatchError for non-TypedArray in getRand\r\n  (#33470)\r\n- fix(ext/fetch): don't mutate caller's options in Deno.createHttpClient\r\n  (#33497)\r\n- fix(ext/fetch): use byte ReadableStream for Node Readable request bodies\r\n  (#33432)\r\n- fix(ext/fs): normalize Deno.watchFs paths so events drop ./ segments (#33490)\r\n- fix(ext/napi): implement napi_async_init and napi_async_destroy (#33282)\r\n- fix(ext/net): default Deno.listenDatagram hostname to 0.0.0.0 (#33496)\r\n- fix(ext/node): accept X.509v1 server certs in tls.createServer (#33505)\r\n- fix(ext/node): accept string mode in fs.mkdir and fs.mkdirSync (#33409)\r\n- fix(ext/node): add Server BlockList, asyncDispose, and misc net improvements\r\n  (#33417)\r\n- fix(ext/node): add _idleStart and _idleTimeout to Timeout (#33604)\r\n- fix(ext/node): align crypto random* validation with Node (#33456)\r\n- fix(ext/node): align fs.truncate / ftruncate argument validation with Node\r\n  (#33418)\r\n- fix(ext/node): align module.builtinModules / getBuiltinModule with Node\r\n  (#33404)\r\n- fix(ext/node): align node:module behavior with Node (#33482)\r\n- fix(ext/node): align node:test `it`/`describe` with Node, enable passing\r\n  compat tests (#33593)\r\n- fix(ext/node): align util.styleText with Node (#33547)\r\n- fix(ext/node): allow `https.Agent()` without `new`, enable passing compat\r\n  tests (#33601)\r\n- fix(ext/node): async fs.stat/lstat throwIfNoEntry + deprecate fs.Stats\r\n  (#33436)\r\n- fix(ext/node): attach input URL to ERR_INVALID_FILE_URL_PATH (#33398)\r\n- fix(ext/node): attach path/syscall to fs.lstat / realpath / link errors\r\n  (#33446)\r\n- fix(ext/node): brand-check SecureContext._external accessor (#33569)\r\n- fix(ext/node): cache hash digest so it survives stream.pipeline (#33440)\r\n- fix(ext/node): cancelling Readable.toWeb(req) no longer destroys the socket\r\n  (#33570)\r\n- fix(ext/node): close fd on error in http2 stream respondWithFile (#33614)\r\n- fix(ext/node): correct buffer-length check in `Readable._fromList` decoder\r\n  branch (#33624)\r\n- fix(ext/node): defer drain in http2 shutdownWritable so pushStream after end()\r\n  works (#33619)\r\n- fix(ext/node): drain pending TLS cleartext in enc_write_cb (#33378)\r\n- fix(ext/node): emit Buffer for http2 'goaway' opaqueData (#33502)\r\n- fix(ext/node): emit DEP0031 deprecation warning for ecdh.setPublicKey(\r\n  (#33468)\r\n- fix(ext/node): emit DEP0182 deprecation for short AES-GCM auth tag (#33469)\r\n- fix(ext/node): emit HPE_INVALID_TRANSFER_ENCODING for CL+chunked respo\r\n  (#33488)\r\n- fix(ext/node): emit StatWatcher 'stop' event asynchronously (#33448)\r\n- fix(ext/node): emit TimeoutNaNWarning for invalid timer durations (#33472)\r\n- fix(ext/node): emit http2 frameError on send failure with translated HTTP/2\r\n  error code (#33631)\r\n- fix(ext/node): emit stream-level PROTOCOL_ERROR in node:http2\r\n- fix(ext/node): emit tlsClientError instead of crashing on TLS init failure\r\n  (#33429)\r\n- fix(ext/node): enable test-als-defaultvalue-original (AsyncLocalStorage\r\n  default value) (#33464)\r\n- fix(ext/node): encode http2 headers as Latin-1 to fix response splitting\r\n  (#33531)\r\n- fix(ext/node): encode more chars in url.pathToFileURL() (#33397)\r\n- fix(ext/node): enforce HTTP/2 server header list size limits (#33494)\r\n- fix(ext/node): enforce http2 maxSessionInvalidFrames limit (#33515)\r\n- fix(ext/node): expose http2 sensitive headers received with NV_FLAG_NO_INDEX\r\n  flag (#33626)\r\n- fix(ext/node): fix EEXIST error and data loss in writeFileSync on Windows\r\n  (#33413)\r\n- fix(ext/node): fix ERR_INVALID_CHAR message & OutgoingMessage.prototype.write\r\n  (#33430)\r\n- fix(ext/node): fix TLS client certificate authentication verification (#33576)\r\n- fix(ext/node): fix TLS socket error ordering and app data leak before identity\r\n  verification (#33585)\r\n- fix(ext/node): fix TLS socket lifecycle and readStop backpressure (#33524)\r\n- fix(ext/node): fix closeIdleConnections destroying active connections (#33596)\r\n- fix(ext/node): fix fs.glob skipping siblings with *_/../_ patterns (#33372)\r\n- fix(ext/node): fix spawnSync internal API for monkey-patching and killSignal\r\n  (#33545)\r\n- fix(ext/node): flush GOAWAY before destroying http2 socket and expose\r\n  internal/http2/core (#33566)\r\n- fix(ext/node): flush HTTP/2 client preface after settings submission (#33387)\r\n- fix(ext/node): forward enableConnectProtocol setting to peer in HTTP/2\r\n  SETTINGS frame (#33616)\r\n- fix(ext/node): handle undefined http2 ping payload and cancel pending pings on\r\n  destroy (#33561)\r\n- fix(ext/node): hide aggregateTwoErrors frame in AggregateError stack (#33402)\r\n- fix(ext/node): honor http2 strictFieldWhitespaceValidation option (#33506)\r\n- fix(ext/node): honor requestCert/ca on node:tls server, populate\r\n  getPeerCertificate() (#33439)\r\n- fix(ext/node): honor weight option in http2 client.request and emit DEP0194\r\n  (#33622)\r\n- fix(ext/node): http2 createConnection support and per-frame socket writes\r\n  (#33520)\r\n- fix(ext/node): implement BlockList.rules / isBlockList / toJSON / fromJSON\r\n  (#33445)\r\n- fix(ext/node): implement Socket.resetAndDestroy with TCP RST in node:net\r\n  (#33415)\r\n- fix(ext/node): implement StatWatcher.ref() / unref() (#33408)\r\n- fix(ext/node): implement dns Resolver cancel() and timeout support (#33580)\r\n- fix(ext/node): implement dns.reverse() and fix dns.lookup() family parameter\r\n  (#33579)\r\n- fix(ext/node): implement fs.mkdtempDisposableSync /\r\n  fsPromises.mkdtempDisposable (#33533)\r\n- fix(ext/node): implement node:cluster fork/Worker and worker-side detection\r\n  (#33493)\r\n- fix(ext/node): implement process.debugPort with ToInt32 coercion (#33403)\r\n- fix(ext/node): import kIncomingMessage/kServerResponse in http2 allowHTTP1\r\n  fallback (#33435)\r\n- fix(ext/node): improve Node.js timer compatibility (#33479)\r\n- fix(ext/node): improve perf_hooks timerify and add missing exports (#33581)\r\n- fix(ext/node): include accepted values in Console colorMode error (#33424)\r\n- fix(ext/node): isolate parentPort from globalThis in worker_threads (#32596)\r\n- fix(ext/node): make Buffer.prototype methods generic-callable (#33466)\r\n- fix(ext/node): make http2 session.origin() round-trip origins and respect TLS\r\n  servername (#33629)\r\n- fix(ext/node): make process.constructor a proper instanceof check (#33447)\r\n- fix(ext/node): name custom-promisified functions after their originals\r\n  (#33407)\r\n- fix(ext/node): null-proto child_process options to block prototype pollution\r\n  (#33555)\r\n- fix(ext/node): pass reusePort flags in Server.listen() without host (#33530)\r\n- fix(ext/node): pass signal name to process signal handlers (#33425)\r\n- fix(ext/node): pass stream fd to child process stdio instead of inheriting\r\n  (#33525)\r\n- fix(ext/node): plumb llhttp error code, reason, and bytes parsed through\r\n  HTTPParser (#33591)\r\n- fix(ext/node): prevent duplicate close emit when http2 client socket i\r\n  (#33538)\r\n- fix(ext/node): re-arm Windows named pipe server after accept (#33369)\r\n- fix(ext/node): rebind http2 state buffers post-snapshot, enforce\r\n  maxHeaderListPairs (#33495)\r\n- fix(ext/node): reject non-ArrayBufferView data in fs.writeFileSync (#33406)\r\n- fix(ext/node): rename _destroySsl to _destroySSL to match Node.js API (#33599)\r\n- fix(ext/node): replace unwrap with error propagation in parallel cp (#33396)\r\n- fix(ext/node): return relative path from fs.watch with recursive option\r\n  (#33428)\r\n- fix(ext/node): strip trailing dot from SRV target in dns.resolveSrv() (#33578)\r\n- fix(ext/node): submit http2 RST_STREAM before flushing END_STREAM DATA frame\r\n  on respondWithFD read (#33633)\r\n- fix(ext/node): support ALPNCallback in http2.createSecureServer (#33521)\r\n- fix(ext/node): support BlockList, AbortSignal, and constructor options in\r\n  node:net Socket (#33414)\r\n- fix(ext/node): support `ignore` option in `fs.watch` and `fs.promises.watch`\r\n  (#33610)\r\n- fix(ext/node): support encoding option in fs.readdir; don't double-call glob\r\n  callback (#33501)\r\n- fix(ext/node): support http2 pushStream and client push events (#33516)\r\n- fix(ext/node): support reusePort option and fix bind/pipe handling in node:net\r\n  (#33416)\r\n- fix(ext/node): support util.promisify on http2.connect (#33489)\r\n- fix(ext/node): support v1 X.509 certs and http2 ALPN fallback (#33510)\r\n- fix(ext/node): throw ERR_INVALID_ARG_VALUE when rmdir gets options.recursive\r\n  (#33565)\r\n- fix(ext/node): throw ERR_INVALID_URL from http/https request string URL\r\n  (#33427)\r\n- fix(ext/node): throw TypeError for Symbol keys/values in process.env (#33399)\r\n- fix(ext/node): timer _destroyed flag, Symbol.dispose, and setInterval abort\r\n  (#33528)\r\n- fix(ext/node): track http2 custom settings and SETTINGS ACK callbacks (#33518)\r\n- fix(ext/node): treat unsolicited HTTP/2 PING ACK as connection-level protocol\r\n  error (#33625)\r\n- fix(ext/node): use AbortSignal.addEventListener in addAbortListener (#33557)\r\n- fix(ext/node): use ERR_INVALID_ARG_TYPE for tls.createServer non-object\r\n  options (#33589)\r\n- fix(ext/node): use ERR_INVALID_ARG_VALUE in module.createRequire (#33449)\r\n- fix(ext/node): use Node's address-type check in dgram Socket.send (#33420)\r\n- fix(ext/node): use node:timers for http server connection checks, expo\r\n  (#33483)\r\n- fix(ext/node): use proper error codes for require() invalid arguments (#33609)\r\n- fix(ext/node): validate `fs.watch` boolean options (#33627)\r\n- fix(ext/node): validate boolean arg in process.setSourceMapsEnabled (#33473)\r\n- fix(ext/node): validate ciphers option in tls.createSecureContext() (#33597)\r\n- fix(ext/node): validate dgram options.recvBufferSize / sendBufferSize (#33444)\r\n- fix(ext/node): validate oaepHash in publicEncrypt/privateDecrypt (#33388)\r\n- fix(ext/node): validate options.type in Readable.toWeb (#33560)\r\n- fix(ext/node): validate process.chdir argument is a string (#33401)\r\n- fix(ext/node): walk sandbox prototype chain in vm property_query (#33463)\r\n- fix(ext/node): wire JSStreamSocket handle write/shutdown for http2 (#33526)\r\n- fix(ext/node): wire up captureRejection handler for http2 servers (#33542)\r\n- fix(ext/node): yield to I/O in http2 write path so stream pipeline finishes\r\n  (#33541)\r\n- fix(ext/web): align AbortSignal.timeout error message with Node (#33460)\r\n- fix(ext/web): allow transferring non-serializable types in structuredClone\r\n  (#33491)\r\n- fix(ext/web): handle late write racing with TransformStream cancel (#33478)\r\n- fix(ext/web): narrow ReadableStreamBYOBRequest.view to Uint8Array (#33477)\r\n- fix(ext/web): retain `source` from MessageEventInit (#33500)\r\n- fix(ext/web): route console.dirxml through the log printer (#33443)\r\n- fix(ext/web): set ERR_MISSING_ARGS code on URL.revokeObjectURL no-arg (#33471)\r\n- fix(ext/web): structuredClone of non-serializable Web types throws\r\n  DataCloneError (#33465)\r\n- fix(ext/webidl): set ERR_ILLEGAL_CONSTRUCTOR code on illegal constructor calls\r\n  (#33535)\r\n- fix(ext/webidl): set ERR_INVALID_THIS code on brand-check TypeError (#33467)\r\n- fix(node/buffer): fix panic in transcode with odd-length UTF-16LE input\r\n  (#33390)\r\n- fix(node/compat): disable flaky test-child-process-exec-kill-throws on Windows\r\n  (#33426)\r\n- fix(node/compat): disable flaky test-fs-read-stream-pos on Windows (#33421)\r\n- fix(node/compat): fix shard report merging and fetching in CI reporting\r\n  (#33431)\r\n- fix(permissions): normalize paths for macOS filesystem comparison (#33451)\r\n- fix(task): match workspace directory name in --filter (#33499)\r\n- fix(task): use explicit workspace root check in directory-name fallback\r\n  (#33540)\r\n- fix(x): forward --unstable-* flags to JSR and URL targets (#33450)\r\n- fix: bound fs.readFile on non-terminating sources (#33262)\r\n- fix: drop config-only unstable features from unstable_args() (#33452)\r\n- fix: match single-char wildcard segments in npm package imports (#33513)\r\n- perf(ext/node): pool 64KB read buffers to reduce allocation pressure (#33395)\r\n- perf: optimize worker and MessagePort message passing (#32657)\r\n- perf: upgrade rusty_v8 to 147.4.0 (#33422)","publishedAt":"2026-04-28T16:49:55.000Z","fetchedAt":"2026-04-28T18:00:48.689Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.14","media":[],"coverageCount":0},{"id":"rel_wmvFFWhjNJazFyD7HRtwJ","version":"v2.7.13","type":"feature","title":"v2.7.13","summary":"### 2.7.13 / 2026.04.22\r\n\r\n- feat(ext/node): implement node:repl module (#32799)\r\n- feat(ext/node): rewrite node:http with llhttp and native TCPWrap (...","titleGenerated":null,"titleShort":null,"content":"### 2.7.13 / 2026.04.22\r\n\r\n- feat(ext/node): implement node:repl module (#32799)\r\n- feat(ext/node): rewrite node:http with llhttp and native TCPWrap (#33208)\r\n- feat(upgrade): support installing from a PR (#33252)\r\n- fix(audit): migrate to bulk advisory endpoint (#33292)\r\n- fix(console): find nodejs.util.inspect.custom on Proxy objects via get trap\r\n  (#33265)\r\n- fix(doc): Add Prism support for JSX/TSX code blocks (#33255)\r\n- fix(ext/http): treat empty Host header as missing in request URL (#33234)\r\n- fix(ext/napi): defer GC weak-callback finalizers to the event loop (#33260)\r\n- fix(ext/napi): implement real V8 handle scopes and callback scopes (#33281)\r\n- fix(ext/napi): implement zero-copy external Latin-1 strings (#33283)\r\n- fix(ext/node): ChildProcess.kill() returns false when process already exited\r\n  (#33305)\r\n- fix(ext/node): address node:http rewrite review comments (#33299)\r\n- fix(ext/node): auto-start server-side STARTTLS handshake, add TLS upgrade\r\n  tests (#33303)\r\n- fix(ext/node): defer JS stream encOut to avoid reentrant CppGC borrow (#33304)\r\n- fix(ext/node): enable HTTP parser consume fast path (#33354)\r\n- fix(ext/node): enforce maxHeaderSize in HTTP parser (#33306)\r\n- fix(ext/node): fix EEXIST error and file corruption with writeFileSync on\r\n  Windows (#33253)\r\n- fix(ext/node): fix Module._resolveLookupPaths and require.resolve compat\r\n  (#33261)\r\n- fix(ext/node): fix multiple http2 bugs (#33315)\r\n- fix(ext/node): fix playwright on windows (#33295)\r\n- fix(ext/node): flush HTTP/2 HEADERS frame after client request (#33300)\r\n- fix(ext/node): free uv_write and uv_shutdown requests in every exit path\r\n  (#33350)\r\n- fix(ext/node): http client compat improvements (#33337)\r\n- fix(ext/node): http2 improvements — constants, error codes, settings,\r\n  validation (#33332)\r\n- fix(ext/node): improve node:tls compat (validation, pipes, JS streams)\r\n  (#33331)\r\n- fix(ext/node): support FD-indexed stdio inheritance in spawnSync (#33341)\r\n- fix(ext/node): support RSA-PSS keys in crypto.verify with null algorithm\r\n  (#33314)\r\n- fix(runtime): warn on unsupported web Worker options and fix recv panic\r\n  (#33310)\r\n- fix(test): fix specific_canary upgrade test on Windows (#33286)\r\n- fix: add note for canary's 30-day retention period (#33271)\r\n- fix: restore glibc < 2.27 compatibility for Linux release builds (#33259)\r\n- fix: update v8 crate to 147.2.1 (#33318)\r\n- perf(ext/node): elide async_hooks emit in timers when no hooks registered\r\n  (#33355)\r\n- perf(ext/node): flush-free header fast path in HTTP parser (#33351)\r\n- perf(ext/node): reduce writev op allocations and write copies (#33352)\r\n- perf(libs/core): poll only ready handles and yield between I/O batches\r\n  (#33349)\r\n- perf: reduce memory usage of Command.output() (#33335)","publishedAt":"2026-04-22T13:26:47.000Z","fetchedAt":"2026-04-22T15:06:13.909Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.13","media":[],"coverageCount":0},{"id":"rel_vEhWWS7QQE_O-85tvw4db","version":"v2.7.12","type":"feature","title":"v2.7.12","summary":"### 2.7.12 / 2026.04.09\r\n\r\n- feat(ext/node): add fs.SyncWriteStream (#33226)\r\n- feat(ext/node): add llhttp-based HTTPParser with native cppgc binding ...","titleGenerated":null,"titleShort":null,"content":"### 2.7.12 / 2026.04.09\r\n\r\n- feat(ext/node): add fs.SyncWriteStream (#33226)\r\n- feat(ext/node): add llhttp-based HTTPParser with native cppgc binding (#33202)\r\n- feat(ext/node): add native TLSWrap cppgc object (Rust core) (#33183)\r\n- feat: native uv_pipe_t implementation with NativePipe and FdTable (#33165)\r\n- fix(core): fix uv_pipe_open handle lifecycle to match libuv (#33225)\r\n- fix(core): free UvLoopInner on uv_loop_t drop to prevent worker memory leak\r\n  (#33200)\r\n- fix(core): handle WouldBlock in op_print for non-blocking stdio (#33221)\r\n- fix(core): use c_char instead of i8 in uv_buf_t base cast (#33179)\r\n- fix(ext/napi): use per-isolate Private key for napi_wrap/napi_unwrap (#33204)\r\n- fix(ext/node): add dns.getDefaultResultOrder() API (#33197)\r\n- fix(ext/node): create net.Socket from file descriptors (#33150)\r\n- fix(ext/node): implement TCP.open(fd) (#33155)\r\n- fix(ext/node): implement timeout, killSignal, and pid for child_process\r\n  spawnSync (#32810)\r\n- fix(ext/node): implement uv_ref for native TCP handles (#33174)\r\n- fix(ext/node): remove dead legacy TCP server accept path (#33172)\r\n- fix(ext/node): return real OS file descriptors from node:fs APIs (#33039)\r\n- fix(ext/node): rewrite Pipe.open(fd) to use raw fd ops (#33136)\r\n- fix(ext/node): support numeric FDs in child_process stdio array (#33140)\r\n- fix(ext/node): throw on cipher update with input >= 2^31-1 bytes (#33201)\r\n- fix(ext/webgpu): accept `ArrayBuffer` in `GPUQueue.writeBuffer()` as data\r\n  source (#33152)\r\n- fix(io): remove global stdio statics, handle non-blocking stdin (#33219)\r\n- fix(node): validate resolved main path stays within package directory (#33170)\r\n- fix(otel): add timeout to OTEL HTTP exporter to prevent hangs (#33159)\r\n- fix(permissions): check deny rules against resolved IPs to prevent numeric\r\n  hostname bypass (#33203)\r\n- fix(permissions): normalize IPv4-mapped IPv6 addresses in net permission\r\n  checks (#33223)\r\n- fix(repl): surface CDP protocol errors and fix race in wait_for_response\r\n  (#33190)\r\n- fix(runtime): cache canonicalized watch paths, fix spurious events (#33123)\r\n- fix(schema): fix the `publish: false` of deno.json schema (#33196)\r\n- fix: linked packages with peer deps failing to cache from lockfile (#33143)\r\n- fix: update release template workflow URLs to .generated.yml (#33116)\r\n- perf(ext/node): use aws-lc-sys EVP API for chacha20-poly1305 (#33110)","publishedAt":"2026-04-09T20:35:29.000Z","fetchedAt":"2026-04-10T00:01:44.172Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.12","media":[],"coverageCount":0},{"id":"rel__cZ7iP7P2ZDLb3C0uFVLn","version":"v2.7.11","type":"feature","title":"v2.7.11","summary":"### 2.7.11 / 2026.04.01\r\n\r\n- feat: add alpha and beta release channel support (#33098)\r\n- fix(ext/node): fire fs.watch events for immediate writes (#3...","titleGenerated":null,"titleShort":null,"content":"### 2.7.11 / 2026.04.01\r\n\r\n- feat: add alpha and beta release channel support (#33098)\r\n- fix(ext/node): fire fs.watch events for immediate writes (#32935) (#32989)\r\n- fix(watch): reduce graceful shutdown timeout from 5s to 500ms (#33099)","publishedAt":"2026-04-01T12:45:08.000Z","fetchedAt":"2026-04-08T00:00:46.610Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.11","media":[],"coverageCount":0},{"id":"rel_3AGodLZxLvPwerDQRn8Cf","version":"v2.7.10","type":"feature","title":"v2.7.10","summary":"### 2.7.10 / 2026.03.31\r\n\r\n- feat: add include and exclude fields to compile config (#33024)\r\n- fix(ext/http): gracefully handle consumed external in ...","titleGenerated":null,"titleShort":null,"content":"### 2.7.10 / 2026.03.31\r\n\r\n- feat: add include and exclude fields to compile config (#33024)\r\n- fix(ext/http): gracefully handle consumed external in OTel ops (#33027)\r\n- fix(ext/node): `process.argv[0]` is equivalent to execPath (#28915)\r\n- fix(ext/node): add chacha20-poly1305 cipher support (#33084)\r\n- fix(ext/node): drain pending messages before emitting worker exit event\r\n  (#32623)\r\n- fix(ext/node): escape shell metacharacters in child_process args on Windows\r\n  (#33071)\r\n- fix(ext/node): fix BadResource error in FileHandle.readLines() (#32685)\r\n- fix(ext/node): improve GCM cipher compat with Node.js (#33079)\r\n- fix(ext/node): improve sign/verify crypto compat with Node.js (#33083)\r\n- fix(ext/node): return pid from spawnSync (#33081)\r\n- fix(ext/web): fix infinite loop in WebTransport datagram overflow handling\r\n  (#33075)\r\n- fix(install): all package.json aliases should be added to node_modules\r\n  (#33068)\r\n- fix(lsp): don't double-encode query/fragment in notebook cell URIs (#33070)\r\n- fix(lsp): suggest import map aliases in auto-imports for local directories\r\n  (#33048)\r\n- fix(npm): resolve linked packages not published to npm registry (#33021)\r\n- fix(outdated): use dist-tags.latest for Latest column, matching npm/pnpm/bun\r\n  (#32939)\r\n- fix(resolver): resolve npm packages that shadow Node built-in names in BYONM\r\n  mode (#32865)\r\n- fix(serde_v8): use actual bytes written in to_utf8_slow (#33074)\r\n- fix: use case-insensitive path matching for permissions on Windows (#33073)","publishedAt":"2026-03-31T15:09:24.000Z","fetchedAt":"2026-04-08T00:00:46.610Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.10","media":[],"coverageCount":0},{"id":"rel_xJv3weMuOJXRhcXvMe-Ac","version":"v2.7.9","type":"feature","title":"v2.7.9","summary":"### 2.7.9 / 2026.03.27\r\n\r\n- fix(cli): show clean error instead of panic for invalid\r\n  --unsafely-ignore-certificate-errors value (#32868)\r\n- fix(comp...","titleGenerated":null,"titleShort":null,"content":"### 2.7.9 / 2026.03.27\r\n\r\n- fix(cli): show clean error instead of panic for invalid\r\n  --unsafely-ignore-certificate-errors value (#32868)\r\n- fix(compile): strip duplicate exe path from argv when standalone binary\r\n  relaunches (#33016)\r\n- fix(compile): use execPath for process.argv[1] in standalone binaries (#32990)\r\n- fix(ext/http): use clone_external in op_http_metric_handle_otel_error (#33005)\r\n- fix(ext/node): `util.stripVTControlCharacters` compatibility (#32942)\r\n- fix(ext/node): add Symbol.dispose and Symbol.asyncDispose to fs.Dir (#33000)\r\n- fix(ext/node): rewrite Windows TTY reading to match libuv (console mode,\r\n  encoding, raw + line mode) (#32999)\r\n- fix(ext/node): use constant-time comparison for secret key equality (#32994)\r\n- fix(publish): vite import.meta.hot not type checking (#32127)\r\n- perf(ops): replace per-op generated slow metrics wrappers with shared dispatch\r\n  (#32889)","publishedAt":"2026-03-27T12:54:54.000Z","fetchedAt":"2026-04-08T00:00:46.610Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.9","media":[],"coverageCount":0},{"id":"rel_tcFQAlBz9E6cJTZG-XG32","version":"v2.7.8","type":"feature","title":"v2.7.8","summary":"### 2.7.8 / 2026.03.25\r\n\r\n- feat(core): implement NodeRuntime CDP domain and fix --inspect-brk blocking\r\n  (#32714)\r\n- feat(ext/crypto): implement P-5...","titleGenerated":null,"titleShort":null,"content":"### 2.7.8 / 2026.03.25\r\n\r\n- feat(core): implement NodeRuntime CDP domain and fix --inspect-brk blocking\r\n  (#32714)\r\n- feat(ext/crypto): implement P-521 sign, verify, and ECDH derive (#32602)\r\n- feat(ext/napi): add node_api_create_object_with_named_properties (#32906)\r\n- feat(ext/telemetry): add console exporter for OpenTelemetry (#32717)\r\n- feat(ext/telemetry): copy relevant span attributes to HTTP metrics (#32720)\r\n- feat: use lockfile from jsr package for global install (#32490)\r\n- fix(audit): respect package.json overrides in vulnerability checks (#32878)\r\n- fix(cli): fix arrow keys in interactive picker on Windows (#32978)\r\n- fix(cli): parse --frozen flag for deno update and deno outdated (#32975)\r\n- fix(compile): skip Node-to-Deno arg translation in standalone binaries\r\n  (#32980)\r\n- fix(ext/console): handle throwing Symbol.toStringTag getter gracefully\r\n  (#32917)\r\n- fix(ext/napi): pass valid env to tsfn call_js_cb after close race (#32957)\r\n- fix(ext/node): `fs.cp` across allowed dirs with ignored read permissions\r\n  (#32927)\r\n- fix(ext/node): child_process improvements (internalMessage, argv0, DEP0190)\r\n  (#32885)\r\n- fix(ext/node): close libuv handle on HandleWrap.close() for new-style handles\r\n  (#32958)\r\n- fix(ext/node): defer uv_write callbacks to prevent re-entrancy panic (#32919)\r\n- fix(ext/node): do not throw error for `readline.createInterface` outside TTY\r\n  (#32874)\r\n- fix(ext/node): don't fire upgrade event for h2c requests (#32866)\r\n- fix(ext/node): drain all ready connections in poll_tcp_handle to prevent\r\n  accept starvation (#32943)\r\n- fix(ext/node): emit request \"close\" before socket \"free\" in keep-alive path\r\n  (#32811)\r\n- fix(ext/node): enable node compat test for v8.getHeapStatistics (#32833)\r\n- fix(ext/node): enable node:fs compat tests + lchmod fix (#32892)\r\n- fix(ext/node): fix Buffer.concat truncating buffers larger than 4GB (#32913)\r\n- fix(ext/node): fix IPC stdio handling in child_process (#32920)\r\n- fix(ext/node): fix node:domain across async boundaries (#32897)\r\n- fix(ext/node): freeze os.constants.signals to match Node.js (#32836)\r\n- fix(ext/node): implement process.threadCpuUsage() (#32829)\r\n- fix(ext/node): improve process.hrtime argument validation (#32837)\r\n- fix(ext/node): improve readline and EventEmitter compat (#32826)\r\n- fix(ext/node): pass uid/gid to spawn and implement process.getgroups (#32772)\r\n- fix(ext/node): preserve TLS upgrade state on reconnect (#32838)\r\n- fix(ext/node): return all own properties from VM context property enumerator\r\n  (#32911)\r\n- fix(ext/node): set fd property on TTY ReadStream and WriteStream (#32880)\r\n- fix(ext/node): sqlite prepare() options, defensive default, iterator\r\n  invalidation (#32756)\r\n- fix(ext/node): support http2 createConnection sockets (#32733)\r\n- fix(ext/node): support numeric FDs in child_process stdio array (#32959)\r\n- fix(ext/node): update process.versions.napi to 9 (#32870)\r\n- fix(ext/web): AbortSignal.any() memory leak with long-lived signals (#32916)\r\n- fix(ext/web): handle null options in removeEventListener (#32605)\r\n- fix(fmt): delegate component expression formatting to markup_fmt (#29763)\r\n- fix(fmt): update markup_fmt to 0.27.0 and malva to 0.15.2 (#32949)\r\n- fix(inspector): send executionContextDestroyed on process.exit() (#32934)\r\n- fix(lockfile): truncate frozen lockfile error diff to 50 lines (#32976)\r\n- fix(napi): add test coverage and fix escape_handle/throw bugs (#32960)\r\n- fix(node/http): stop leaking TCP wrappers on HTTPS upgrade with\r\n  createConnection TLSSocket (#32961)\r\n- fix(npm): `approve-scripts` detects packages when lockfile is disabled\r\n  (#32842)\r\n- fix(npm): create shims for all bin entries during global npm install (#32607)\r\n- fix(npm): skip `file:` and `link:` dependencies in npm packages (#32876)\r\n- fix(npm): use box-drawing style for deprecated package warnings (#32979)\r\n- fix(resolver): fall through to .deno/ when BYONM node_modules version\r\n  mismatches (#32981)\r\n- fix(resolver): prefer exact version match in BYONM npm resolution (#32977)\r\n- fix: handle inner quotes in double-quoted env values in .env file (#32930)\r\n- fix: include Temporal types in deno types output (#32952)\r\n- fix: make flamegraph SVG fill full browser viewport (#32727)\r\n- fix: rewrite approve_scripts_no_lock as PTY tests, skip lockfile test on\r\n  Windows (#32853)\r\n- fix: skip flaky test-process-threadCpuUsage-worker-threads on Windows (#32886)\r\n- perf(ext/web): use simdutf for base64 encode/decode (#32743)\r\n- perf: upgrade to jsonc-parser 0.32 (#32864)","publishedAt":"2026-03-25T16:11:12.000Z","fetchedAt":"2026-04-08T00:00:46.610Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.8","media":[],"coverageCount":0},{"id":"rel_7NTbQBwOMCzMqXU1ZvsVf","version":"v2.7.7","type":"feature","title":"v2.7.7","summary":"### 2.7.7 / 2026.03.19\r\n\r\n- fix(core): implement select fallback on macOS (#32812)\r\n- fix(ext/node): add disabled process function stubs in worker thr...","titleGenerated":null,"titleShort":null,"content":"### 2.7.7 / 2026.03.19\r\n\r\n- fix(core): implement select fallback on macOS (#32812)\r\n- fix(ext/node): add disabled process function stubs in worker threads (#32809)\r\n- fix(ext/node): add key/IV length validation for aes-128-cbc and ecb cipher\r\n  modes (#32824)\r\n- fix(ext/node): improve node:dns module compatibility (#32704)\r\n- fix(ext/node): improve process.title and support --title flag (#32201)\r\n- fix(ext/node): set kLastWriteWasAsync in JS write path to prevent double\r\n  callback (#32814)\r\n- fix(ext/node): skip normalization in path.win32.join for reserved device names\r\n  (#32808)\r\n- fix(ext/node): support interface option for IPv6 multicast membership (#32754)\r\n- fix(ext/node): use constant-time comparison for GCM auth tag verification\r\n  (#32817)\r\n- fix(ext/node): validate process.exitCode and fix process constructor name\r\n  (#32806)\r\n- fix(watch): support graceful shutdown via SIGTERM dispatch (#32564)\r\n- perf(ext/webidl): optimize dictionary converters (#32729)","publishedAt":"2026-03-19T13:52:21.000Z","fetchedAt":"2026-04-08T00:00:46.610Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.7","media":[],"coverageCount":0},{"id":"rel_uqcUuBGoPEc3OjXKlwi9_","version":"v2.7.6","type":"feature","title":"v2.7.6","summary":"### 2.7.6 / 2026.03.18\r\n\r\n- feat(core): add cloneable resource registry for structured clone (#32672)\r\n- feat(core): update v8 to 146.8.0 with foregro...","titleGenerated":null,"titleShort":null,"content":"### 2.7.6 / 2026.03.18\r\n\r\n- feat(core): add cloneable resource registry for structured clone (#32672)\r\n- feat(core): update v8 to 146.8.0 with foreground task ownership (#32771)\r\n- feat(eval): auto-detect CJS vs ESM in deno eval (#32472)\r\n- feat(ext/node): add MIMEType, convertProcessSignalToExitCode, Symbol.dispose\r\n  for ChildProcess (#32793)\r\n- feat(ext/signals): support additional signals on Windows (#32689)\r\n- feat(ext/telemetry): support array values in OTEL attributes (#32748)\r\n- feat: add --cpu-prof-flamegraph to generate interactive SVG flamegraphs\r\n  (#32572)\r\n- fix(cli): update typescript-go to 2026-03-09 (#32656)\r\n- fix(core): don't panic in to_v8_error when JS error builder callback fails\r\n  (#32749)\r\n- fix(core): prevent panic when multiple lazy-loaded ESM modules are loaded\r\n  during TLA (#32769)\r\n- fix(coverage): don't mark lines uncovered when zero-count range only partially\r\n  overlaps (#32601)\r\n- fix(ext/console): make timer and counter state per-instance to fix OTEL\r\n  console wrapping (#32719)\r\n- fix(ext/crypto): support structuredClone for CryptoKey (#32674)\r\n- fix(ext/fetch): retry on stale pooled HTTP/1.1 connections (#32566)\r\n- fix(ext/ffi): retain backing store references in nonblocking calls (#32775)\r\n- fix(ext/napi): call wrap/ref finalizers at shutdown (#32592)\r\n- fix(ext/napi): keep event loop alive while uv_async_t handle is active\r\n  (#32702)\r\n- fix(ext/napi): prevent spurious TypeError from napi_coerce_to_object on\r\n  null/undefined (#32695)\r\n- fix(ext/node): accept all TypedArrays in spawnSync input option (#32712)\r\n- fix(ext/node): allow IPv6 multicast addresses in UDP\r\n  addMembership/dropMembership (#32739)\r\n- fix(ext/node): allow passing `FileHandle` as `fd` argument for `WriteStream`\r\n  and `ReadStream` (#32770)\r\n- fix(ext/node): emit \"connect\" event on http.Server for CONNECT requests\r\n  (#32599)\r\n- fix(ext/node): enable 8 already-passing child_process compat tests (#32710)\r\n- fix(ext/node): fix 8 Node.js compat test failures (#32755)\r\n- fix(ext/node): fix AbortController signal handling in child_process s…\r\n  (#32713)\r\n- fix(ext/node): fix Buffer.concat, expose internal/buffer, implement\r\n  markAsUntransferable (#32760)\r\n- fix(ext/node): fix IPC message prototype for child_process JSON (#32731)\r\n- fix(ext/node): fix TLA stall with native TTY handles and make stdio\r\n  indestructible (#32792)\r\n- fix(ext/node): fix TLS JSStreamSocket resource leak causing process hang\r\n  (#32325)\r\n- fix(ext/node): fix multiple deepEqual comparison issues (#32763)\r\n- fix(ext/node): fix perm checks in TCPWrap (#32721)\r\n- fix(ext/node): fix send() validation in child_process IPC (#32779)\r\n- fix(ext/node): handle cargo features during publish (#32636)\r\n- fix(ext/node): handle signal 0 in child_process.kill() (#32294)\r\n- fix(ext/node): implement safe, add, rem options for crypto.generatePrime\r\n  (#32618)\r\n- fix(ext/node): improve Node.js crypto compatibility (#32690)\r\n- fix(ext/node): improve X509Certificate Node.js compatibility (#32671)\r\n- fix(ext/node): improve crypto.generateKeyPair validation (#32620)\r\n- fix(ext/node): improve worker_threads path validation and error handling\r\n  (#32791)\r\n- fix(ext/node): include prototype env vars in child_process spawn (#32699)\r\n- fix(ext/node): remove extra properties from node:fs exports (#32670)\r\n- fix(ext/node): require --allow-net for udp.send (#32774)\r\n- fix(ext/node): rewrite node:tty on top of uv compat (#32777)\r\n- fix(ext/node): set up stdio streams on failed child_process spawn (#32698)\r\n- fix(ext/node): signal listeners added via `process.once` can now be removed\r\n  (#32606)\r\n- fix(ext/node): support encrypted PEM export and deprecated hash option in\r\n  crypto keygen (#32703)\r\n- fix(ext/node): use non-blocking write in fs.writev (#32673)\r\n- fix(ext/node): validate handle type in child_process send() (#32711)\r\n- fix(ext/node): wrap non-Error unhandled rejections in ERR_UNHANDLED_REJECTION\r\n  (#32535)\r\n- fix(ext/otel): don't mark server spans as error for 4xx responses (#32722)\r\n- fix(ext/signals): prevent panic on FreeBSD (#32518)\r\n- fix(ext/telemetry): add `log.iostream` attribute to console logs (#32723)\r\n- fix(ext/telemetry): add exception.* attributes to OTEL log records (#32726)\r\n- fix(ext/web): support %j JSON format specifier in console.log (#32684)\r\n- fix(ext/web): upgrade QuotaExceededError to DOMException derived interface\r\n  (#32244)\r\n- fix(lsp): align organize imports output with tsgo (#32677)\r\n- fix(npm): handle read-only bin files when setting up node_modules/.bin\r\n  (#32632)\r\n- fix(npm): resolve bundled npm deps in packages properly when not using a\r\n  `node_modules` directory (#32679)\r\n- fix(npm): retain authorization header on http->https redirect (#29878)\r\n- fix(npm): support npmrc certfile + keyfile (#32655)\r\n- fix(process): allow unref'd child processes to outlive parent (#32563)\r\n- fix(repl): fix panic when pressing Tab at beginning of line (#32750)\r\n- fix(runtime): apply source maps to CPU profiler output (#32634)\r\n- fix(runtime): display proper error when throwing in event handlers (#32663)\r\n- fix(runtime): reduce memory retention after web worker termination (#32617)\r\n- fix(runtime): use XML-valid entity in flamegraph SVG (#32716)\r\n- fix(test): allow test functions to override reported location (#32732)\r\n- fix(tsc): move more node resolution errors to typescript diagnostics (#32697)\r\n- fix(watch): dispatch unload and process exit events on restart (#32664)\r\n- fix(web): support structuredClone for DOMException (#32675)\r\n- fix: restore --env-file parent directory traversal and do not error in\r\n  `deno compile` for not found env file (#32686)\r\n- fix: wake event loop when V8 posts foreground tasks from background threads\r\n  (#32450)\r\n- perf(core): optimize V8-to-Rust string conversion with ValueView (#32688)\r\n- perf(ext/napi): use threadpool for async work instead of spawning threads\r\n  (#32776)\r\n- perf(ext/node): move `fs.cpSync` implementation to rust (#32687)\r\n- perf(ext/web): add write buffering for FsFile.writable streams (#32676)\r\n- perf(ext/web): optimize TextEncoder/TextDecoder hot paths (#32735)\r\n- perf(ext/web): optimize URLPattern ops to reduce serde overhead and GC\r\n  pressure (#32766)\r\n- perf(ext/web): optimize node:buffer base64 encode/decode (#32647)\r\n- perf(ext/web): reduce promise allocations in streams (#32652)\r\n- perf(fmt): speed up file diffing (#30644)\r\n- perf(install): avoid unnecessary package info fetches when running lifecycle\r\n  scripts (#32653)\r\n- perf(linux): trim glibc malloc arena after module loading (#32662)\r\n- perf(lsp): replace dissimilar with imara-diff (#32700)\r\n- perf(npm): run lifecycle scripts in parallel (#32666)","publishedAt":"2026-03-18T12:09:26.000Z","fetchedAt":"2026-04-08T00:00:46.949Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.6","media":[],"coverageCount":0},{"id":"rel_CHTzvqYjOQ0GCGTsGxckP","version":"v2.7.5","type":"feature","title":"v2.7.5","summary":"### 2.7.5 / 2026.03.11\r\n\r\n- feat(coverage): add function coverage to summary and HTML reports (#32507)\r\n- feat(doc): support npm packages in `deno doc...","titleGenerated":null,"titleShort":null,"content":"### 2.7.5 / 2026.03.11\r\n\r\n- feat(coverage): add function coverage to summary and HTML reports (#32507)\r\n- feat(doc): support npm packages in `deno doc` (#32435)\r\n- feat(ext/node): add `node_api_create_object_with_properties` API (#31443)\r\n- feat(ext/node): implement KeyObject.toCryptoKey() and\r\n  KeyObject.from(CryptoKey) (#32523)\r\n- feat(otel): allow feeding permission audit data into OTEL (#32501)\r\n- feat: --cpu-prof flags for CPU profiles (#31909)\r\n- fix(console): prevent multi-line object values in console.table (#32604)\r\n- fix(core): switch to V8 Explicit microtask policy for correct nextTick\r\n  ordering (#32466)\r\n- fix(ext/http): allow rejecting HTTP upgrades with non-101 status codes\r\n  (#32615)\r\n- fix(ext/napi): run async work execute callback on a worker thread (#32560)\r\n- fix(ext/node): add `node_api_create_property_key_(latin1/utf8)` (#32559)\r\n- fix(ext/node): add missing http2 header constants (#32611)\r\n- fix(ext/node): emit DEP0198 warning for SHAKE digests without outputLength\r\n  (#32521)\r\n- fix(ext/node): emit correct error codes for unsupported PQC key types (#32533)\r\n- fix(ext/node): fix multiple DiffieHellman crypto bugs (#32531)\r\n- fix(ext/node): fix multiple node:dgram compatibility issues (#32520)\r\n- fix(ext/node): handle generateKeyPair 2-arg call and enable PQC tests (#32619)\r\n- fix(ext/node): implement ECDH.convertKey and fix related ECDH bugs (#32532)\r\n- fix(ext/node): implement `node:v8` heap APIs (#32483)\r\n- fix(ext/node): implement proper `resourceLimits` for `node:worker_threads`\r\n  (#32430)\r\n- fix(ext/node): improve getCipherInfo and allow repeated Hmac digest() (#32522)\r\n- fix(ext/node): improve node:dns compat (#32536)\r\n- fix(ext/node): initialize debuglog testEnabled with safe default (#32598)\r\n- fix(ext/node): make TTY stdout/stderr indestructible (#32530)\r\n- fix(ext/node): make tty ReadStream/WriteStream callable without `new` (#32537)\r\n- fix(ext/node): multiple readline improvements (#32538)\r\n- fix(ext/node): napi_set_instance_data on exit (#32509)\r\n- fix(ext/node): rewrite http2 implementation (#32418)\r\n- fix(ext/node): run worker_threads eval code in sloppy mode (#32428)\r\n- fix(ext/node): support des-ede3-cbc cipher and allow Cipheriv/Decipheriv\r\n  without new (#32519)\r\n- fix(ext/node): use max salt length as default for RSA-PSS signing (#32534)\r\n- fix(ext/otel): remove panicking unwraps in telemetry code (#32557)\r\n- fix(ext/websocket): handle non-ASCII bytes in WebSocket response headers\r\n  (#32594)\r\n- fix(lsp): properly sync root files with tsgo (#32455)\r\n- fix(lsp): tsgo scope attribution for asset files (#32608)\r\n- fix(napi): remove unimplemented Node-API symbols from napi_sys (#32593)\r\n- fix(npm): memoize peer cache hit checks to prevent combinatorial explosion\r\n  (#32609)\r\n- fix(npm): support npmrc email authorization (#32616)\r\n- fix: ensure binaries distributed in `@deno/...` npm packages are exectuable\r\n  (#32581)\r\n- fix: flush CPU profile and coverage data on Deno.exit() (#32591)\r\n- fix: normalize `capture` to boolean in `removeEventListener` options (#32508)\r\n- fix: prevent panic on dynamic import with non-string error name (#32498)\r\n- fix: set `process.features.openssl_is_boringssl` to `true` (#32512)\r\n- fix: support value substitution when loading environment variable files\r\n  (#32495)\r\n- perf(ext/node): move most `fs.cp` logic to rust (#32580)\r\n- perf(lsp): drop jsx import source cache (#32506)\r\n- perf(npm): improve decompression speed more (#32547)\r\n- perf(npm): less syscalls in tarball extraction (#32541)\r\n- perf(npm): remove folder canonicalization in tarball extract (#32540)\r\n- perf(npm): use libdeflater and preallocate buffer (#32511)","publishedAt":"2026-03-11T12:40:10.000Z","fetchedAt":"2026-04-08T00:00:46.949Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.5","media":[],"coverageCount":0},{"id":"rel_-YLGDcq4Ky5PMS6i3JP7q","version":"v2.7.4","type":"feature","title":"v2.7.4","summary":"### 2.7.4 / 2026.03.05\r\n\r\n- fix(core): uv_compat cleanup and fixes (#32458)\r\n- fix(deploy): correctly handle version lookup (#32489)\r\n- fix(ext/node):...","titleGenerated":null,"titleShort":null,"content":"### 2.7.4 / 2026.03.05\r\n\r\n- fix(core): uv_compat cleanup and fixes (#32458)\r\n- fix(deploy): correctly handle version lookup (#32489)\r\n- fix(ext/node): deep `assert` compatibility (#32434)\r\n- fix(ext/node): use sync writes for TTY stdout/stderr WriteStream (#32488)\r\n- fix(test): restart all tests on env file change (#32461)\r\n- perf(npm): actually improve `npm install -g deno` binary startup performance\r\n  (#32467)","publishedAt":"2026-03-05T14:21:56.000Z","fetchedAt":"2026-04-08T00:00:46.949Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.4","media":[],"coverageCount":0},{"id":"rel_gvamfmfpXs-qWITHBIqvM","version":"v2.7.3","type":"feature","title":"v2.7.3","summary":"### 2.7.3 / 2026.03.04\r\n\r\n- fix(deploy): dont use jsr api for deploy subcommand (#32441)\r\n- fix(ext/node): handle partial writes to process.stdout/std...","titleGenerated":null,"titleShort":null,"content":"### 2.7.3 / 2026.03.04\r\n\r\n- fix(deploy): dont use jsr api for deploy subcommand (#32441)\r\n- fix(ext/node): handle partial writes to process.stdout/stderr (#32433)\r\n- fix(ext/node): make UDP socket ops synchronous, implement missing dgram\r\n  methods (#32381)\r\n- fix(ext/node): support HTTP over Windows named pipes in node:http (#32414)\r\n- fix(npm): don't panic when peer dep is not in snapshot (#32454)\r\n- fix(npm): regression where resolution was missing dependencies (#32453)\r\n- perf(npm): improve `npm install deno` binary startup performance (#32439)","publishedAt":"2026-03-04T16:21:25.000Z","fetchedAt":"2026-04-08T00:00:46.949Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.3","media":[],"coverageCount":0},{"id":"rel_RSjN0eKD2kDpk4ZxqwAEq","version":"v2.7.2","type":"feature","title":"v2.7.2","summary":"### 2.7.2 / 2026.03.03\r\n\r\n- feat: v8 14.6, fix require(esm), libuv compat (#32347)\r\n- fix(ci): fix ordering of platforms in ecosystem_compat_slack (#3...","titleGenerated":null,"titleShort":null,"content":"### 2.7.2 / 2026.03.03\r\n\r\n- feat: v8 14.6, fix require(esm), libuv compat (#32347)\r\n- fix(ci): fix ordering of platforms in ecosystem_compat_slack (#32393)\r\n- fix(cli): load multiple env files in the correct order (#32354)\r\n- fix(compile): store self extracting dir in hidden dir beside executable\r\n  (#32329)\r\n- fix(core): store Global<Context> ptr for libuv-compat callbacks (#32361)\r\n- fix(coverage): correct line and branch counts in coverage reports (#32312)\r\n- fix(coverage): warn instead of erroring when source files are missing (#32398)\r\n- fix(ext/console): support iterators in console.table (#32379)\r\n- fix(ext/crypto): fix P-521 EC key export for all formats (#32412)\r\n- fix(ext/crypto): handle wrong algorithm in subtle.importKey without panicking\r\n  (#32410)\r\n- fix(ext/node): CBC decipher setAutoPadding(false) incorrectly strips bytes\r\n  (#32403)\r\n- fix(ext/node): gracefully exit on invalid NODE_CHANNEL_FD instead of panicking\r\n  (#32421)\r\n- fix(ext/node): handle emoji width correctly in readline (#32383)\r\n- fix(ext/node): implement KeyObject.equals, fix createCipheriv with\r\n  KeyObject/null IV (#32409)\r\n- fix(ext/node): implement missing X509Certificate methods (#32270)\r\n- fix(ext/node): make `execPath` named export a real string (#32396)\r\n- fix(ext/node): make `setAutoPadding(false)` a no-op for GCM ciphers (#32290)\r\n- fix(ext/node): make fsPromises.watch() a proper AsyncIterable with close()\r\n  (#32378)\r\n- fix(ext/node): provide CJS globals in worker_threads eval mode (#32266)\r\n- fix(ext/node): rename conflict callback field typo (#32306)\r\n- fix(ext/node): return first created path from recursive \"node:fs\" mkdir call\r\n  (#32300)\r\n- fix(ext/node): support DER-encoded keys in publicEncrypt/privateDecrypt\r\n  (#32291)\r\n- fix(ext/node): support Ed25519, X25519, and P-521 keys in\r\n  X509Certificate.publicKey (#32267)\r\n- fix(ext/node): support RSA PSS padding option in crypto sign/verify (#32269)\r\n- fix(ext/node): support SEC1 EC private key import/export in `node:crypto`\r\n  (#32401)\r\n- fix(ext/node): support process.stdout resize events (#32343)\r\n- fix(ext/node): use internal compileFunction binding in CJS wrap (#32373)\r\n- fix(install): do not panic if lockfile incorrectly says package has a bin\r\n  (#32345)\r\n- fix(install): global install should not warn about using node_modules dir for\r\n  npm specifiers (#32341)\r\n- fix(jupyter): handle shutdown and interrupt requests per protocol (#32359)\r\n- fix(node): implement `resolveObjectURL` for `node:buffer` (#32382)\r\n- fix(node): implement process.umask properly (#32385)\r\n- fix(node): preserve AsyncLocalStorage context in stream.finished callback\r\n  (#32389)\r\n- fix(node): support ECDSA with secp256k1 in `node:crypto` (#32390)\r\n- fix(node/buffer): fix base64 decoding for strings with hyphens (#32298)\r\n- fix(node/crypto): handle empty input in decipher final with auto_pad=false\r\n  (#31958)\r\n- fix(node/vm): support vm.constants.DONT_CONTEXTIFY in createContext (#32337)\r\n- fix(npm): NPM_CONFIG_REGISTRY correctly overrides .npmrc (#32394)\r\n- fix(npm): peerDependency resolution leading to multiple versions being\r\n  installed + hanging (#32358)\r\n- fix(test): dedupe discovered workspace test modules (#32380)\r\n- fix: fix some stack frame dimming, and make the console log more aligned with\r\n  cli formatting (#32399)\r\n- fix: process level environment variables should take precedence over env files\r\n  (#32407)\r\n- fix: validate cron schedule when using cron socket (#32406)\r\n- fix:(ext/node): escape simple quotes in node:child_process (#32336)\r\n- perf(install): improve parallelism of fetches during npm resolution (#32416)\r\n- perf(install): move HTTP decompression for registry requests off the async\r\n  event loop (#32400)\r\n- perf(install): request abbreviated packuments from npm registry (#32364)\r\n- perf(install): split tarball extraction into decompress + write, limit write\r\n  concurrency (#32408)\r\n- perf(install): use aws-lc-rs for tarball integrity hashing (#32365)","publishedAt":"2026-03-03T16:06:30.000Z","fetchedAt":"2026-04-08T00:00:46.949Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.2","media":[],"coverageCount":0},{"id":"rel_sXwyVH2TXbqqzpd4Y0k6Q","version":"v2.7.1","type":"feature","title":"v2.7.1","summary":"### 2.7.1 / 2026.02.25\r\n\r\nThis is a maintenance release to fix wrong output of `deno --version` in v2.7.0.","titleGenerated":null,"titleShort":null,"content":"### 2.7.1 / 2026.02.25\r\n\r\nThis is a maintenance release to fix wrong output of `deno --version` in v2.7.0.","publishedAt":"2026-02-25T17:04:23.000Z","fetchedAt":"2026-04-08T00:00:47.229Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.1","media":[],"coverageCount":0},{"id":"rel_6mTN5RTZQz5THqp7Hft12","version":"v2.7.0","type":"feature","title":"v2.7.0","summary":"### 2.7.0 / 2026.02.25\r\n\r\nRead more: http://deno.com/blog/v2.7\r\n\r\n- feat(audit): add `--ignore` flag to filter advisories by CVE ID (#32221)\r\n- feat(c...","titleGenerated":null,"titleShort":null,"content":"### 2.7.0 / 2026.02.25\r\n\r\nRead more: http://deno.com/blog/v2.7\r\n\r\n- feat(audit): add `--ignore` flag to filter advisories by CVE ID (#32221)\r\n- feat(check): add `--check-js` flag (#32235)\r\n- feat(cli): add `--save-exact`/`--exact` flag to `deno add` and `install`\r\n  (#31977)\r\n- feat(cli): add `deno create` command (#32225)\r\n- feat(compile): add `--self-extracting` flag (#32227)\r\n- feat(config): support include and exclude in deploy config (#32254)\r\n- feat(ext/bundle): Add `--keep-names` flag (#32285)\r\n- feat(ext/web): add brotli support to `CompressionStream` and\r\n  `DecompressionStream` (#32028)\r\n- feat(fmt): add --fail-fast flag to deno fmt --check (#31438)\r\n- feat(fs): add tryLock(exclusive?: boolean): Promise<boolean> to FsFile\r\n  (#31848)\r\n- feat(install): support `--node-modules-dir` for `-g` and use a manual\r\n  node_modules dir for installing `npm:` specifiers (#32302)\r\n- feat(task): turn off failglob by default (#32223)\r\n- feat(unstable): add `Deno.spawn()`, `Deno.spawnAndWait{Sync}()` (#32238)\r\n- feat(upgrade): cache downloaded binaries (#32187)\r\n- feat: `deno create jsr:<package>` and `deno init --jsr <package>` (#32229)\r\n- feat: add `navigator.platform` (#30795)\r\n- feat: npm overrides (#32073)\r\n- feat: stabilize Temporal API (#31928)\r\n- fix(audit): gracefully handle malformed response (#32234)\r\n- fix(audit): properly handle npm registries in subpaths (#32164)\r\n- fix(bundle): let esbuild handle data urls (#32213)\r\n- fix(ci): use noble apt repo for LLVM 21 packages (#32241)\r\n- fix(ext/node): `createServer().listen().address()` returns port 0 (#32248)\r\n- fix(ext/node): `util.parseEnv` and `process.loadEnvFile` compatibility\r\n  (#32183)\r\n- fix(ext/node): add `host_arch` to `process.config.variables` (#32265)\r\n- fix(ext/node): add `openAsBlob` export to `node:fs` (#32261)\r\n- fix(ext/node): add missing `process.constrainedMemory()` API (#32209)\r\n- fix(ext/node): enable test-stdio-closed tests (#32237)\r\n- fix(ext/node): enable test-zlib-invalid-input-memory and test-zlib-un…\r\n  (#32284)\r\n- fix(ext/node): handle shell redirections in child_process exec (#32087)\r\n- fix(ext/node): implement timeout and killSignal for spawn() (#32283)\r\n- fix(ext/node): improve process event handling and add missing APIs (#32200)\r\n- fix(ext/node): preserve streaming body on stale keepalive retry (#32215)\r\n- fix(ext/node): remove fs.promises.fstat, not a public Node.js API (#32289)\r\n- fix(ext/node): support URL in child_process.fork modulePath (#32268)\r\n- fix(ext/node): support ipv6 host in `node:http` (#32258)\r\n- fix(install): support `--allow-scripts` with `deno install -g --compile ...`\r\n  (#32249)\r\n- fix(lsp): implement remaining tsgo resolver callbacks (#32303)\r\n- fix(lsp): qualify diagnostic source and message from tsgo (#32251)\r\n- fix(lsp): typescript-go basic resolution (#32016)\r\n- fix(node): preserve AsyncLocalStorage context in unhandledRejection handlers\r\n  (#32264)\r\n- fix(node/buffer): fix latin1Slice and hexSlice returning wrong results\r\n  (#32277)\r\n- fix(permissions): allow /proc/pressure/* files with --allow-read (#30780)\r\n- fix: deno install --force --compile (#32242)\r\n- fix: detect bound require reexports in cjs analysis (#32163)\r\n- fix: format wasm stack traces correctly, preserve context in unhandled\r\n  rejection, improve cppgc inheritance perf (#32293)\r\n- fix: format wasm stack traces per W3C spec (#32246)","publishedAt":"2026-02-25T10:39:21.000Z","fetchedAt":"2026-04-08T00:00:47.229Z","url":"https://github.com/denoland/deno/releases/tag/v2.7.0","media":[],"coverageCount":0}],"pagination":{"nextCursor":"2026-02-25T10:39:21.000Z|2026-04-08T00:00:47.229Z|rel_6mTN5RTZQz5THqp7Hft12","limit":20},"summaries":{"rolling":null,"monthly":[]}}