Deno v2.7.14stable Released Apr 28, 2026
Impact Score: 5/10

Deno v2.7.14 โ€” 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.

Compatibility not verified โ€” check source notes
๐Ÿ“„ .MD
โšก Executive Summary (TL;DR)

Deno v2.7.14. Source highlight: feat(ext/node): add fs.Utf8Stream

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 (1)

  • feat(ext/node): add fs.Utf8Stream

โšก Performance & Enhancements (3)

  • perf(ext/node): pool 64KB read buffers to reduce allocation pressure (#33395)
  • perf: optimize worker and MessagePort message passing (#32657)
  • perf: upgrade rusty_v8 to 147.4.0 (#33422)

๐Ÿ”ง Bug Fixes & Patches (6)

  • feat(upgrade): delta updates via bsdiff patches (#33274)
  • fix(bundle): treat CSS same-document fragment URLs as external (#33492)
  • fix(cache): add missing CacheStorage.keys() and Cache.keys() methods (#33275)
  • fix(config): don't exclude workspace members from deploy file patterns
  • fix(coverage): exclude transformer-injected helpers from coverage (#33481)
  • fix(doc): remove background from operators in dark mode code blocks (#33267)
๐Ÿ“„ View Raw Release Notes (Original Developer Log)
### 2.7.14 / 2026.04.28 - feat(ext/node): add fs.Utf8Stream - feat(upgrade): delta updates via bsdiff patches (#33274) - fix(bundle): treat CSS same-document fragment URLs as external (#33492) - fix(cache): add missing CacheStorage.keys() and Cache.keys() methods (#33275) - fix(config): don't exclude workspace members from deploy file patterns (#33562) - fix(coverage): exclude transformer-injected helpers from coverage (#33481) - fix(doc): remove background from operators in dark mode code blocks (#33267) - fix(ext/bundle): clearer error when Deno.bundle is called in compiled binary (#33503) - fix(ext/crypto): throw TypeMismatchError for non-TypedArray in getRand (#33470) - fix(ext/fetch): don't mutate caller's options in Deno.createHttpClient (#33497) - fix(ext/fetch): use byte ReadableStream for Node Readable request bodies (#33432) - fix(ext/fs): normalize Deno.watchFs paths so events drop ./ segments (#33490) - fix(ext/napi): implement napi_async_init and napi_async_destroy (#33282) - fix(ext/net): default Deno.listenDatagram hostname to 0.0.0.0 (#33496) - fix(ext/node): accept X.509v1 server certs in tls.createServer (#33505) - fix(ext/node): accept string mode in fs.mkdir and fs.mkdirSync (#33409) - fix(ext/node): add Server BlockList, asyncDispose, and misc net improvements (#33417) - fix(ext/node): add _idleStart and _idleTimeout to Timeout (#33604) - fix(ext/node): align crypto random* validation with Node (#33456) - fix(ext/node): align fs.truncate / ftruncate argument validation with Node (#33418) - fix(ext/node): align module.builtinModules / getBuiltinModule with Node (#33404) - fix(ext/node): align node:module behavior with Node (#33482) - fix(ext/node): align node:test `it`/`describe` with Node, enable passing compat tests (#33593) - fix(ext/node): align util.styleText with Node (#33547) - fix(ext/node): allow `https.Agent()` without `new`, enable passing compat tests (#33601) - fix(ext/node): async fs.stat/lstat throwIfNoEntry + deprecate fs.Stats (#33436) - fix(ext/node): attach input URL to ERR_INVALID_FILE_URL_PATH (#33398) - fix(ext/node): attach path/syscall to fs.lstat / realpath / link errors (#33446) - fix(ext/node): brand-check SecureContext._external accessor (#33569) - fix(ext/node): cache hash digest so it survives stream.pipeline (#33440) - fix(ext/node): cancelling Readable.toWeb(req) no longer destroys the socket (#33570) - fix(ext/node): close fd on error in http2 stream respondWithFile (#33614) - fix(ext/node): correct buffer-length check in `Readable._fromList` decoder branch (#33624) - fix(ext/node): defer drain in http2 shutdownWritable so pushStream after end() works (#33619) - fix(ext/node): drain pending TLS cleartext in enc_write_cb (#33378) - fix(ext/node): emit Buffer for http2 'goaway' opaqueData (#33502) - fix(ext/node): emit DEP0031 deprecation warning for ecdh.setPublicKey( (#33468) - fix(ext/node): emit DEP0182 deprecation for short AES-GCM auth tag (#33469) - fix(ext/node): emit HPE_INVALID_TRANSFER_ENCODING for CL+chunked respo (#33488) - fix(ext/node): emit StatWatcher 'stop' event asynchronously (#33448) - fix(ext/node): emit TimeoutNaNWarning for invalid timer durations (#33472) - fix(ext/node): emit http2 frameError on send failure with translated HTTP/2 error code (#33631) - fix(ext/node): emit stream-level PROTOCOL_ERROR in node:http2 - fix(ext/node): emit tlsClientError instead of crashing on TLS init failure (#33429) - fix(ext/node): enable test-als-defaultvalue-original (AsyncLocalStorage default value) (#33464) - fix(ext/node): encode http2 headers as Latin-1 to fix response splitting (#33531) - fix(ext/node): encode more chars in url.pathToFileURL() (#33397) - fix(ext/node): enforce HTTP/2 server header list size limits (#33494) - fix(ext/node): enforce http2 maxSessionInvalidFrames limit (#33515) - fix(ext/node): expose http2 sensitive headers received with NV_FLAG_NO_INDEX flag (#33626) - fix(ext/node): fix EEXIST error and data loss in writeFileSync on Windows (#33413) - fix(ext/node): fix ERR_INVALID_CHAR message & OutgoingMessage.prototype.write (#33430) - fix(ext/node): fix TLS client certificate authentication verification (#33576) - fix(ext/node): fix TLS socket error ordering and app data leak before identity verification (#33585) - fix(ext/node): fix TLS socket lifecycle and readStop backpressure (#33524) - fix(ext/node): fix closeIdleConnections destroying active connections (#33596) - fix(ext/node): fix fs.glob skipping siblings with *_/../_ patterns (#33372) - fix(ext/node): fix spawnSync internal API for monkey-patching and killSignal (#33545) - fix(ext/node): flush GOAWAY before destroying http2 socket and expose internal/http2/core (#33566) - fix(ext/node): flush HTTP/2 client preface after settings submission (#33387) - fix(ext/node): forward enableConnectProtocol setting to peer in HTTP/2 SETTINGS frame (#33616) - fix(ext/node): handle undefined http2 ping payload and cancel pending pings on destroy (#33561) - fix(ext/node): hide aggregateTwoErrors frame in AggregateError stack (#33402) - fix(ext/node): honor http2 strictFieldWhitespaceValidation option (#33506) - fix(ext/node): honor requestCert/ca on node:tls server, populate getPeerCertificate() (#33439) - fix(ext/node): honor weight option in http2 client.request and emit DEP0194 (#33622) - fix(ext/node): http2 createConnection support and per-frame socket writes (#33520) - fix(ext/node): implement BlockList.rules / isBlockList / toJSON / fromJSON (#33445) - fix(ext/node): implement Socket.resetAndDestroy with TCP RST in node:net (#33415) - fix(ext/node): implement StatWatcher.ref() / unref() (#33408) - fix(ext/node): implement dns Resolver cancel() and timeout support (#33580) - fix(ext/node): implement dns.reverse() and fix dns.lookup() family parameter (#33579) - fix(ext/node): implement fs.mkdtempDisposableSync / fsPromises.mkdtempDisposable (#33533) - fix(ext/node): implement node:cluster fork/Worker and worker-side detection (#33493) - fix(ext/node): implement process.debugPort with ToInt32 coercion (#33403) - fix(ext/node): import kIncomingMessage/kServerResponse in http2 allowHTTP1 fallback (#33435) - fix(ext/node): improve Node.js timer compatibility (#33479) - fix(ext/node): improve perf_hooks timerify and add missing exports (#33581) - fix(ext/node): include accepted values in Console colorMode error (#33424) - fix(ext/node): isolate parentPort from globalThis in worker_threads (#32596) - fix(ext/node): make Buffer.prototype methods generic-callable (#33466) - fix(ext/node): make http2 session.origin() round-trip origins and respect TLS servername (#33629) - fix(ext/node): make process.constructor a proper instanceof check (#33447) - fix(ext/node): name custom-promisified functions after their originals (#33407) - fix(ext/node): null-proto child_process options to block prototype pollution (#33555) - fix(ext/node): pass reusePort flags in Server.listen() without host (#33530) - fix(ext/node): pass signal name to process signal handlers (#33425) - fix(ext/node): pass stream fd to child process stdio instead of inheriting (#33525) - fix(ext/node): plumb llhttp error code, reason, and bytes parsed through HTTPParser (#33591) - fix(ext/node): prevent duplicate close emit when http2 client socket i (#33538) - fix(ext/node): re-arm Windows named pipe server after accept (#33369) - fix(ext/node): rebind http2 state buffers post-snapshot, enforce maxHeaderListPairs (#33495) - fix(ext/node): reject non-ArrayBufferView data in fs.writeFileSync (#33406) - fix(ext/node): rename _destroySsl to _destroySSL to match Node.js API (#33599) - fix(ext/node): replace unwrap with error propagation in parallel cp (#33396) - fix(ext/node): return relative path from fs.watch with recursive option (#33428) - fix(ext/node): strip trailing dot from SRV target in dns.resolveSrv() (#33578) - fix(ext/node): submit http2 RST_STREAM before flushing END_STREAM DATA frame on respondWithFD read (#33633) - fix(ext/node): support ALPNCallback in http2.createSecureServer (#33521) - fix(ext/node): support BlockList, AbortSignal, and constructor options in node:net Socket (#33414) - fix(ext/node): support `ignore` option in `fs.watch` and `fs.promises.watch` (#33610) - fix(ext/node): support encoding option in fs.readdir; don't double-call glob callback (#33501) - fix(ext/node): support http2 pushStream and client push events (#33516) - fix(ext/node): support reusePort option and fix bind/pipe handling in node:net (#33416) - fix(ext/node): support util.promisify on http2.connect (#33489) - fix(ext/node): support v1 X.509 certs and http2 ALPN fallback (#33510) - fix(ext/node): throw ERR_INVALID_ARG_VALUE when rmdir gets options.recursive (#33565) - fix(ext/node): throw ERR_INVALID_URL from http/https request string URL (#33427) - fix(ext/node): throw TypeError for Symbol keys/values in process.env (#33399) - fix(ext/node): timer _destroyed flag, Symbol.dispose, and setInterval abort (#33528) - fix(ext/node): track http2 custom settings and SETTINGS ACK callbacks (#33518) - fix(ext/node): treat unsolicited HTTP/2 PING ACK as connection-level protocol error (#33625) - fix(ext/node): use AbortSignal.addEventListener in addAbortListener (#33557) - fix(ext/node): use ERR_INVALID_ARG_TYPE for tls.createServer non-object options (#33589) - fix(ext/node): use ERR_INVALID_ARG_VALUE in module.createRequire (#33449) - fix(ext/node): use Node's address-type check in dgram Socket.send (#33420) - fix(ext/node): use node:timers for http server connection checks, expo (#33483) - fix(ext/node): use proper error codes for require() invalid arguments (#33609) - fix(ext/node): validate `fs.watch` boolean options (#33627) - fix(ext/node): validate boolean arg in process.setSourceMapsEnabled (#33473) - fix(ext/node): validate ciphers option in tls.createSecureContext() (#33597) - fix(ext/node): validate dgram options.recvBufferSize / sendBufferSize (#33444) - fix(ext/node): validate oaepHash in publicEncrypt/privateDecrypt (#33388) - fix(ext/node): validate options.type in Readable.toWeb (#33560) - fix(ext/node): validate process.chdir argument is a string (#33401) - fix(ext/node): walk sandbox prototype chain in vm property_query (#33463) - fix(ext/node): wire JSStreamSocket handle write/shutdown for http2 (#33526) - fix(ext/node): wire up captureRejection handler for http2 servers (#33542) - fix(ext/node): yield to I/O in http2 write path so stream pipeline finishes (#33541) - fix(ext/web): align AbortSignal.timeout error message with Node (#33460) - fix(ext/web): allow transferring non-serializable types in structuredClone (#33491) - fix(ext/web): handle late write racing with TransformStream cancel (#33478) - fix(ext/web): narrow ReadableStreamBYOBRequest.view to Uint8Array (#33477) - fix(ext/web): retain `source` from MessageEventInit (#33500) - fix(ext/web): route console.dirxml through the log printer (#33443) - fix(ext/web): set ERR_MISSING_ARGS code on URL.revokeObjectURL no-arg (#33471) - fix(ext/web): structuredClone of non-serializable Web types throws DataCloneError (#33465) - fix(ext/webidl): set ERR_ILLEGAL_CONSTRUCTOR code on illegal constructor calls (#33535) - fix(ext/webidl): set ERR_INVALID_THIS code on brand-check TypeError (#33467) - fix(node/buffer): fix panic in transcode with odd-length UTF-16LE input (#33390) - fix(node/compat): disable flaky test-child-process-exec-kill-throws on Windows (#33426) - fix(node/compat): disable flaky test-fs-read-stream-pos on Windows (#33421) - fix(node/compat): fix shard report merging and fetching in CI reporting (#33431) - fix(permissions): normalize paths for macOS filesystem comparison (#33451) - fix(task): match workspace directory name in --filter (#33499) - fix(task): use explicit workspace root check in directory-name fallback (#33540) - fix(x): forward --unstable-* flags to JSR and URL targets (#33450) - fix: bound fs.readFile on non-terminating sources (#33262) - fix: drop config-only unstable features from unstable_args() (#33452) - fix: match single-char wildcard segments in npm package imports (#33513) - perf(ext/node): pool 64KB read buffers to reduce allocation pressure (#33395) - perf: optimize worker and MessagePort message passing (#32657) - perf: upgrade rusty_v8 to 147.4.0 (#33422)