unstale

npm / undici

undici

What changed in undici 6 to 8, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-17.

25 breaking66 security27 new APIs and options8 performance9 behavior and defaults1 tooling225 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.1.1 on npm

undici 8269 changes

Breaking changes 21

Security 51

  • Agent preserves function-valued TLS options when creating per-origin dispatchers, so custom certificate or public-key verification callbacks are not silently dropped.

    6.29.1, 7.30.1, 8.12.2release notesrelease notesrelease notes

  • The cache interceptor verifies response origin before caching cross-origin redirects and preserves redirect-hop cache-control policy.

    7.30.1, 8.12.2release notesrelease notes

  • The content-encoding chain is validated before creating the body stream, and oversized chains are aborted safely.

    6.29.1, 7.30.1, 8.12.2release notesrelease notesrelease notes

  • Retained EventSource parser state is bounded, including field counts, buffered chunks, unfinished-line length, and retained field data.

    6.29.1, 7.30.1, 8.12.2release notesrelease notesrelease notes

  • fetch() normalizes mixed-case and uppercase SRI algorithm tokens before validation and digest selection.

    7.30.1, 8.12.2release notesrelease notes

  • The interceptor limits the size of response error bodies.

    8.12.0release notes

  • The zstd window size is limited to 8 MB.

    8.12.0release notes

  • Upstream creation now preserves function-valued connect and legacy tls options, including custom TLS certificate validation callbacks.

    7.29.1, 8.10.2release notesrelease notessecurity advisory

  • Cache reads and writes are now restricted to safe HTTP methods, while successful unsafe requests still invalidate cached entries.

    7.29.1, 8.10.2release notessecurity advisory

  • Proxy-Agent now guards Proxy-Authorization in iterable header containers.

    8.10.2release notes

  • A terminal retry failure after response headers are exposed now propagates to the exposed body, preventing consumers from hanging indefinitely.

    7.29.1, 8.10.2release notesrelease notessecurity advisory

  • Fetch now sends Sec-Fetch-Mode only to potentially trustworthy URLs.

    8.10.2release notes

  • Unbounded recursion in the Set-Cookie attribute parser is avoided.

    7.30.1, 8.10.2release notesrelease notes

  • undici vulnerable to caching and replay of unsafe HTTP method responses

    7.29.1, 8.10.2security advisory

  • undici vulnerable to cross-origin cache poisoning via missing origin isolation in interceptors

    8.10.2security advisoryrelease notes

  • undici vulnerable to cross-user cookie disclosure via Set-Cookie caching in shared caches

    7.29.1, 8.10.2security advisoryrelease notesrelease notes

  • undici vulnerable to Denial of Service via orphaned RetryHandler response body

    7.29.1, 8.10.2security advisory

  • undici vulnerable to Denial of Service via unbounded decompression of compressed responses

    7.29.1, 8.10.2security advisory

  • undici vulnerable to Denial of Service via unhandled error in WebSocket permessage-deflate decompression

    6.28.1, 7.29.1, 8.10.2security advisoryrelease notesrelease notesrelease notes

  • undici vulnerable to Denial of Service via unrequested WebSocket subprotocol

    6.28.1, 7.29.1, 8.10.2security advisory

  • undici vulnerable to Denial of Service via WebSocketStream unclean close

    7.29.1, 8.10.2security advisory

  • undici vulnerable to downstream response splitting via retry interceptor

    6.28.1, 7.29.1, 8.10.2security advisoryrelease notesrelease notesrelease notes

  • undici vulnerable to response truncation via oversized chunked responses in the dump interceptor

    7.29.1, 8.10.2security advisory

  • undici vulnerable to TLS certificate validation bypass via dropped connect options in BalancedPool

    7.29.1, 8.10.2security advisory

  • A server now rejects a handshake with protocol error 1002 if it selects a subprotocol that was not requested.

    6.28.1, 7.29.1, 8.10.2release notessecurity advisory

  • An unclean close with a locked writable stream now propagates failure through the retained writable stream controller instead of creating an unobserved rejected promise.

    7.29.1, 8.10.2release notesrelease notessecurity advisory

  • EventSource event size is limited.

    8.10.1release notes

  • The cache parser now handles empty qualified directives conservatively and safely handles mixed qualified and unqualified directives, preventing cross-user information disclosure or a parse-time crash.

    7.29.0, 8.9.0release notesrelease notessecurity advisory

  • Cache-Control parsing now normalizes optional whitespace around = in qualified no-cache and private directives and applies conservative cache decisions to prevent shared-cache restrictions from being bypassed.

    7.29.0, 8.9.0release notesrelease notessecurity advisory

  • Non-string header values are validated after coercion, including array elements, preventing crafted toString() or Symbol.toPrimitive implementations from introducing CRLF sequences.

    8.9.0release notes

  • undici vulnerable to cookie attribute injection via unsanitized domain and unparsed setCookie fields

    6.28.0, 7.29.0, 8.9.0security advisory

  • undici vulnerable to CRLF Injection via blob-like body 'type' property

    6.28.0, 7.29.0, 8.9.0security advisoryrelease notesrelease notesrelease notes

  • undici vulnerable to cross-user information disclosure and parse-time crash via degenerate private cache directives

    7.29.0, 8.9.0security advisory

  • undici vulnerable to cross-user information disclosure via whitespace around equals in Cache-Control directives

    7.29.0, 8.9.0security advisory

  • undici vulnerable to downstream response desynchronization via retry interceptor

    6.28.0, 7.29.0, 8.9.0security advisory

  • Location and Content-Location URIs are invalidated on unsafe methods.

    8.8.0release notes

  • Trims whitespace-padded qualified field names so shared caches do not incorrectly cache authenticated responses as public.

    7.28.0, 8.5.0release notesrelease notes

  • undici vulnerable to cross-user information disclosure via shared cache whitespace bypass

    7.28.0, 8.5.0security advisory

  • undici vulnerable to HTTP header injection via Set-Cookie percent-decoding

    6.27.0, 7.28.0, 8.5.0security advisoryrelease notesrelease notes

  • undici vulnerable to HTTP response queue poisoning via keep-alive socket reuse

    6.27.0, 7.28.0, 8.5.0security advisoryrelease notesrelease notesrelease notes

  • undici vulnerable to Set-Cookie SameSite attribute downgrade via permissive substring matching

    6.27.0, 7.28.0, 8.5.0security advisory

  • undici vulnerable to TLS certificate validation bypass via dropped requestTls in SOCKS5 ProxyAgent

    7.28.0, 8.5.0security advisoryrelease notesrelease notes

  • undici WebSocket client vulnerable to denial of service via cumulative fragment bypass

    8.5.0security advisory

  • undici WebSocket client vulnerable to denial of service via fragment count bypass

    6.27.0, 7.28.0, 8.5.0security advisory

  • Enforces the configured maximum payload size across all fragments in a message, preventing fragmented messages from exceeding the limit.

    8.5.0release notes

  • Limits the number of fragments in a WebSocket message to prevent unbounded memory growth and denial of service.

    7.28.0, 8.5.0release notesrelease notes

  • Rejects pipelined TLS altname errors.

    8.4.1release notes

  • WebSocket upgrades are now rejected when the response status is not 200.

    8.2.0release notes

  • SOCKS5 now enforces authenticated state before issuing CONNECT.

    8.2.0release notes

  • Uses per-origin pools to prevent requests, credentials, or responses from being routed across origins.

    7.28.0, 8.2.0release notesrelease notes

  • undici vulnerable to cross-origin request routing via SOCKS5 proxy pool reuse

    7.28.0, 8.2.0security advisory

