Impact Score: 5/10
Deno v2.3.0 โ Release Notes & Engineering Impact
Source available โ automated, not human-reviewed
Component: deno ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-11-01.
โก Executive Summary (TL;DR)
Deno v2.3.0. Source highlight: **Due to an error during the release process, Deno v2.3.0 shows and incorrect version.**
Who Does This Impact? (Role-Based Analysis)
๐ป Software Engineers & Devs
Check the source notes against the package and APIs you use before upgrading.
๐ Product & Engineering Leads
Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.
โ๏ธ DevOps & Security
Verify the target version, runtime requirements and rollback procedure in the official documentation.
โจ New Features & Capabilities (6)
- feat(add/install): --npm and --jsr flags for deno add/install (#28666)
- feat(cache): add `DENO_EMIT_CACHE_MODE` (#29025)
- feat(check): detect tsconfig.json at workspace root (#29092)
- feat(check): support erasableSyntaxOnly for type checking (#29097)
- feat(clean): `deno clean --except <paths>`, remove all cache data except
- feat(cli): `deno check` maps to `deno check .` (#28655)
โก Performance & Enhancements (6)
- perf(ext/node): improve node:http createServer performance (#29069)
- perf(ext/node): lazily listen to the abort signal of request object (#29071)
- perf(fs): don't canonicalize path when opening file if `--allow-all` is passed
- perf(http): instantiate generic functions in `deno_http`, increase opt-level
- perf(install): keep parsed npm package info in memory cache (#28636)
- perf(install): only read initialized file if we care about the tags (#28242)
๐ง Bug Fixes & Patches (6)
- fix(add): better help text for --dev arg (#28304)
- fix(bench): lower bench time budget when `n` is specified (#28454)
- fix(build): upgrade libffi to 4.0.0 (#28816)
- fix(check): regression - implicit jsxImportSource was not resolving (#28228)
- fix(check): support `types@` export conditions (#28450)
- fix(check): support `typesVersions` in npm dependencies (#28468)
๐ View Raw Release Notes (Original Developer Log)
### 2.3.0 / 2025.04.30
**Due to an error during the release process, Deno v2.3.0 shows and incorrect version.**
**Please upgrade to Deno v2.3.1:**
```
deno upgrade 2.3.1
```
---
- feat(add/install): --npm and --jsr flags for deno add/install (#28666)
- feat(cache): add `DENO_EMIT_CACHE_MODE` (#29025)
- feat(check): detect tsconfig.json at workspace root (#29092)
- feat(check): support erasableSyntaxOnly for type checking (#29097)
- feat(clean): `deno clean --except <paths>`, remove all cache data except
what's needed to run `paths` (#28424)
- feat(cli): `deno check` maps to `deno check .` (#28655)
- feat(cli): support `--single-threaded` v8 flag (#29066)
- feat(compile): ability to exclude embedded files (#28805)
- feat(compile): support for ffi and node native addons (#28934)
- feat(coverage): add coverage ignore comments (#26590)
- feat(doc): add darkmode for HTML output (#28989)
- feat(ext/fetch): support `localAddress` option in custom HTTP client (#28781)
- feat(ext/http): Show that is also listening on localhost (#28171)
- feat(ext/net): add signal option to `Deno.connect()` (#27113)
- feat(fmt): add fmt options (#28946)
- feat(fmt): support formatting of embedded css, html, and sql (#29014)
- feat(fmt/lint): add `--permit-no-files` (#28753)
- feat(info): include deno version (#29080)
- feat(lockfile): default to lockfile v5 (#28950)
- feat(lsp): jupyter cell continuity using classic scripts (#28769)
- feat(otel): basic event recording (#28552)
- feat(otel): span context propagators (#28460)
- feat(runtime): add `Deno.build.standalone` for telling if running in
self-contained executable (#28750)
- feat(serve): env var DENO_SERVE_ADDRESS for configuring default listen address
(#28877)
- feat(test): create coverage reports when --coverage specified in deno test
(#28260)
- feat(test): support DENO_COVERAGE_DIR env var (#28291)
- feat(unstable): lint plugins support field selectors (#28324)
- feat(unstable): support using a local copy of npm packages (#28512)
- feat(unstable/otel): add otel tracing to node:http.request (#28463)
- feat(unstable/run): ability to lazily load statically analyzable dynamic
imports (#28593)
- feat(unstable/webgpu): add `deviceStartCapture` and `deviceStopCapture`
(#28192)
- feat: Allow access to NO_COLOR env var without --allow-env (#29090)
- feat: Codegen feature flags (#28920)
- feat: TypeScript 5.8 (#29041)
- feat: add `--open` to `deno serve` to open server in browser (#25340)
- feat: allow forcing in-memory SQLite dbs (#29026)
- feat: code sign deno.exe (#28963)
- feat: deno_core 0.344.0 (#29089)
- feat: enable explicit resource management for JavaScript (#28119)
- feat: support FORCE_COLOR (#28490)
- feat: support linux vsock (#28725)
- feat: upgrade deno_core and V8 (#28562)
- feat: use new feature checker (#29091)
- feat: v8js metrics (#28592)
- fix(add): better help text for --dev arg (#28304)
- fix(bench): lower bench time budget when `n` is specified (#28454)
- fix(build): upgrade libffi to 4.0.0 (#28816)
- fix(check): regression - implicit jsxImportSource was not resolving (#28228)
- fix(check): support `types@` export conditions (#28450)
- fix(check): support `typesVersions` in npm dependencies (#28468)
- fix(check/npm): move not found errors inside npm packages to tsc diagnostics
(#28337)
- fix(ci): missing release symcache (#28774)
- fix(cli): Display error on invalid OTEL_EXPORTER_OTLP_PROTOCOL value (#28796)
- fix(cli): add `compilerOptions.lib` examples to config-file.v1.json (#28226)
- fix(cli): warn when an otel env var has an invalid value (#28394)
- fix(compile): do not panic including node_modules directory (#28782)
- fix(compile): don't rebuild resource table on Windows (#29010)
- fix(compile): downgrade editpe to 0.1.0 (#29011)
- fix(compile): ensure atime/birthtime/mtime/ctime is set in vfs (#28731)
- fix(compile): error when cannot extract binary section (#28986)
- fix(compile): multi icon ordering on windows (#28771)
- fix(compile): panic when compiled with --no-terminal flag (#28823)
- fix(compile): pass default v8 args during compile (#29084)
- fix(compile): read resource name in executable as uppercase on Windows
(#29005)
- fix(compile): revert multi-icon support in compile (#28997)
- fix(compile): temporarily fallback to reading resource data from file on
windows (#29024)
- fix(compile): use a memory mapped file for fallback (#29039)
- fix(config): allow specifying absolute path for patch and fix panic with
exports in package.json (#28279)
- fix(coverage): improve responsiveness of HTML reporter on small screens
(#28993)
- fix(deno_os): allow running WebWorker without snapshots (#28975)
- fix(doc): do not stack overflow for namespace that exports self or ancestor
(#28533)
- fix(ext/canvas): handle integer overflow in `createImageBitmap` (#28764)
- fix(ext/crypto): support cross-curve ECDSA sign and verify (#28574)
- fix(ext/ffi): unexport brand from dts (#28503)
- fix(ext/node): Fix `Writable.toWeb()` (#28914)
- fix(ext/node): SQLite reset guards to prevent database locks (#28298)
- fix(ext/node): `mkdir()` parse file mode (#28609)
- fix(ext/node): add `assert` property to test context object (#28904)
- fix(ext/node): add basic support of suite/describe in node:test (#28847)
- fix(ext/node): add createReadStream & createWriteStream methods to the
FileHandle class (#28700)
- fix(ext/node): add support for --no- prefix (allowNegative option) in
parseArgs() (#28811)
- fix(ext/node): add util.getCallSites (#28546)
- fix(ext/node): alias `shake-128` and `shake-256` hash algorithms (#28451)
- fix(ext/node): better dns.lookup compatibility (#27936)
- fix(ext/node): correct `STATUS_CODES` strings (#28489)
- fix(ext/node): decipherIv() range error on invalid final block length (#28215)
- fix(ext/node): descriptive sqlite error messages (#28272)
- fix(ext/node): emit 'close' event on ServerResponse object when client aborted
the request (#28601)
- fix(ext/node): export test as property of default export (#28881)
- fix(ext/node): fix deepStrictEqual(-0, 0) (#29060)
- fix(ext/node): fix handling of abort signal in readFile (#29028)
- fix(ext/node): handle "ttl" option in "dns" module (#27676)
- fix(ext/node): honor flags with respect to reuseAddress when binding to a UDP
socket (#28156)
- fix(ext/node): implement DatabaseSync#loadExtension (#29050)
- fix(ext/node): implement `Buffer.copyBytesFrom` (#28829)
- fix(ext/node): implement `process.loadEnvFile` (#28824)
- fix(ext/node): implement finished() for web streams (#28600)
- fix(ext/node): node compatibility issue missing fd in createServer callback
socket object (#27789)
- fix(ext/node): propagate 'close' event of IncomingMessage to Socket (#28582)
- fix(ext/node): querystring fallback to default decoder (#28838)
- fix(ext/node): reset statement immidiately in run() (#28506)
- fix(ext/node): restrict ATTACH DATABASE statement (#28513)
- fix(ext/node): return `Buffer` from crypto cipher APIs (#28826)
- fix(ext/node): sqlite error details (#28431)
- fix(ext/node): sqlite handle empty blob being NULL (#28674)
- fix(ext/node): support input option in spawnSync (#28792)
- fix(ext/node): support the optional `previousValue` parameter for
process.cpuUsage() (#28550)
- fix(ext/node): throw NotCapable on process.env accessor (#28280)
- fix(ext/node): update node version in process object (#27044)
- fix(ext/node): upgrade `node:stream` (#28855)
- fix(ext/node): use primordials in `ext/node/polyfills/_fs/_fs_lstat.ts`
(#28644)
- fix(ext/node): use primordials in `ext/node/polyfills/_fs/_fs_readv.ts`
(#28645)
- fix(ext/node): use primordials in `ext/node/polyfills/_fs/_fs_realpath.ts`
(#28652)
- fix(ext/node): use primordials in
`ext/node/polyfills/internal/hide_stack_frames.ts` (#29067)
- fix(ext/node): use primordials in `ext/node/polyfills/internal/http.ts`
(#29082)
- fix(ext/node): use primordials in `ext/node/polyfills/path/_posix.ts` (#28665)
- fix(ext/node): use primordials in `ext/node/polyfills/path/_util.ts` (#28432)
- fix(ext/node): use primordials in `ext/node/polyfills/path/_win32.ts` (#28668)
- fix(ext/node): use primordials in `ext/node/polyfills/path/separator.ts`
(#28669)
- fix(ext/node): use primordials in ext/node/polyfills/_fs/_fs_opendir.ts
(#29063)
- fix(ext/node): verbose zlib error messages (#28831)
- fix(ext/node): work correctly with wrapper Response objects, use correct
`rawHeaders` structure (#29056)
- fix(ext/os): explicitly enable `sysinfoapi` feature on `winapi` dependency
(#28568)
- fix(ext/webgpu): fix incorrect description of UnsafeWindowSurface (#28976)
- fix(ext/webgpu): release current texture of surface after present (#28691)
- fix(ext/websocket): cancel in-flight handshake on close() (#28598)
- fix(fmt): support "--ext vto" and "--ext njk" (#28262)
- fix(fmt): upgrade malva to 0.11.2 (#28871)
- fix(fmt): use non-zero exit code when formatting fails (#28523)
- fix(fmt/md): handle callout followed by non-text (#28333)
- fix(http): generate `OtelInfo` only when otel metrics are enabled (#28286)
- fix(install): don't error on unknown media types in install (#28234)
- fix(install): error gracefully if user passes `--no-config` to
`deno install <package>` (#28965)
- fix(install): exclude npm workspace packages from graph roots in `install`
(#28401)
- fix(install): handle when bin entry info isn't present in package.json but is
in registry (#28822)
- fix(install): read extra package info from node_modules and fallback to
registry (#28893)
- fix(install): regression where Deno not used when postinstall script ran
script without file extension (#28786)
- fix(install): remove duplicate deprecated messages (#28738)
- fix(install): support "file:" dependencies in local package.json (#28396)
- fix(install/global): do not append `bin` to `DENO_INSTALL_ROOT` when ends with
`bin` (#26446)
- fix(lint): don't recurse infinitely for large ASTs (#28265)
- fix(lint): give access to SourceCode in 'deno test' (#28278)
- fix(lint): plugins ignored when no rust rule active (#28269)
- fix(lint): resolve plugin paths from proper config specifier (#28752)
- fix(lint): run with --no-prompt (#28305)
- fix(lint): update deno_lint (#28271)
- fix(lockfile): handling of peer deps when migrating to lockfile v5 (#28844)
- fix(lockfile): omit tarball url from lockfile if it's the default (#28842)
- fix(lockfile): re-fetch packuments if version not found, properly pass patch
packages (#28964)
- fix(lsp): add npm reqs to installer on resolution (#29061)
- fix(lsp): auto-import from npm package exports with manual node_modules
(#28414)
- fix(lsp): close server on exit notification (#28232)
- fix(lsp): create cacheable `ExportInfoMap` per language service (#28240)
- fix(lsp): discard completions from non-exported npm files (#28962)
- fix(lsp): do not show import-map-remap diagnostic when referrer and target are
within the entry base (#28560)
- fix(lsp): exclude unmapped npm cache paths from auto-imports (#28841)
- fix(lsp): filter scheme in semantic tokens registration options (#28756)
- fix(lsp): format vscode-userdata schemed documents (#28706)
- fix(lsp): include prefix and suffix for rename edits (#28327)
- fix(lsp): limit languages in semantic tokens provider (#28310)
- fix(lsp): normalize all uris originating from client (#29019)
- fix(lsp): prefer relative auto-import specifier against import map (#29098)
- fix(lsp): preserve notification order after init flag is raised (#28733)
- fix(lsp): remove redirect diagnostic (#28988)
- fix(lsp): show a diagnostic for managed npm non-existent subpaths (#28981)
- fix(lsp): silence errors from "codeAction/resolve" (#28400)
- fix(lsp): url_to_uri() encoding on windows (#28737)
- fix(lsp): use markup content variant for hover response (#28987)
- fix(node): add reset method to event loop delay histogram (#28788)
- fix(node): require esm should prefer `module.exports` export (#28376)
- fix(node): support re-exported esm modules in cjs export analysis (#28379)
- fix(npm): further reduce duplicates with optional peers (#28705)
- fix(npm): improve optional peer dep handling (#28651)
- fix(npm): only print deprecation warnings on first install (#28990)
- fix(npm): panic when using tag with patched package (#28900)
- fix(npm): reduce duplicate peers by preferring existing nv if nv anywhere in
ancestor peers (#28663)
- fix(npm): reduce occurrences of duplicate packages due to peer dep resolution
(#28586)
- fix(npm): resolve non-version matching peer deps and warn instead (#28616)
- fix(npm): set up bin entries for package even if it's already downloaded
(#28626)
- fix(npm): support registries that have no shasums or integrity (#29093)
- fix(npm): use Deno instead of Node in more cases for lifecycle scripts
(#28715)
- fix(otel): don't print otel warning when variable is not set (#28475)
- fix(otel): don't throw when calling setActiveSpan at root (#28323)
- fix(otel): only start deno_telemetry thread when needed (#29065)
- fix(otel): recording metrics with more than 3 attributes (#28898)
- fix(otel): replace `ArrayPrototypeSplit` with `StringPrototypeSplit` (#28538)
- fix(otel): support attributes on links and events (#28584)
- fix(otel/unstable): trace error cases of fetch (#28480)
- fix(publish): support `virtual:` and `cloudflare:` schemes (#28922)
- fix(repl): panic when user `delete globalThis.globalThis` (#28960)
- fix(run): skip the cjs suggestion for mjs/mts modules (#26698)
- fix(runtime): fix duplicate unstable ids for no-legacy-abort (#28740)
- fix(task): document source of tasks, fix punctuation (#28413)
- fix(task): filter empty elements in `xargs` (#28714)
- fix(task): support backticks and basic tilde expansion (#28832)
- fix(test): ignore write errors in reporter (#28722)
- fix(types): add `Error.isError` type (#28679)
- fix(unstable): Missing `PrivateIdentifier` type for `PropertyDefinition` key
(#28358)
- fix(unstable): add missing decorators nodes in lint ast (#28834)
- fix(unstable): add parent types to lint ast nodes (#28802)
- fix(unstable): lint `.parent` property not traversing over groups (#28803)
- fix(unstable): lint plugin `!==` wrongly parsed as `!=` (#28403)
- fix(unstable): lint plugin `:exit` called at wrong time (#28229)
- fix(unstable): lint plugin `ObjectPattern` inconsistencies (#28359)
- fix(unstable): lint plugin child combinator not working with groups (#28360)
- fix(unstable): lint plugin fix `:has()`, `:is/where/matches` and `:not()`
selectors (#28348)
- fix(unstable): lint plugin regex attribute selector not working (#28340)
- fix(unstable): lint plugin swapped exported and source for
ExportAllDeclaration (#28357)
- fix(unstable): wrong node with shorthand ObjectPattern + AssignPattern
(#28402)
- fix(unstable/lint): remove duplicated `Fix` vs `FixData` interface (#28344)
- fix(webgpu): move `isFallbackAdapter` from `GPUAdapter` to `GPUAdapterInfo`
(#28650)
- fix: add "module.exports" export to ESM CJS wrapper module (#28373)
- fix: add info suggestion for `unsafely-ignore-certificate-errors` and add
`--help=full` (#28203)
- fix: add stackTraceLimit to ErrorConstructor interface and removed
ErrorWithStackTraceLimit interface (#28539)
- fix: better cjs vs esm module detection and upgrade swc (#28810)
- fix: better error message for bare run in file-like case (#29055)
- fix: break unstable lockfile v5 to remove "has" from property names (#29095)
- fix: correct reported typescript version (#29053)
- fix: correctly style rust logs with colors (#29040)
- fix: deno_ast 0.46 (#28331)
- fix: don't show panic traces for non-official builds (#28931)
- fix: dont strip n-api symbols in `denort` on mac (#28800)
- fix: fix bugs with rendering of authority in serve urls (#29009)
- fix: make --allow-env stronger that --deny-env (#29079)
- fix: move otel logic into otel (#29073)
- fix: only strip local and debug symbols from macOS binary (#28758)
- fix: remove unnecessary whitespace in prompt function (#28868)
- fix: remove warnings for bare node builtins (#29000)
- fix: resolve shebang parse error in deno doc --test (#26079)
- fix: respect lockfile for multiple available jsr versions (#28375)
- fix: show referrer for Wasm module dependency errors (#28653)
- fix: support vsock in DENO_SERVE_ADDRESS (#28941)
- fix: unhandled rejection from quic (#28448)
- fix: use full SHA for canary panic URLs (#28819)
- fix: use proper version for v2.3.0-rc.0 (#28967)
- fix: vsock nits (#28851)
- perf(ext/node): improve node:http createServer performance (#29069)
- perf(ext/node): lazily listen to the abort signal of request object (#29071)
- perf(fs): don't canonicalize path when opening file if `--allow-all` is passed
(#28716)
- perf(http): instantiate generic functions in `deno_http`, increase opt-level
for some more hyper deps (#28317)
- perf(install): keep parsed npm package info in memory cache (#28636)
- perf(install): only read initialized file if we care about the tags (#28242)
- perf(lockfile): slightly terser lockfile formatting, remove old lockfile code
(#28992)
- perf(lsp): don't set resolver npm reqs if unchanged (#28302)
- perf(lsp): lazily start the ts server (#28392)
- perf(lsp): register semantic tokens provider upon opening enabled doc (#28384)
- perf(npm): don't try to cache npm packages we've already cached (#28938)
- perf(npm): load npm resolution snapshot directly from lockfile (#28647)
- perf: remote symbolicate stack traces (#28470)