Minor Changes
-
#13326
4a9ba90Thanks @mattzcarey! - Add Artifacts binding support to wranglerYou can now configure Artifacts bindings in your wrangler configuration:
Type generation produces the correct
Artifactstype reference from the workerd type definitions:interface Env { MY_ARTIFACTS: Artifacts; }
-
#12600
50bf819Thanks @penalosa! - Useworkerd's debug port to power cross-process service bindings, Durable Objects, and tail workers via the dev registry. This enables Durable Object RPC via the dev registry, and is an overall stability improvement.
Patch Changes
-
#13515
b35617bThanks @petebacondarwin! - fix: close all open handles on dispose to prevent process hangsSeveral resources were not being properly cleaned up during
Miniflare.dispose(), which could leave the Node.js event loop alive and cause processes (particularly tests usingnode --test) to hang instead of exiting cleanly:- The internal undici
Poolused to dispatch fetch requests to the workerd runtime was not closed. Lingering TCP sockets from this pool could keep the event loop alive indefinitely. WebSocketServerinstances for live reload and WebSocket proxying were never closed, leaving connected clients' sockets open.- The
InspectorProxywas not closing its runtime WebSocket connection, relying on process death to break the connection. HyperdriveProxyController.dispose()had a missingreturnin a.map()callback, causingPromise.allSettledto resolve immediately without waiting fornet.Serverinstances to close.ProxyClientBridgewas not clearing its finalization batchsetTimeoutduring disposal.InspectorProxyController.dispose()was not callingserver.closeAllConnections()beforeserver.close(), so active HTTP keep-alive or WebSocket connections could prevent the close callback from firing.
- The internal undici
-
#13557
8ca78bbThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To workerd 1.20260415.1 1.20260416.2 -
#13579
b6e1351Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To workerd 1.20260416.2 1.20260417.1 -
#13604
d8314c6Thanks @petebacondarwin! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To workerd 1.20260417.1 1.20260420.1 -
#12913
7f50300Thanks @Sigmabrogz! - fix(miniflare): use 127.0.0.1 for internal loopback when localhost is configuredWhen
localhostis configured as the host, Node.js may bind to[::1](IPv6) while workerd resolveslocalhostto127.0.0.1(IPv4) first. This mismatch causes connection refused errors and 100% CPU spins.This fix ensures the internal loopback communication between Node.js and workerd always uses
127.0.0.1whenlocalhostis configured, while preserving the user-facing URL aslocalhost. -
#13470
4fda685Thanks @penalosa! - fix: prevent remote binding sessions from expiring during long-running dev sessionsPreview tokens for remote bindings expire after one hour. Previously, the first request after expiry would fail before a refresh was triggered. This change proactively refreshes the token at 50 minutes so no request ever sees an expired session.
The reactive recovery path is also improved:
error code: 1031responses (returned by bindings such as Workers AI when their session times out) now correctly trigger a refresh, where previously onlyInvalid Workers Preview configurationHTML responses did.Auth credentials are now resolved lazily when a remote proxy session starts rather than at bundle-complete time. This means that if your OAuth access token has been refreshed since
wrangler devstarted, the new token is used rather than the one captured at startup. -
#13586
be5e6a0Thanks @petebacondarwin! - Fix resource leaks during config updatesTwo follow-up fixes to the dispose cleanup in #13515:
- Only close and recreate the dev-registry dispatcher when its port actually changes, matching the existing
runtimeDispatcherbehavior. Previously, every config update unconditionally tore down and rebuilt the connection pool, which could cause brief request failures if a registry push was in-flight. - Dispose old
InspectorProxyinstances before replacing them duringupdateConnection(). Previously, stale proxies were silently discarded, leaking their runtime WebSocket connections and 10-second keepalive interval timers.
- Only close and recreate the dev-registry dispatcher when its port actually changes, matching the existing
-
#13577
e456952Thanks @connyay! - ReturnEmailSendResultfrom thesend_emailbinding'ssend()in local modeThe binding's
send()used to resolve toundefined. It now returns{ messageId: string }, the same shape as the publicSendEmailtype in production. Workers that read the return value (for logging, or to pass the id downstream) no longer getundefinedunder miniflare.Both branches synthesize an id in the shape production returns —
<{36 alphanumeric chars}@{sender domain}>, angle brackets included — using the envelopefromfor theEmailMessagepath and the builder'sfromfor theMessageBuilderpath. Production synthesizes its own id rather than echoing anything submitted, so miniflare does the same. -
#13516
4eb1da9Thanks @jonnyparris! - Rename "Browser Rendering" to "Browser Run" in all user-facing strings, error messages, and CLI output. -
#13557
8ca78bbThanks @dependabot! - RenameFlagstype toFlagshipto match the upstream rename in@cloudflare/workers-typesThe
Flagstype was renamed toFlagshipin@cloudflare/workers-types. This updates the import and the return type ofgetFlagshipBindingaccordingly. -
#11849
266c418Thanks @43081j! - Removed unused devDependencies from miniflare package.