New APIs and options 11

  • An alternative experimental HTTP parser is available.

    8.12.0release notes

  • The MockAgent namespace now exposes the PendingInterceptor and PendingInterceptorsFormatter types.

    8.10.2release notes

  • HTTP QUERY method support was added.

    8.6.0release notes

  • Adds textStream() to bodyMixin, providing a way to consume the body as a text stream.

    8.5.0release notes

  • The connect option offers HTTP/2 first in ALPN.

    8.4.0release notes

  • A redirect option was added to strip headers on redirect.

    8.4.0release notes

  • Adds normalizeBody to SnapshotAgent.

    8.3.0release notes

  • Adds normalizeQuery to SnapshotAgent.

    8.3.0release notes

  • Adds TOpaque to client connect options.

    8.3.0release notes

  • Adds throwOnMaxRedirect to the interceptor options and its types.

    8.2.0release notes

  • Adds configurable maxPayloadSize for WebSocket.

    8.1.0release notes

Performance 6

Behavior and default changes 8

  • DataView reply bodies are now supported.

    8.10.0release notes

  • Mock reply option callbacks can now be asynchronous.

    8.8.0release notes

  • The Accept-Encoding header used by fetch was updated.

    8.6.0release notes

  • HTTP/2 delivers an early final response to an Expect: 100-continue request.

    8.6.0release notes

  • Allows HTTP/2 POST requests to be multiplexed.

    8.5.0release notes

  • The HTTP/2 Client now multiplexes requests.

    8.4.0release notes

  • ProxyAgent now supports proxy authentication using a username without a password.

    8.2.0release notes

  • Built-in fetch mirrors the legacy global dispatcher.

    8.0.1release notes

