Releases: denoland/deno
v2.3.3
Upgrade to 2.3.3:
deno upgrade
Or install for the first time
curl -fsSL https://deno.land/install.sh | sh
[This is a patch release on top of 2.3.2 with contained the majority of the changes.]
2.3.3 / 2025.05.16
fix(check): ignore errors on ambient modules (#29135)
Revert "fix(fmt): upgrade markup_fmt and malva" (#29325)
2.3.2 / 2025.05.15
feat(coverage): add dark-mode to HTML coverage report (#29267)
feat(ext/fetch): add support for fetch on unix sockets (#29154)
feat(ext/fetch): support custom DNS resolver (#27740)
feat(jupyter): allow to install and maintain multiple kernels (#29249)
feat(lsp): add description in TaskDefinition (#29244)
feat(otel): add events for boot failure and uncaught error (#29287)
feat(unstable): notify control sock on serving (#29173)
feat(unstable): support comments in lint plugin (#29189)
feat: Add support for DENO_TRUST_PROXY_HEADERS env var (#29296)
feat: DENO_SERVE_ADDRESS duplicate option (#29109)
feat: support unconfigured runtime in serve subcommand (#29172)
fix(cache): added support for the --env-file flag (#29160)
fix(check): do not add @types/node@* to lockfile if a @types/node req already exists (#29270)
fix(check): don't assert unique normalized specifiers (#29274)
fix(check): write lockfile after type checking (#29265)
fix(cli): configure v8 isolate with cgroups-constrained memory limit (#29078)
fix(cli/hmr): print compile error with exception details (#27597)
fix(coverage): don't panic if all covered files are ignored via directive (#29250)
fix(dts): add Atomics.pause, Promise.try and RegExp.escape (#29186)
fix(ext/canvas): createImageBitmap must ignore the Blob.type value (#28741)
fix(ext/node): Fix dns.lookup when promisified with options.all (#29167)
fix(ext/node): Fix export loadEnvFile from node:process (#29237)
fix(ext/node): Fix fast method proto unwraps in AsyncWrap (#29117)
fix(ext/node): Support mTLS connections node compatibility (#28937)
fix(ext/node): TLS server unref (#29279)
fix(ext/node): arrayBufferViewHasBuffer internal util (#28827)
fix(ext/node): getColorDepth for writable stdio streams (#29176)
fix(ext/node): add AES CTR to supported ciphers list (#29273)
fix(ext/node): add assert.CallTracker (#29226)
fix(ext/node): align input validation of Buffer.compare (#29275)
fix(ext/node): allow rejectUnauthorized: false in node:tls (#29245)
fix(ext/node): dgram multicast group membership (#29207)
fix(ext/node): don't use user manipulated Response objects, use correct rawHeaders structure (#29105)
fix(ext/node): export CallTracker as named export (#29271)
fix(ext/node): hold weak reference to sqlite database in instances (#29210)
fix(ext/node): implement dgram setBroadcast (#29195)
fix(ext/node): implement dgram setMulticastLoopback (#29241)
fix(ext/node): implement dgram socket setMulticastTTL (#29232)
fix(ext/node): support http over unix sockets (#29182)
fix(ext/node): use "localhost" as default tls hostname (#29231)
fix(ext/node): use primordials in ext/node/polyfills/internal/async_hooks.ts (#29191)
fix(ext/node): use primordials in ext/node/polyfills/internal/cli_table.ts (#29257)
fix(ext/node): use primordials in ext/node/polyfills/internal/dgram.ts (#29204)
fix(ext/node): use primordials in ext/node/polyfills/internal/fs/handle.ts (#29239)
fix(ext/node): use primordials in ext/node/polyfills/internal/idna.ts (#29085)
fix(ext/node): use primordials in ext/node/polyfills/internal/net.ts (#29297)
fix(ext/node): use primordials in ext/node/polyfills/internal/normalize_encoding.mjs (#29283)
fix(ext/node): use primordials in ext/node/polyfills/internal/options.ts (#29119)
fix(ext/node): use primordials in ext/node/polyfills/internal/querystring.ts (#29264)
fix(ext/node): use primordials in ext/node/polyfills/internal/stream_base_commons.ts (#29290)
fix(ext/node): use primordials in ext/node/polyfills/internal/timers.mjs (#29269)
fix(ext/node): use primordials in ext/node/polyfills/internal/url.ts (#29146)
fix(ext/node): use primordials in ext/node/polyfills/internal/validators.mjs (#29302)
fix(ext/node): use primordials in ext/node/polyfills/_fs/_fs_mkdtemp.ts (#29072)
fix(ext/os): Fix duplicate 'openbsd' cfg attribute (#28607)
fix(ext/process): suppress child process kill errors in onAbort handler (#29193)
fix(flags): do not panic parsing invalid --allow-import flag (#29118)
fix(fmt): fail command when embedded language has syntax error (#29259)
fix(fmt): indent width should be ignored when formatting with use tabs set to true (#29205)
fix(fmt): upgrade markup_fmt and malva (#29168)
fix(lsp): discard quick fixes importing /node_modules/ paths (#29194)
fix(lsp): ignore 'for await' diagnostics in jupyter cells (#29114)
fix(lsp): use correct resolution kind when checking for no-export-npm (#29180)
fix(node/test): basic support for t.skip and t.todo (#29222)
fix(node:http): ServerResponse.req not set (#29211)
fix(npm): add some context to errors on tarball extraction failure (#29145)
fix(npm): handle global cache missing version in pkg info of pkg existing in npm snapshot (#29131)
fix(npm): respect etag for npm packument caching (#29130)
fix(otel): don't panic when using worker threads (#29248)
fix(precompile): escape string literal jsx children (#29200)
fix(repl): use object_id for repl internal (#29163)
fix(types): Change ffi native type from Uint8Array -> Uint8Array (#29127)
fix(upgrade): skip version comparison when upgrading (#29112)
fix(vendor): strip jsr version meta module graph data (#29120)
fix: allow specifying otel config in --env-file (#29240)
fix: bump default @types/node version range to 22.15.14 (#28407)
fix: handling of contradictory global permission flags (#29213)
fix: inspector rewrite resource name to url (#29216)
fix: terminate control sock event with newline (#29184)
fix: update deno_core (#29166)
fix: use v8 instead of swc for explicit resource management (#29282)
perf(lsp): don't diff 10,000+ line files for formatting (#29162)
perf(lsp): truncate json files larger than 10mb (#29192)
perf(npm): deserialize cached npm packuments on blocking task (#29137)
perf(publish): fetch all missing package status in parallel (#27935)
v2.3.2
2.3.2 / 2025.05.15
Deno v2.3.2 contains a regression with respect to CSS formatting. Users are encouraged to upgrade to Deno v2.3.3 to avoid the problem.
v2.2.13
v2.1.13
v2.3.1
2.3.1 / 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
v2.3.0
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 runpaths
(#28424) - feat(cli):
deno check
maps todeno 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
anddeviceStopCapture
(#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
todeno 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
andshake-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 onwinapi
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...
v2.2.12
v2.2.11
2.2.11 / 2025.04.18
- fix(ext/node): Fix
Writable.toWeb()
(#28914) - fix(ext/node): add
assert
property to test context object (#28904) - fix(install/global): do not append
bin
toDENO_INSTALL_ROOT
when ends with
bin
(#26446) - fix(npm): panic when using tag with patched package (#28900)
- fix(task): document source of tasks, fix punctuation (#28413)
- fix: better cjs vs esm module detection and upgrade swc (#28810)
- fix: remove unnecessary whitespace in prompt function (#28868)
- fix: resolve shebang parse error in deno doc --test (#26079)
- perf(npm): don't try to cache npm packages we've already cached (#28938)
v2.2.10
Upgrade
deno upgrade
Or install for the first time
curl -fsSL https://deno.land/install.sh | sh
fix: enable explicit resource management for JavaScript (#28119)
feat(unstable): support linux vsock (#28725)
fix(ext/node): add basic support of suite/describe in node:test (#28847)
fix(ext/node): export test as property of default export (#28881)
fix(ext/node): querystring fallback to default decoder (#28838)
fix(ext/node): upgrade node:stream (#28855)
fix(fmt): upgrade malva to 0.11.2 (#28871)
fix(install): read extra package info from node_modules and fallback to registry (#28893)
fix(unstable): vsock nits (#28851)
v2.2.9
Upgrade
deno upgrade
Or install for the first time
curl -fsSL https://deno.land/install.sh | sh
deno compile
fixes
Two fixes make the deno compile
tool more robust. First, a bug causing a panic when a node_modules
directory was included during compilation was fixed (#28782). Previously, running deno compile
in a project with a node_modules
folder could crash the compiler; now it handles such folders gracefully without errors. Second, on Windows, executable icons are embedded correctly when using the --icon
option (#28771). Deno now preserves the proper resource ordering for multi-resolution .ico
files, so compiled .exe files will display their icon in all sizes as expected. Together, these improvements make Deno’s single-binary compilation more reliable across different project structures and platforms.
Node.js Compatibility Enhancements
This release brings a host of improvements to Deno’s Node compatibility layer, implementing missing APIs and fixing inconsistencies:
- File System Streams: The
fs/promises
FileHandle class now supports the.createReadStream()
and.createWriteStream()
methods (#28700). - Command-Line Parsing: The experimental
util.parseArgs()
API now correctly supports negated flags (the--no-
prefix) via itsallowNegative
option (#28811). - Buffer APIs: Deno implements the new
Buffer.copyBytesFrom()
static method (#28829) and ensures that cipher methods return a NodeBuffer
object (#28826). - Crypto Algorithms: SHAKE-128 and SHAKE-256 algorithm names are now aliased with hyphenated forms (#28451).
- Process and OS: Implements
process.loadEnvFile(path)
(#28824) and a working.reset()
on the event loop delay histogram (#2888). - Streams and Zlib:
stream.finished()
now supports Web Streams (#28600); zlib errors are more descriptive (#28831). - Child Processes:
spawnSync
now accepts theinput
option (#28792).
npm and Package Management Fixes
- Handle missing
"bin"
inpackage.json
by using registry metadata (#28822). - Fix regression where postinstall scripts without extensions were skipped (#28786).
- Unstable ability to load npm resolution snapshot directly from lockfile for faster startup (#28647).
Task Runner Shell Features
deno task
now supports backticks and tilde (~
) expansion (#28832). For example:
{
"tasks": {
// outputs to a file with a path like: /home/user/logs/2025-04-12T01:38-04:00.log
"build": "deno job.ts > ~/logs/`date -Im`.log"
}
}
Developer Tools (LSP & Linting)
- Filter out unmapped npm cache paths from auto-imports (#28841).
- Add decorators to the lint AST (#28834), fix parent types (#28802), and group traversal (#28803).
Crash Reporting & Symbolication Bug Fixes
This patch release includes fixes for issues introduced by the new panic.deno.com crash reporting system added in recent versions. On macOS, the Deno binary now preserves Node API (N-API) symbols that were previously stripped out as part of the size reduction effort (#28800). This resolves a regression where native Node addons loaded via process.dlopen()
could fail to load. It also ensures that native panics involving these symbols can still be properly symbolicated.
In addition, canary panic URLs now include the full Git commit SHA (#28819), improving reliability of remote symbolication for nightly builds. These changes fix rough edges in the new crash reporting pipeline and restore compatibility with common use cases.