Releases: cloudflare/workers-sdk
wrangler@4.87.0
Minor Changes
-
#13726
b5ac54bThanks @penalosa! - Hard fail on Node.js < 22Wrangler no longer supports Node.js 20.x, as it reached end-of-life on 2026-04-30. The minimum supported Node.js version is now 22.0.0. See https://github.com/nodejs/release?tab=readme-ov-file#end-of-life-releases.
-
#13717
9a1f014Thanks @NuroDev! - Add an experimentalexperimental_generateTypes()programmatic API.Wrangler now exposes
experimental_generateTypes()from the package root so you can generate Worker types in code using the same logic aswrangler types. The API supports the same core type-generation options (include env/runtime toggles) and returns structured output with separateenvandruntimecontent alongside the combined formatted output.
Patch Changes
-
#13732
22e1a61Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To workerd 1.20260426.1 1.20260429.1 -
#13754
00523c8Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To workerd 1.20260429.1 1.20260430.1 -
#13711
1c4d850Thanks @dario-piotrowicz! - fix: skip auto-config and OpenNext delegation when--configis explicitly providedWhen
--configis passed towrangler deploy, the user is explicitly targeting a specific Worker configuration. Previously, wrangler would ignore--configand delegate toopennextjs-cloudflare deployif it detected an OpenNext project in the working directory, silently deploying the wrong Worker. Now, both auto-config detection and OpenNext delegation are skipped when--configis provided, matching the existing behavior for--scriptand--assets. -
#13735
6d28037Thanks @edmundhung! - Improveconfig-schema.jsonhover text in more editorsWrangler now emits
markdownDescriptioninconfig-schema.jsonalongside the existingdescriptionfield. Editors that support rich JSON Schema hovers can use that markdown directly instead of rendering escaped links and formatting. -
#13722
0827815Thanks @MattieTK! - Improve safe telemetry categorisation for user-facing Wrangler errors. -
#13116
e539008Thanks @dario-piotrowicz! - AllowgetPlatformProxyandunstable_getMiniflareWorkerOptionsto start when the assets directory does not exist yetPreviously,
getPlatformProxywould catch and swallowNonExistentAssetsDirErrorinternally when the configured assets directory was absent on disk. This has been refactored so that the directory-existence check is skipped entirely forgetPlatformProxyandunstable_getMiniflareWorkerOptions, since these APIs are typically used at dev time in frameworks where the assets directory is a build output that may not exist yet.wrangler dev,wrangler deploy,wrangler versions upload, andwrangler triggers deploycontinue to require the assets directory to exist when specified. -
Updated dependencies [
22e1a61,00523c8,b5ac54b,e653edf,e1eff94,e539008,0bf64a7,b04eedf,6457fb3,c07d0cb]:- miniflare@4.20260430.0
- @cloudflare/kv-asset-handler@0.5.0
miniflare@4.20260430.0
Minor Changes
-
#13726
b5ac54bThanks @penalosa! - Hard fail on Node.js < 22Wrangler no longer supports Node.js 20.x, as it reached end-of-life on 2026-04-30. The minimum supported Node.js version is now 22.0.0. See https://github.com/nodejs/release?tab=readme-ov-file#end-of-life-releases.
-
#13390
0bf64a7Thanks @Ltadrian! - Fix Hyperdrive binding issue where some customers are unable to connect to local databases usingwrangler dev- Skips creating a local TCP proxy server for Hyperdrive bindings when SSL is not enabled, connecting directly to the database instead. This avoids connection refused errors caused by firewall rules or proxy port binding issues on Windows/macOS.
-
#13565
b04eedfThanks @vaishnav-mk! - Add restart from step support for local Workflows developmentWorkflow instances can now be restarted from a specific step in local development. When restarting from a step, all earlier steps preserve their cached results and replay instantly, while the target step and everything after it re-execute.
The
WorkflowInstance.restart()method now accepts an optional{ from: { name, count?, type? } }parameter to specify which step to restart from. -
#13618
c07d0cbThanks @jamesopstad! - Support V2 protocol for module fallback serviceWhen the
new_module_registrycompatibility flag is set, requests sent tounsafeModuleFallbackService()use a different protocol. Miniflare now supports both protocols and exports aparseModuleFallbackRequest()utility to ease handling.
Patch Changes
-
#13732
22e1a61Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To workerd 1.20260426.1 1.20260429.1 -
#13754
00523c8Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To workerd 1.20260429.1 1.20260430.1 -
#13723
e653edfThanks @edmundhung! - Exposesend_emailbindings fromgetPlatformProxy()Projects developing in Node can now access
send_emailbindings from the platform proxy. This supports the plain-object MessageBuilder API locally, so calls likeenv.EMAIL.send({ from, to, subject, text })no longer fail because the binding is missing. -
#12514
e1eff94Thanks @ascorbic! - fix: normalise typed array subclasses in devalue serializationNode.js
BufferextendsUint8Arraybut isn't available in all runtimes. When aBufferwas passed through the proxy serialization bridge (e.g. as a D1 bind parameter viagetPlatformProxy()), the reviver would fail because"Buffer"isn't in the allowed constructor list and may not exist onglobalThisin workerd.The reducer now normalises subclass constructor names to the nearest standard typed array parent before serialization, matching structured clone behaviour.
-
#13116
e539008Thanks @dario-piotrowicz! - Gracefully handle a missing assets directory by starting with zero assetsPreviously, configuring Miniflare with an
assets.directorythat did not exist on disk would cause the asset services to fail to start. This is a common situation duringwrangler devwhen the assets directory is a build output that hasn't been generated yet.Now, when the configured assets directory does not exist, Miniflare creates an empty temporary directory and starts the asset services with zero assets. Once the real directory is created and
setOptions()is called (e.g. triggered by the file watcher), Miniflare reloads and begins serving the actual assets. -
#13363
6457fb3Thanks @courtney-sims! - Prepares router-worker for a more gradual rollout by refactoring and separating out the invocation from the business logic. In the future, this will provide space for us to route requests to new versions of router-worker based on their plan, but should make no functional difference today.
create-cloudflare@2.68.0
Minor Changes
-
#13726
b5ac54bThanks @penalosa! - Hard fail on Node.js < 22Wrangler no longer supports Node.js 20.x, as it reached end-of-life on 2026-04-30. The minimum supported Node.js version is now 22.0.0. See https://github.com/nodejs/release?tab=readme-ov-file#end-of-life-releases.
Patch Changes
-
#13359
fc2d883Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To @angular/create 21.2.6 21.2.8 -
#13729
83a1c7eThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To nuxi 3.34.0 3.35.1 -
#13730
c5bcdfaThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To @tanstack/create-start 0.59.22 0.59.26 -
#13731
4d4d2c2Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To sv 0.15.1 0.15.2 -
#13733
60ee337Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To create-analog 2.4.10 2.5.0
@cloudflare/workflows-shared@0.10.0
Minor Changes
-
#13565
b04eedfThanks @vaishnav-mk! - Add restart from step support for local Workflows developmentWorkflow instances can now be restarted from a specific step in local development. When restarting from a step, all earlier steps preserve their cached results and replay instantly, while the target step and everything after it re-execute.
The
WorkflowInstance.restart()method now accepts an optional{ from: { name, count?, type? } }parameter to specify which step to restart from.
@cloudflare/workers-shared@0.19.4
Patch Changes
- #13363
6457fb3Thanks @courtney-sims! - Prepares router-worker for a more gradual rollout by refactoring and separating out the invocation from the business logic. In the future, this will provide space for us to route requests to new versions of router-worker based on their plan, but should make no functional difference today.
@cloudflare/vitest-pool-workers@0.15.2
@cloudflare/vite-plugin@1.35.0
Minor Changes
-
#13618
c07d0cbThanks @jamesopstad! - Support V2 protocol for module fallback serviceWhen the
new_module_registrycompatibility flag is set, requests sent tounsafeModuleFallbackService()use a different protocol. The Vite plugin now supports both protocols in its handling of additional module types.
Patch Changes
-
#13363
6457fb3Thanks @courtney-sims! - Prepares router-worker for a more gradual rollout by refactoring and separating out the invocation from the business logic. In the future, this will provide space for us to route requests to new versions of router-worker based on their plan, but should make no functional difference today. -
Updated dependencies [
22e1a61,00523c8,b5ac54b,e653edf,e1eff94,1c4d850,6d28037,9a1f014,e539008,0bf64a7,0827815,b04eedf,6457fb3,c07d0cb,e539008]:- miniflare@4.20260430.0
- wrangler@4.87.0
@cloudflare/pages-shared@0.13.130
@cloudflare/kv-asset-handler@0.5.0
Minor Changes
-
#13726
b5ac54bThanks @penalosa! - Hard fail on Node.js < 22Wrangler no longer supports Node.js 20.x, as it reached end-of-life on 2026-04-30. The minimum supported Node.js version is now 22.0.0. See https://github.com/nodejs/release?tab=readme-ov-file#end-of-life-releases.
wrangler@4.86.0
Minor Changes
-
#13605
ea943ffThanks @danielgek! - Add namespace support towrangler ai-searchcommandsAll
wrangler ai-searchinstance commands (create,list,get,update,delete,stats,search) now accept a--namespace(or-n) flag to target a specific AI Search namespace. When the flag is omitted, commands default to thedefaultnamespace that Cloudflare automatically provisions for every account.wrangler ai-search listnow displays anamespacecolumn, andwrangler ai-search createoffers an interactive picker for existing namespaces (with an option to create a new one) when--namespaceis not supplied in an interactive session.A new
wrangler ai-search namespacesubcommand group is also introduced, withlist,create,get,update, anddeletesubcommands for managing namespaces directly.wrangler ai-search list --namespace blog wrangler ai-search create my-instance --namespace blog --type r2 --source my-bucket wrangler ai-search namespace create blog --description "Blog content" -
#13637
9eb9e69Thanks @edmundhung! - Add--tunnelflag towrangler devfor sharing your local dev server via Cloudflare Quick TunnelsYou can now expose your local dev server publicly by passing
--tunnel:wrangler dev --tunnel
This starts a Cloudflare Quick Tunnel that gives you a random
*.trycloudflare.comURL to share. The tunnel stops automatically when the dev session ends. Quick tunnels don't require a Cloudflare account or any configuration.A warning is shown when Server-Sent Events (SSE) responses are detected through the tunnel, since quick tunnels don't support SSE.
-
#13661
0a5db08Thanks @aspizu! -wrangler tailwill now log stack traces. These stack traces already include resolved frames if you have chosen to upload sourcemaps. -
#13617
118027dThanks @roerohan! - Force Flagship bindings to always use remote mode in local devFlagship bindings now always access the remote Flagship service during local development, matching the behavior of AI bindings. Previously, Flagship supported both local and remote modes, but the local stub only returned default values, providing no real functionality and creating a dual source of truth for flag evaluations.
The
remoteconfig field is retained for backward compatibility but only controls whether a warning is displayed. Settingremote: truesuppresses the warning that Flagship bindings always access remote resources and may incur usage charges in local dev. -
#13254
e867ac2Thanks @tgarg-cf! - Addwrangler queues consumer listsubcommands for listing queue consumersThree new commands are available for listing consumers on a queue:
wrangler queues consumer list <queue-name>— lists all consumers (both worker and HTTP pull), grouped by typewrangler queues consumer worker list <queue-name>— lists only worker consumerswrangler queues consumer http list <queue-name>— lists only HTTP pull consumers
Patch Changes
-
#13696
62e9f2aThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To workerd 1.20260424.1 1.20260426.1 -
#13576
2dc6175Thanks @MattieTK! - Restore telemetry tracking for common CLI flags that were unintentionally dropped during sanitisationWhen argument sanitisation was introduced, only explicitly allow-listed args had their values included in telemetry. The allow list was very conservative, which meant common boolean flags like
--remote,--json,--dry-run,--force, and many others were no longer being captured insanitizedArgsdespite previously being tracked. Boolean flags are inherently safe (values are onlytrue/false), so these have now been added back to the global allow list. A small number of fixed-choice args (--local-protocol,--upstream-protocol,--containers-rollout) have also been added with their known value sets. -
#13649
ae8eae3Thanks @petebacondarwin! - Fix service binding and tail consumerpropsbeing dropped between workers in different local dev instancesWhen a service binding or tail consumer configured with
propstargeted a worker running in a separatewrangler devinstance (via the dev registry), thepropswere silently dropped and the remote entrypoint saw an emptyctx.props. Props are now forwarded correctly across the dev registry boundary, matching the behavior users get when all workers run in a single instance.// wrangler.json { "services": [ { "binding": "AUTH", "service": "auth-worker", // may be in a separate `wrangler dev` process "entrypoint": "SessionEntry", "props": { "tenant": "acme" } } ] }
The target worker's
SessionEntryentrypoint now correctly receives{ tenant: "acme" }onctx.propsregardless of which local dev instance it runs in. -
#13662
f2e2241Thanks @petebacondarwin! - Fix three resource leaks inunstable_startWorkerteardown that could prevent Node from exiting cleanly afterworker.dispose().- The esbuild context created by
bundleWorkeris now disposed when the initial build fails. Previously a failing initial build (e.g. an unresolvable entrypoint, or a worker started with an invalid config viasetConfig) left the esbuild child process running for the lifetime of the parent Node process. runBuild's cleanup function now awaits the in-flight build before running the bundler's stop handler. Previously teardown could return beforeesbuild.BuildContext.dispose()had been called, so the esbuild watcher kept the event loop alive after dispose had resolved.BundlerController.teardown()now runs the esbuild cleanup before removing the bundler's temporary directory, and aborts the in-flight bundle build so it cannot emit stalebundleStart/bundleCompleteevents after teardown. Previously the tmpdir was removed first, which in race with an in-flight rebuild produced confusing "Could not resolve.wrangler/tmp/bundle-XXXX/middleware-loader.entry.ts" errors during dispose.
- The esbuild context created by
-
#13674
4f6ed93Thanks @petebacondarwin! - Stop emitting a misleading[wrangler:error] Docker build exited with code: <n>log when the user aborts an in-progress container image build (for example by pressing therrebuild hotkey while the previous build is still running).The abort-detection branch in the local and multi-worker runtime controllers was matching the wrong error message — it checked for
"Build exited with code: 1", but the error thrown by the docker build helper is actually"Docker build exited with code: <n>", and the exit code after a process-group SIGINT/SIGKILL is typically130/137/143, not1. As a result, every legitimate user-initiated rebuild abort produced a spurious error event and[wrangler:error]log line. The check now matches the real error message prefix and ignores any non-zero exit code from the aborted build, so a user-requested rebuild while another build is in progress is silent. -
#13667
ed2f4ecThanks @emily-shen! - fix: Preserve auth in remote proxy session data to avoid unnecessary session restartsmaybeStartOrUpdateRemoteProxySessionwas not includingauthin its return value, so on subsequent callspreExistingRemoteProxySessionData.authwas alwaysundefined. This caused the auth comparison to always detect a change, disposing and recreating the remote proxy session on every reload even when auth had not changed.