Tooling 1

  • WPT tests are split out of the npm test command.

    8.12.0release notes

Fixes and other changes 171

  • Exceptions from downstream response handlers during asynchronous decompression are converted into per-request errors instead of uncaught exceptions.

    7.30.1, 8.12.2release notesrelease notes

  • Post-connect certificate errors no longer terminate the process during HTTP/1.1 and HTTP/2 connection handling.

    6.29.1, 7.30.1, 8.12.2release notesrelease notesrelease notes

  • Frame parsing pauses when automatic PONG writes encounter backpressure and resumes after the socket drains.

    6.29.1, 7.30.1, 8.12.2release notesrelease notesrelease notes

  • The build:wasm npm script was restored.

    8.12.1release notes

  • HTTP/1 handling of 204 and 304 responses is corrected.

    8.12.0release notes

  • Cache event order for 304 responses is preserved when using async stores.

    8.12.0release notes

  • bodyTimeout is paused while HTTP/2 applies backpressure.

    8.12.0release notes

  • Cached responses now track abort state and preserve abort reasons after completion.

    8.12.0release notes

  • Decompression no longer inflates compress and x-compress encodings.

    8.12.0release notes

  • Numeric expires values outside the Date range are ignored.

    8.12.0release notes

  • DNS handles a null pick and no longer fails over to an expired record.

    8.12.0release notes

  • EventSource redirect targets and retry wrapping are corrected, and maxEventSize is enforced on unterminated lines.

    8.12.0release notes

  • Language tags in filename* parameters are parsed.

    8.12.0release notes

  • Connections are reset for transfers with no-body transfer encoding.

    8.12.0release notes

  • HTTP/2 headers are normalized for legacy dispatch handlers.

    8.12.0release notes

  • HTTP/2 now enforces the maximum number of concurrent streams.

    8.12.0release notes

  • MemoryCacheStore evicts least recently used entries.

    8.12.0release notes

  • Removed clients no longer pick up requests.

    8.12.0release notes

  • A header named __proto__ is preserved across features.

    8.12.0release notes

  • ProxyAgent handles the Host header correctly.

    8.12.0release notes

  • WebSocket and EventSource receive limits are retained behind dispatcher wrappers.

    8.12.0release notes

  • Request headers are retained when resuming a download.

    8.12.0release notes

  • HTTP/1 strictContentLength handling is corrected.

    8.12.0release notes

  • The throwOnMaxRedirect edge case is corrected, and max-redirect errors now include an error code.

    8.12.0release notes

  • A bug in TLS session caching is fixed.

    7.30.1, 8.12.0release notesrelease notes

  • Tracked response header field boundaries are preserved.

    8.12.0release notes

  • Cache entries with zero lifetime are always treated as stale.

    8.12.0release notes

  • Aborted requests no longer trigger reconnection.

    8.11.2release notes

  • Rejected HTTP/2 WebSocket streams are now closed.

    7.30.0, 8.11.2release notesrelease notes

  • Fixes a hang when a 3xx response has a large body.

    8.11.1release notes

  • Fixes bugs in WebSocketStream.

    8.11.1release notes

  • Pool fan-out is avoided during ALPN negotiation.

    8.11.0release notes

  • Successful cache hits are no longer reported as aborted.

    8.11.0release notes

  • Cache.add no longer hangs.

    8.11.0release notes

  • Cache.addAll no longer hangs.

    8.11.0release notes

  • Repeated content-encoding headers are joined during decompression.

    8.11.0release notes

  • Data URL parsing is improved.

    8.11.0release notes

  • Inherited Object.prototype names are treated as unsupported encodings.

    8.11.0release notes

  • The decompression interceptor now honors backpressure.

    7.30.0, 8.11.0release notesrelease notes

  • Requests settle when deduplicate is composed with retry.

    8.11.0release notes

  • An Expires value of 0 is retained when serializing a cookie.

    8.11.0release notes

  • Cookies named __proto__ are retained in getCookies.

    8.11.0release notes

  • A request is not replayed after GOAWAY if its response has already started.

    8.11.0release notes

  • The maxConcurrentStreams option is validated directly.

    8.11.0release notes

  • Non-upgrade legacy requests continue to use HTTP/2.

    8.11.0release notes

  • Queued requests remain alive when the last stream closes.

    8.11.0release notes

  • HTTP/2 response content-length is validated.

    8.11.0release notes

  • Sessions with open streams are no longer unreferenced.

    8.11.0release notes

  • Sessions remain referenced while requests are queued.

    8.11.0release notes

  • Wildcard semantics for NO_PROXY are corrected in EnvHttpProxyAgent.

    8.11.0release notes

  • Repeated iterable headers are preserved by ProxyAgent.

    8.11.0release notes

  • Informational responses are ignored in redirect history.

    8.11.0release notes

  • Responses settle after a connection closes.

    8.11.0release notes

  • SIMD is selectively re-enabled for ppc64.

    7.30.0, 8.11.0release notesrelease notes

  • The compressed flag is reset when a message completes.

    8.11.0release notes

  • The cache now refetches when a 304 response adds Vary fields.

    8.10.2release notes

  • Last-Event-ID is now validated on EventSource reconnect.

    8.10.2release notes

  • SOCKS5 connections now honor the configured connection timeout.

    8.10.2release notes

  • The retry backoff now honors the abort signal.

    8.10.1release notes

  • Pools with pending GOAWAY replays are preserved.

    8.10.1release notes

  • Cache entries are evicted when a key holds a single entry.

    8.10.1release notes

  • Dispatcher origin is propagated to composed interceptors.

    8.10.1release notes

  • A deduplicated request settles when it is aborted.

    8.10.1release notes

  • Dispatcher options are propagated to the base class.

    8.10.1release notes

  • HTTP/2 now honors maxResponseSize.

    8.10.1release notes

  • The dump interceptor rejects aborted requests even when the response is smaller than maxSize.

    8.10.1release notes

  • Persistent mocks re-invoke the reply callback, and MockAgent interceptors are preserved when using legacy global fetch.

    8.10.1release notes

  • Trailing dots are ignored when matching no_proxy.

    8.10.1release notes

  • Interceptor handlers now forward onBodySent and onRequestSent.

    8.10.1release notes

  • HTTP/2 forwards 1xx informational responses to onInfo.

    8.10.1release notes

  • The default retry strategy now honors the retryAfter option.

    8.10.1release notes

  • Negative Max-Age attributes are accepted when processing Set-Cookie.

    8.10.1release notes

  • The socket is destroyed when SOCKS5 negotiation times out.

    8.10.1release notes

  • cache() and deduplicate() no longer remain silently inert on Client or Pool instances without opts.origin.

    8.10.0release notes

  • Preserves the DNS origin hostname on sockets.

    8.10.0release notes

  • Ensures every HTTP/2 request settles.

    8.10.0release notes

  • Retries refused HTTP/2 streams.

    8.10.0release notes

  • Detaches the upgrade close handler after GOAWAY.

    8.10.0release notes

  • Uses setTimeout(0) again to prevent stalls on an idle event loop.

    8.10.0release notes

  • Non-string path matchers work with ignoreTrailingSlash.

    8.10.0release notes

  • Emits request body lifecycle hooks.

    8.10.0release notes

  • Bare IPv6 addresses in no_proxy are now matched.

    8.10.0release notes

  • Consumes a body even when its end event has already been emitted.

    8.10.0release notes

  • Preserves body bytes that arrive after setEncoding() is called.

    8.10.0release notes

  • Skips the content-length checkpoint for HEAD requests and 206 responses without content-range.

    8.10.0release notes

  • Forwards informational responses.

    8.10.0release notes

  • Evicts unused origin pools.

    8.10.0release notes

  • WebSocket now supports process.unref.

    8.10.0release notes

  • Decompression now preserves response trailers.

    8.9.0release notes

  • setGlobalDispatcher now handles a frozen globalThis.

    8.9.0release notes

  • Revalidation-only responses are stored so ETag revalidation can engage.

    8.8.0release notes

  • Decompression is skipped for HEAD responses.

    8.8.0release notes

  • Aborted streams are destroyed synchronously rather than via setImmediate.

    8.8.0release notes

  • Completed requests are released from the queue.

    8.8.0release notes

  • Request streams are completed on end instead of waiting for close.

    8.8.0release notes

  • Stream-bodied requests can now multiplex on a busy HTTP/2 session.

    8.8.0release notes

  • must-revalidate and proxy-revalidate now take precedence over max-stale and stale-if-error.

    8.8.0release notes

  • Body headers are removed when a redirect changes POST to GET.

    8.8.0release notes

  • A null init argument is now converted correctly.

    8.8.0release notes

  • A zero-delay Retry-After value is now handled correctly.

    8.8.0release notes

  • stale-if-error is honored for connection errors during revalidation.

    8.8.0release notes

  • Guards against a response event delivered after completion.

    8.7.0release notes

  • Destroys the stream on abort rather than relying on close().

    8.7.0release notes

  • Automatically detects HTTP proxy tunneling.

    8.7.0release notes

  • Open-ended Range values are no longer rejected.

    8.7.0release notes

  • Ignores chunks that arrive after consumption has completed.

    8.7.0release notes

  • Adds the static buildDispatch method to the RedirectHandler type definition.

    8.7.0release notes

  • Ignores an unparseable Expires attribute.

    8.7.0release notes

  • Sets the use-URL-credentials flag for EventSource.

    8.7.0release notes

  • The types for deleteCookie attributes were corrected.

    8.6.0release notes

  • Requeues requests on a GOAWAY'd session instead of crashing.

    8.6.0release notesrelease notes

  • Response chunks are dropped after the response stream is destroyed.

    8.6.0release notes

  • Retry flow control stays wired to the active connection across resumes.

    8.6.0release notes

  • Incomplete multi-byte UTF-8 sequences are handled in setEncoding().

    8.6.0release notes

  • Aligns EventSource behavior with the specification.

    8.5.0release notes

  • Skips DNS requests that do not have an origin.

    8.4.1release notes

  • Prevents a race condition between onEnd and onTrailers in the HTTP/2 client.

    8.4.1release notes

  • The paused parser completes on socket end instead of crashing.

    8.4.1release notesrelease notes

  • All synchronous HTTP/2 request stream errors are handled.

    8.4.0release notes

  • Timeout errors are preserved for HTTP/2 requests.

    8.4.0release notes

  • Invalid HTTP/2 sessions are reset.

    8.4.0release notes

  • The method's single-argument behavior is restored.

    8.4.0release notes

  • Validates EOF for chunked HTTP/1 responses.

    6.26.0, 7.26.0, 8.3.0release notesrelease notesrelease notes

  • Accepts Content-Range values with an unknown size.

    8.3.0release notes

  • Aligns HTTP/2 empty-body content-length methods with HTTP/1 behavior.

    8.3.0release notes

  • Preserves a fetch multipart body when falling back to MockAgent.

    8.3.0release notes

  • Prevents replaying the pipeline body on redirect.

    8.3.0release notes

  • Preserves pool capacity after a stale client is removed, preventing the pool from losing capacity.

    8.3.0release notes

  • Validates the response body length against Content-Range.

    8.3.0release notes

  • Uses the configured connector in Socks5ProxyAgent.

    8.3.0release notes

  • Preserves the dispatch backpressure return value.

    8.3.0release notes

  • Prevents the dispatcher from being cleaned up prematurely.

    8.2.0release notes

  • The cache key now includes the query when opts.path is undefined.

    8.2.0release notes

  • Corrects the signed integer bounds used when converting values.

    8.2.0release notes

  • Multipart form-data now prefers filename* over filename.

    8.2.0release notes

  • The AND operator now intersects filterCalls results as expected.

    8.2.0release notes

  • HTTP/2 now allows request bodies for GET and HEAD requests.

    8.2.0release notes

  • Validates the maxConcurrentStreams option.

    8.2.0release notes

  • Request option validation now rejects NaN highWaterMark values.

    8.2.0release notes

  • The client now respects the peer's maximum number of concurrent streams.

    8.2.0release notes

  • Handles invalid HTTP/2 connection headers.

    8.2.0release notes

  • HTTP/2 now sends bodies for methods that do not expect payloads when content is supplied.

    8.2.0release notes

  • Accepted streams are preserved after GOAWAY.

    8.2.0release notes

  • Upgrade streams that close before response headers are now rejected.

    8.2.0release notes

  • The TLS session cache now enforces the configured maximum number of cached sessions.

    8.2.0release notes

  • Streamed cache entries at the maxEntrySize limit are now allowed.

    8.2.0release notes

  • Corrects the CRLF check in the multipart form-data parser.

    8.2.0release notes

  • Replaces stale pool clients while remaining under the connection limit.

    8.2.0release notes

  • Stops buffering data after the SOCKS5 connection is established.

    8.2.0release notes

  • Correctly expands the compressed :: notation in IPv6 addresses.

    8.2.0release notes

  • Embedded IPv4 tails in IPv6 literals are now encoded correctly.

    8.2.0release notes

  • Vary information is now persisted when SQLite cache entries are updated.

    8.2.0release notes

  • Expired SQLite vary entries are skipped during lookup.

    8.2.0release notes

  • The SQLite cache now enforces maxCount after inserting an entry.

    8.2.0release notes

  • Pruning now evicts the oldest cache entries first.

    8.2.0release notes

  • The cache now returns staleAt as an immutable value in milliseconds.

    8.2.0release notes

  • Fixes how the environment variable controls WASM SIMD behavior.

    8.2.0release notes

  • Propagates useH2c to the connector when a pool has more than one connection.

    8.2.0release notes

  • Corrects the argument order when a WebSocketStream encounters a UTF-8 failure.

    8.2.0release notes

  • Avoids double-closing stream readers when a WebSocket stream is canceled.

    8.2.0release notes

  • Prevents cache deduplication key collisions caused by unescaped delimiters.

    8.0.3release notes

  • Preserves the connect option in H2CClient.

    8.0.3release notes

  • Fixes native WebSocket over an H2 server after importing undici.

    8.0.3release notes

  • Throws a descriptive error when opts.dispatcher is passed instance methods.

    8.0.3release notes

  • Removes stale constructor interceptors from the types and pool options.

    8.0.3release notes

  • Makes ProxyAgent respect connectTimeout.

    8.0.3release notes

  • Avoids 401 failures for requests with stream-backed bodies.

    8.0.3release notes

  • WebSocket connections fall back to HTTP/1.1 when H2 CONNECT is unavailable.

    8.0.2release notes

  • Only parsed messages are enqueued in WebSocketStream.

    8.0.1release notes

  • Short-lived cache entries are preserved for revalidation.

    8.0.0release notesrelease notes

  • Request statusText is preserved.

    8.0.0release notesrelease notes

undici 787 changes

Breaking changes 4

  • Removes maxDecompressedMessageSize.

    7.24.2release notes

  • Non-safe methods are no longer deduplicated by default.

    7.22.0release notes

  • Streams are errored instead of canceled.

    7.21.0release notes

  • Receiving a 401 now returns the response instead of a network error.

    7.19.2release notes

Security 13

New APIs and options 16

  • Adds IP prioritization hints for HTTP/1.1 and HTTP/2.

    7.23.0release notes

  • Adds SOCKS5 proxy support to ProxyAgent.

    7.23.0release notes

  • Revalidation supports asynchronous cache stores.

    7.22.0release notes

  • Adds pingInterval for dispatching PING frames.

    7.21.0release notes

  • The WebSocketStream interface now includes a close method.

    7.21.0release notes

  • request() ResponseData now exposes statusText.

    7.20.0release notes

  • Adds an origins option for whitelist filtering.

    7.19.0release notes

  • Client exposes HTTP/2 flow-control options.

    7.19.0release notes

  • Adds getUpstream() to retrieve an upstream from a BalancedPool.

    7.17.0release notes

  • Adds an interceptor for request deduplication.

    7.17.0release notes

  • Adds storage support for the DNS interceptor.

    7.17.0release notes

  • Adds support for h2c over Unix domain sockets.

    7.17.0release notes

  • Adds a round-robin pool.

    7.17.0release notes

  • Adds runtime feature detection, allowing Undici to detect runtime capabilities.

    7.17.0release notes

  • Adds a ProxyAgent diagnostics event named undici:proxy:connected.

    7.17.0release notes

  • Adds support for WebSocket connections through HTTP/2.

    7.17.0release notes

Performance 2

Behavior and default changes 1

Fixes and other changes 51

  • Lifecycle fixes were backported for upgrade diagnostics.

    7.30.0release notes

  • HTTP/2 now honors headersTimeout, so the configured timeout applies to HTTP/2 requests.

    7.29.1release notes

  • HTTP/2 now handles GOAWAY for CONNECT streams.

    7.29.1release notes

  • HTTP/2 requests whose streams are cancelled are now settled.

    7.29.1release notes

  • v7 now uses the legacy global dispatcher.

    7.27.2release notes

  • Preserves raw headers in the dispatch handler bridge.

    7.27.1release notes

  • Adds support for Node 26 and the legacy global dispatcher.

    7.27.0release notes

  • Fixes handling of stream-backed bodies for 401 responses.

    7.24.8release notes

  • The clone method is now declared as an instance method rather than an instance property.

    7.24.7release notes

  • Fetch now correctly handles multi-value rawHeaders.

    7.24.7release notes

  • Response types now align with DOM fetch types.

    7.24.7release notes

  • Prevents a client hang by wrapping the kConnector call in try/catch.

    7.24.6release notes

  • Supports connection-specific header names specified by the Connection header, per RFC 7230.

    7.24.6release notes

  • Improves the error message when mock intercepts are exhausted, making failures easier to diagnose.

    7.24.6release notes

  • Assumes an HTTP or HTTPS scheme for proxy environment variable values that omit a scheme.

    7.24.6release notes

  • The cache applies a 1-year deleteAt only for immutable responses.

    7.24.5release notes

  • Fixed dispatch path extraction to handle URL credentials.

    7.24.4release notes

  • Fixes a TypeError caused by reading push from null in HTTP/2.

    7.24.3release notes

  • Fixes fetch path logic.

    7.24.2release notes

  • Stops fetch from stripping a trailing ? from a URL.

    7.23.0release notes

  • Fixes a TypeError reading servername in _resume when an HTTP/2 stream completes.

    7.23.0release notes

  • Ignores late data frames after request completion.

    7.23.0release notes

  • Preserves latin1 header encoding in WrapHandler.

    7.23.0release notes

  • Forwards onResponseStarted through WrapHandler and UnwrapHandler.

    7.23.0release notes

  • Prevents AbortController garbage collection when redirect is set to error.

    7.23.0release notes

  • Passes socketPath to custom connect callbacks.

    7.23.0release notes

  • Preserves tuple headers in the DNS interceptor.

    7.23.0release notes

  • Uses the OR operator in includesCredentials to follow the WHATWG URL Standard.

    7.22.0release notes

  • Leading dots and asterisks are stripped when processing proxy exclusions.

    7.22.0release notes

  • WebSocket upgrades are routed through onRequestUpgrade.

    7.22.0release notes

  • Fixes a cleanup race involving clientTtl in Agent.

    7.21.0release notes

  • The finalizer is now set only for fetch responses.

    7.21.0release notes

  • Handles an undefined __filename in bundled environments.

    7.21.0release notes

  • Fetch stack traces are preserved.

    7.20.0release notes

  • Fixes delayed responses with AbortSignal in MockAgent.

    7.20.0release notes

  • Fixes flaky stream end handling on macOS.

    7.19.2release notes

  • HTTP headers are decoded as latin1 instead of utf8.

    7.19.2release notes

  • Fixes a 401 loop in fetch.

    7.19.1release notes

  • Regenerates a stream from its source when cache.match is called after garbage collection.

    7.19.0release notes

  • MockAgent normalizes origins for case-insensitivity and URL handling.

    7.19.0release notes

  • RetryAgent now handles FormData body types correctly for retried requests.

    7.19.0release notes

  • Fixes basic authentication for WebSocket connections.

    7.19.0release notes

  • Fixes the WebSocketStream open error.

    7.19.0release notes

  • Fixes running without SSL, which may affect environments where SSL is unavailable.

    7.18.1release notes

  • Fixes an off-by-one error when fetching a Blob with a range.

    7.17.0release notes

  • Updates the cache when a 304 Not Modified response is received upon revalidation.

    7.17.0release notes

  • Handles invalid fetch priority values properly.

    7.17.0release notes

  • Ensures HTTP/2 sends Content-Length for empty POST requests.

    7.17.0release notes

  • Adds a missing return after a callback call in ProxyAgent.

    7.17.0release notes

  • Makes the status parameter optional in the Response.redirect type.

    7.17.0release notes

  • Prevents onSocketClose from being called multiple times.

    7.17.0release notes

undici 65 changes

Security 2

  • Cookie values are no longer percent-decoded, preventing encoded CR, LF, or NUL sequences from becoming literal bytes that could enable HTTP header injection.

    6.27.0release notes

  • WebSocket message handling now limits fragment count as well as cumulative payload size, preventing unbounded memory growth and denial of service from malicious servers.

    6.27.0release notes

Fixes and other changes 3

  • Fixes aborting Streams.

    6.29.1release notes

  • The exposed body is settled when retry reaches terminal failure.

    6.29.0release notes

  • Upgrade diagnostics lifecycle fixes were backported to v6.x.

    6.29.0release notes