chore(deps): update dependency wrangler to ^4.113.0#499
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
website | e63f2e6 | Commit Preview URL Branch Preview URL |
Jul 21 2026, 10:59 PM |
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
April 13, 2026 20:39
aca5909 to
0fb86fe
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
2 times, most recently
from
April 15, 2026 09:50
0fb86fe to
e500f1a
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
2 times, most recently
from
April 20, 2026 20:13
e500f1a to
9e7f8f5
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
2 times, most recently
from
April 24, 2026 13:37
9e7f8f5 to
fa9cb6f
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
2 times, most recently
from
April 28, 2026 17:36
fa9cb6f to
1a353dd
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
3 times, most recently
from
May 7, 2026 21:05
2f8f12f to
f279c45
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
May 12, 2026 12:00
f279c45 to
58ebf9e
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
May 14, 2026 13:47
58ebf9e to
54dbef1
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
May 15, 2026 13:41
54dbef1 to
773374b
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
May 19, 2026 15:31
773374b to
37261c7
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
May 21, 2026 14:13
37261c7 to
b81c64f
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
May 22, 2026 15:55
b81c64f to
eb11345
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
May 26, 2026 22:51
eb11345 to
620d304
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
June 1, 2026 19:00
620d304 to
9919dcd
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
June 2, 2026 16:06
9919dcd to
a6a1802
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
June 4, 2026 13:52
a6a1802 to
5e3d4ae
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x
branch
from
June 9, 2026 15:41
5e3d4ae to
146b4d2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^4.104.0→^4.113.0Release Notes
cloudflare/workers-sdk (wrangler)
v4.113.0Compare Source
Minor Changes
#14471
f03b108Thanks @DiogoSantoss! - Apply Email Routingaddressesduring Worker trigger deploymentWorker trigger deployment now reconciles the Worker's Email Routing rules with the top-level
addressesconfig. This runs forwrangler deploy,wrangler triggers deploy, and clients of@cloudflare/deploy-helpers. After the Worker uploads, or whenwrangler triggers deployruns after a version promotion, the deploy helper asks the Email Routing API for a plan, renders the changes grouped by zone (+added,~updated,-deleted,!conflict), prompts once for destructive changes in interactive mode, and applies accepted changes through the per-zone rule endpoints. Purely additive plans apply without a prompt, while non-interactive destructive plans fail without modifying rules.#14679
deae171Thanks @dario-piotrowicz! - Addexclude_packagesoption todependencies_instrumentationconfigurationThe
dependencies_instrumentationconfig object now accepts an optionalexclude_packagesfield — an array of package name patterns (with glob-style*wildcards) to exclude from the dependency metadata collected during deploy and version uploads.#14721
4e92e32Thanks @dmmulroy! - Support Artifacts sources when creating Queue event subscriptionswrangler queues subscription createnow accepts theartifactsandartifacts.reposource types supported by the Cloudflare API.#13352
d1d6945Thanks @penalosa! - Expand automatic resource provisioning to Queue, Dispatch Namespace, and Flagship bindingsDeployments can now omit the resource name or ID for these bindings. Wrangler will inherit the existing binding on subsequent deploys, create a deterministically named resource automatically, or offer existing resources during an interactive deploy with automatic creation disabled.
#14688
a0c8bb1Thanks @NuroDev! - Print Local Explorer API details for headless agent-drivenwrangler devsessionsWhen
wrangler devis started in a headless AI agent environment, Wrangler now prints the Local Explorer API URL and basic resource routes so agents can inspect local Workers and bindings without relying on the interactive UI.#14724
a50f73aThanks @jamesopstad! - Add asettingsexport to the experimentalcloudflare.config.tsconfigAccount-level settings (
accountId,complianceRegion) now live in a dedicated, namedsettingsexport authored viadefineSettings, rather than on the Worker config. Acloudflare.config.tscan export at most onesettingsobject; the Worker itself is thedefaultexport.This is only used behind the experimental new-config path (
wrangler --experimental-new-configand the@cloudflare/vite-pluginexperimental.newConfigoption).#14595
2b390d7Thanks @colinhacks! - Recognise nub as a package managerwrangler now detects nub — from its
npm_config_user_agentand an installednubbinary — and autoconfig detects nub projects by theirnub.lock, alongside npm, pnpm, yarn, and bun.#14742
34430b3Thanks @pombosilva! - Add support for redacting sensitive Workflows step output in local dev.Steps configured with
sensitive: "output"now have their output redacted to[REDACTED]in step logs and step-output responses when running Workflows locally, matching production behavior. The real value is still passed to downstream steps, and step errors are never redacted.Patch Changes
#14715
42af66dThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14744
a0a091bThanks @penalosa! - Drop the "Experimental:" prefix from the resource provisioning header now that automatic provisioning is generally available. The deploy output now readsThe following bindings need to be provisioned:.#14720
0df3d43Thanks @penalosa! - Fix remote binding previews for accounts without a workers.dev subdomainWrangler now automatically registers a workers.dev subdomain when one is required to start a remote binding preview.
#14773
d83a476Thanks @chinesepowered! - Fix stray characters in the Workers Sites asset-key-too-long errorThe error thrown when an asset path key exceeds the 512-character limit ended with a stray
",copy-paste artifact, so the message printed to users terminated with...#kv-limits",and the trailing documentation URL was malformed. The message now ends cleanly at the URL.#14766
4815711Thanks @gianghungtien! - Report the Worker's error forHEADrequests instead of an internal JSON parse errorA Worker that threw on a
HEADrequest (for examplecurl -I) loggedSyntaxError: Unexpected end of JSON inputfrom miniflare's internals rather than the actual error, anddispatchFetch()rejected with that same misleading error.workerddrops response bodies forHEADrequests, so the serialised error never reached the code that revives it.The error is now also carried in a header, which survives
HEAD, so the original message and source-mapped stack are reported for every method. When no payload is available the reporting degrades to a plain error rather than surfacing a parse failure.#14448
c82d96bThanks @GregBrimble! - Use the new PATCH APIs for versioned secret commandsWrangler now updates versioned Worker secrets by patching the latest Worker version instead of downloading the latest version contents and uploading a full replacement version. This avoids reconstructing Worker configuration in Wrangler, which should reduce bugs when Workers use less common features. For example, this avoids regressions like the previous placement preservation bug fixed in #13843.
#14617
f75ae5dThanks @martijnwalraven! - DerivenodejsCompatModefrom the effective compatibility inputs inunstable_startWorker()The CLI computes the node-compat mode from the effective compatibility date and flags (
args.* ?? parsedConfig.*), but the programmatic path usedinput.build.nodejsCompatModeraw — leaving it unset meant a worker'snodejs_compatflag (from its config file or from input-levelcompatibilityFlags) was silently ignored, so bundling failed to resolve node builtins thatwrangler devhandles.startWorkernow derives the mode the same way when the caller does not provide one: input-levelcompatibilityDate/compatibilityFlagsfirst, then the resolved config, with no-bundle taken from the resolvedbuild.bundlesemantics. Passing an explicitnullstill disables it.Updated dependencies [
42af66d,4815711,34430b3]:v4.112.0Compare Source
Minor Changes
#14470
3de70dfThanks @DiogoSantoss! - Add a top-leveladdressesfield to Wrangler configuration for Email RoutingYou can now declare the inbound email addresses handled by your Worker directly in
wrangler.json:{ "name": "my-worker", "main": "src/index.ts", "compatibility_date": "2026-05-21", "addresses": ["support@example.com", "*@​example.com"] }#14706
cb6c3f9Thanks @edmundhung! - Add Durable Object storage access tocreateTestHarness()You can now execute SQL against a SQLite-backed Durable Object to seed or assert the storage state.
#14562
9f04a7eThanks @martijnwalraven! - Emit a typedruntimeErrorevent on theunstable_startWorkerDevEnv for uncaught Worker exceptionsUncaught Worker exceptions were only source-mapped and printed, so programmatic consumers had to scrape terminal output to observe them. The DevEnv now re-emits a
RuntimeErrorEvent(likereloadComplete) carrying the exception text and source-mapped stack — fed from Miniflare's pretty-error seam via the newhandleUncaughtErroroption for exceptions the runtime catches, and from the inspector for those it does not.Patch Changes
#14682
d39ae01Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14725
c79504fThanks @edmundhung! - Support containers increateTestHarness()Workers configured with containers can now be tested using
createTestHarness(). The harness builds configured images and makes container-backed Durable Objects available during integration tests.#14696
c7dbe1aThanks @martijnwalraven! - Typeunstable_startWorker,DevEnv.startWorker, andConfigController.set/patchagainstWranglerStartDevWorkerInput, so the wrangler-specificdev.structuredLogsHandlerfield the runtime already honors is expressible through the public API. Previously the public signatures took the baseStartDevWorkerInput, and callers passing the handler needed a cast while internal callers (the test harness) routed the wider type around the signature.#14494
4e1a7a7Thanks @petebacondarwin! - Register a workers.dev subdomain before uploading a new WorkerDeploying a Worker for the first time on an account that has no workers.dev subdomain failed with an opaque API error raised by the upload request itself (code 10063, "You need a workers.dev subdomain in order to proceed"). Wrangler now checks for a workers.dev subdomain before uploading a brand-new Worker that publishes to workers.dev and prompts you to register one, so you get a clear, actionable message instead of a cryptic API failure. The check is skipped for deploys that don't target workers.dev (routes-only deploys, or
workers_dev: false) and for existing Workers, since their account already has a subdomain.Updated dependencies [
34e696d,d39ae01,9f04a7e,9f04a7e,cb30df3,cb6c3f9,3f3afbb,e6fbc4e]:v4.111.0Compare Source
Minor Changes
#14602
7692a61Thanks @edmundhung! - Add Durable Object eviction support tocreateTestHarnessYou can now gracefully evict a running Durable Object by class name or binding name to verify how it recovers after its instance is torn down:
#14620
899c297Thanks @penalosa! - Remove support for service environments and thelegacy_envconfiguration fieldService environments have been removed. Wrangler now always deploys each environment as its own Worker named
<name>-<environment>, which matches the behaviour of the previous default (legacy_env = true). The--legacy-envCLI flag has been removed, and thelegacy_envconfiguration field is no longer supported — including it in your configuration file will now raise an error.Because
legacy_env = truewas already the default, removing the field will not change how your Worker is deployed. If you were relying on service environments (legacy_env = false), each environment will now be deployed as a standalone Worker instead of as an environment of a single Worker. See https://developers.cloudflare.com/workers/wrangler/environments/ for more information.#14652
317ce1fThanks @jamesopstad! - Append Workers runtime types to the generated types under--x-new-config, with a newdev.types.includeRuntimeoptionWhen running
wrangler dev --x-new-config, the runtime types generated from your compatibility date and flags are now appended toworker-configuration.d.ts, alongside the types inferred fromcloudflare.config.ts. This is controlled by a newdev.types.includeRuntimeoption inwrangler.config.ts, which defaults totrue.This applies to the experimental new config path only and does not change type generation for existing
wrangler.jsonc/wrangler.tomlprojects.Patch Changes
#14627
ed33326Thanks @tpmmorris! - Add convenient logging for worker emails in the project directory. In addition to the system's temp directory, logs for emails sent by workers are also written to a local temp directory defined by the calling process, e.g for an simple text email sent via Wrangler this is.wrangler/tmp/email/<session>/email-text/<message-uuid>.txt(and related files) in the project root. Callers of Miniflare can control this location via the newdefaultProjectTmpPathoption, which Wrangler and Vite plugin now set automatically.#14642
018574bThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14588
eb99ab1Thanks @emily-shen! - fix: Respect auth profiles when using remote bindings in the Vite pluginAuth profiles (configured via
wrangler auth createandwrangler auth activate) were previously being ignored when using remote bindings with the Vite plugin. This is now fixed.Note that the profile directory is resolved based on the Vite project root.
#14658
cdf3148Thanks @ATKasem! - Fixwrangler devcorrupting external hostnames in proxied response headersWhen a Worker was run with
routesconfigured,wrangler dev's proxy rewrote the host inside URL-valued headers (such asLocation) using a boundary-less substring replace. Any host that merely contained the route host as a substring was corrupted — e.g. with anexample.comroute, aLocation: https://books.example.com/read/ch01header becamehttps://books.127.0.0.1:8788/read/ch01, andhttps://myexample.com/pathbecamehttps://my127.0.0.1:8788/path.The proxy now only rewrites absolute URLs whose host is exactly the proxied host, swapping the scheme and host together (which also fixes a related case where an
https:scheme survived on a plain-HTTP dev address). Unrelated hosts and subdomains pass through untouched.#14601
3015320Thanks @MattieTK! - Improve the agent-facing--forceguidance for Pages-to-Workers delegationWhen an AI agent opts out of the Pages-to-Workers delegation by passing
--forcetowrangler pages deployorwrangler pages project create, Wrangler now prints a notice at the end of a successful command explaining that--forceonly needs to be passed once: the project then exists, so subsequent commands are no longer delegated and do not need the flag.#14569
9da77acThanks @dario-piotrowicz! - Suggest similar commands when a typo is detectedWhen an unknown command or subcommand is entered, wrangler now suggests the closest matching command if one exists within a reasonable edit distance. For example, running
wrangler whoamiowill displayDid you mean "wrangler whoami"?, and runningwrangler kv namespasewill displayDid you mean "wrangler kv namespace"?.Updated dependencies [
7692a61,ed33326,018574b,7692a61]:v4.110.0Compare Source
Minor Changes
#14591
0283a1fThanks @dario-piotrowicz! - Send npm package dependency metadata with worker uploadsWrangler now collects npm package dependency information from the project's
package.jsonat deploy and version upload time, and includes it in the upload metadata sent to the Cloudflare API. This enables dependency analytics and future features like vulnerability alerting.The collected data includes the package name, the version constraint from
package.json, and the exact installed version fromnode_modules. BothdependenciesanddevDependenciesare included, while workspace packages, local packages, and unresolvable packages are excluded. The list is capped at 200 entries per upload.To opt out, set
dependencies_instrumentation.enabledtofalsein your Wrangler configuration file:{ "dependencies_instrumentation": { "enabled": false } }#14535
1b965c5Thanks @Naapperas! - Support dynamic retry delays for Workflow steps in local devA step's
retries.delaycan now be a function that computes the delay per failed attempt, in addition to a static duration. The function receives{ ctx, error }and returns a delay (a number of milliseconds or a duration string like"30 seconds"), and its result is fed into the configuredbackoff.The function is invoked once per failed attempt with a 5 second timeout. If it throws, times out, or returns an invalid value, the step fails without further retries.
Patch Changes
#14589
7b28392Thanks @jamesopstad! - Fix runtime type caching whenwrangler devauto-regenerates typesWhen
dev.generate_types(orwrangler dev --types) regenerated an out-of-dateworker-configuration.d.ts, the written file omitted the// Begin runtime typesmarker (and the/* eslint-disable */header) thatwrangler typeswrites. As a result, later runs could not detect the cached runtime types and always regenerated them. The auto-regenerated file now matcheswrangler typesoutput, restoring the cache.Updated dependencies [
1b965c5]:v4.109.0Compare Source
Minor Changes
#14489
e3f0cd6Thanks @edmundhung! - AddlistDurableObjectIds()tocreateTestHarnessWorker handlesTests using
createTestHarnesscan now list persisted Durable Object instance IDs for a Durable Object binding. This helps integration tests discover objects created by app behavior without adding test-only endpoints.#14465
2fedb1fThanks @vaishnav-mk! - Add rollback support when terminating Workflow instancesWorkflowInstance.terminate({ rollback: true })now runs registered rollback handlers before marking a local Workflow instance as terminated. Wrangler also supports this viawrangler workflows instances terminate --rollback, including local mode.The rollback option is only sent for terminate operations and is rejected by the Local Explorer API for pause, resume, and restart actions.
#14511
17d2fc1Thanks @juleslemee! - Addwrangler turnstile widgetcommands for managing Turnstile widgetsYou can now create, list, inspect, update, and delete Turnstile widgets from the CLI:
All five subcommands accept
--jsonfor machine-readable output (getprints a formatted view by default; the rest print a short human summary).--domainaccepts comma-separated values, e.g.--domain a.com,b.com.delete --jsonrequires--skip-confirmation/-yto keep output pipeable.createprints the sitekey, the secret, and the canonicalchallenges.cloudflare.com/turnstile/v0/siteverifyendpoint for backend verification. The hint is backend-agnostic; it doesn't assume Workers. The secret is redacted fromlistandupdateoutput but remains available viagetfor retrieval later.deleteprompts for confirmation; pass--skip-confirmation/-yto bypass.The OAuth flow now requests the
challenge-widgets.writescope (the existing Bach-derived scope for Turnstile widget CRUD). Existing OAuth sessions need to runwrangler loginagain to pick it up. API token users need a token with theAccount.Turnstile:Editpermission.Patch Changes
#14596
8511ddfThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14604
9f74a5fThanks @vaishnav-mk! - Improve the deploy error for cron-triggered Workflows on free plansWrangler now explains that Workflow schedules require a paid Workers plan instead of showing only the generic Workflows API request failure.
#14616
c782e2aThanks @penalosa! - Fixwrangler deployaborting in CI for autoconfigured projectsA recent change guarded non-interactive deploys against overwriting a same-named Worker whenever there was no config file naming it. This was too broad: a plain
wrangler deployrun in CI without a config file (for example an autoconfigured project whose generated config PR has not been merged) would fail with "A Worker named ... already exists in your account", even though re-deploying to that Worker is the intended behaviour.The guard is now limited to the Pages-to-Workers delegation, where the target name is a Pages project name that must not clobber an unrelated Worker. Plain deploys once again deploy normally.
Updated dependencies [
e3f0cd6,8511ddf,2fedb1f]:v4.108.0Compare Source
Minor Changes
#14312
54f74b8Thanks @MattieTK! - Delegate agent-driven static Pages deploys to WorkersWhen
wrangler pages deployorwrangler pages project createis run by an AI coding agent against a brand-new, purely static project, Wrangler now delegates it to Workers static assets (using autoconfig) instead of Cloudflare Pages. Accounts that already have Cloudflare Pages projects, non-agent (human) sessions, and projects using Pages features that can't be carried across to Workers (Pages Functions, a_worker.js, or a_routes.jsonfile) are unaffected and continue to use Pages. Passing--forceto either command opts out of the delegation and deploys to Pages directly. Once the Workers deploy starts it is not silently swapped back to Pages: if it fails, the error is surfaced and the--forceopt-out is suggested.Patch Changes
#14567
0852346Thanks @dependabot! - Update dependencies of "miniflare", "wrangler", "create-cloudflare"The following dependency versions have been updated:
#14312
54f74b8Thanks @MattieTK! - Avoid silently overwriting an existing Worker during non-interactive deploys that cannot prove they own the nameA non-interactive deploy (an agent, CI, or the agent-delegated
wrangler pages deploy) has no way to prompt before overwriting a Worker, so it now stops if the target name is already taken and this run cannot show it owns that Worker. This applies when there is no Wrangler configuration file naming the Worker and either the name was generated automatically or the deploy is the Pages-to-Workers delegation (where the name carried across is a Pages project name, not proof of Worker ownership). The check reuses the service metadata the deploy already fetches, so it adds no extra API calls.Deploys are unaffected when a configuration file names the Worker (so repeat deployments continue to update it), and interactive deploys keep their existing confirmation flow. To update an existing Worker in one of the guarded cases, add a Wrangler configuration file naming it, or deploy under a different name.
Updated dependencies [
0852346]:v4.107.1Compare Source
Patch Changes
#14514
d88555eThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14564
5fd8beeThanks @jibin7jose! - Fix an issue wherewrangler devwould not override configvarswith values from.dev.varsduring local development when thesecretsfield was defined in the configuration file.#14332
5d9990eThanks @Divkix! - Fix misleading error guidance when deploying a new Worker withsecrets.requiredWhen a Worker declares
secrets.requiredand has never been deployed before, the previous error message suggested runningwrangler secret put <NAME>, which doesn't work because the Worker doesn't exist yet.The one path that does work —
wrangler deploy --secrets-file <path>— was not mentioned anywhere in the error output.The pre-deploy error now explains that
wrangler secret putcannot be used for a new Worker, and directs users to the--secrets-fileflag instead. The post-deploy error for existing Workers now also mentions--secrets-filealongsidewrangler secret put.#14507
bf49a41Thanks @joey727! - Fix a potential crash when displaying certain CLI outputPreviously, some CLI output with no content lines could cause a crash. This is now handled correctly.
#14492
1ac96a1Thanks @penalosa! - Replace the CommonJSxdg-app-pathsdependency with a vendored pure-ESM implementationxdg-app-paths(and itsxdg-portable/os-pathsdependencies) are CommonJS only, which caused "Dynamic require of 'path' is not supported" errors when the surrounding code was bundled to ESM. The global config/cache directory resolution is now provided by a small, dependency-free pure-ESM module in@cloudflare/workers-utilsthat reproduces the previous path resolution exactly (verified against the real package in unit tests), so existing config and credential locations are unchanged. This also drops the transitivefseventsoptional dependency thatxdg-app-pathspulled in.Miniflare and create-cloudflare now consume the shared helpers from
@cloudflare/workers-utilsinstead of maintaining their own copies, importing node-only leaf entry points (@cloudflare/workers-utils/fs-helpers,@cloudflare/workers-utils/global-wrangler-config-path) where ESM bundling is required.#14572
f416dd9Thanks @petebacondarwin! - Key local rate limit counters bynamespace_idinstead of binding namewrangler devand Miniflare previously tracked each rate limit binding's counter by its binding name, so two bindings that referenced the samenamespace_idwere treated as separate limiters. Counters are now keyed bynamespace_id, matching production: bindings that share anamespace_idshare a limit, while distinct namespaces stay isolated. This also re-enables rate limit bindings in multiworkerwrangler devsessions, where they were previously stripped from secondary Workers to avoid a startup crash.#14570
1ca8d8fThanks @penalosa! - Upgradesignal-exitfrom v3 to v4The bundled
signal-exitdependency was CJS-only. Upgrading to v4 (which ships a dual ESM/CJS build) unblocks ESM output. Exit-cleanup behaviour is unchanged, though v4 no longer registers handlers for a few signals that are no longer supported by the OS (SIGUNUSEDon Linux;SIGABRT/SIGALRMon Windows).#14561
b973ed3Thanks @martijnwalraven! - Emit an error event for watch-mode rebuild failures inunstable_startWorkerInitial build failures already dispatch an error event (surfaced as
buildFailedon the DevEnv bus), but watch-mode rebuild failures were only logged from inside the esbuild plugin, so programmatic consumers had no way to observe them while dev kept serving the previous bundle. Rebuild failures now route through the same error path as initial-build failures: terminal output is unchanged andbuildFailedfires symmetrically.Updated dependencies [
e7e5780,d88555e,1ac96a1,f416dd9,16fbf81]:v4.107.0Compare Source
Minor Changes
#14474
aa5d580Thanks @WillTaylorDev! - Add cache options for WorkerEntrypoint exportsYou can now set cache options on
WorkerEntrypointexports and configure cross-version cache behavior globally:Wrangler sends the
exportsconfig to the deploy and version upload APIs alongside the globalcache.enabledandcache.cross_version_cachesettings. The platform resolves those global settings plus cache overrides on exports and validates which entrypoint names are cacheable.#14382
fd92d56Thanks @petebacondarwin! - Add support for declarative Durable Object exportswrangler deploynow accepts anexportsmap inwrangler.jsonas a declarative alternative to the legacymigrationsarray.Each entry in
exportsis keyed by Durable Object class name.typecarries the export kind (currently always"durable-object"); thestatefield carries the lifecycle and defaults to"created"(live) when omitted:{ "exports": { // Provision a new Durable Object class (`MyDO`) "MyDO": { "type": "durable-object", "storage": "sqlite" }, // Delete Durable Object class (`OldGone`) "OldGone": { "type": "durable-object", "state": "deleted" }, // Rename a Durable Object class (from `OldName` to `NewName`) "OldName": { "type": "durable-object", "state": "renamed", "renamed_to": "NewName" }, "NewName": { "type": "durable-object", "storage": "sqlite" }, // Transfer a Durable Object (`Outgoing`) to a new Worker (`target-worker`) "Outgoing": { "type": "durable-object", "state": "transferred", "transferred_to": "target-worker" }, // Prepare to receive the transfer of a Durable Object (`Incoming`) from another Worker (`source-worker`) "Incoming": { "type": "durable-object", "state": "expecting-transfer", "storage": "sqlite", "transfer_from": "source-worker" } } }When a Worker declares Durable Object class bindings but no lifecycle for them (neither a
migrationsarray nor anexportsmap), wrangler warns and now suggests a declarativeexportsentry for each class (previously it suggested a legacymigrationsblock).The deployment response now surfaces the server's reconciliation result — created namespaces, applied tombstones, structured per-scenario info entries, and a
removable_entrieshint for stale tombstones that are safe to delete from the config. Blocking errors return the structured per-class detail with scenario tags, suggested remediation, and any referencing-script context.wrangler versions uploadalso forwardsexports. Declarativeexportslifecycle changes are reconciled when the version is deployed (wrangler versions deployorwrangler deploy), so aversions uploadpayload can declare new classes inexportswithout immediately provisioning them. An actor binding (durable_objects.bindings) to a class declared only inexportson the sameversions uploadis rejected with a clear error (code 100406) — the binding cannot be resolved until the namespace is provisioned. Either stage the new class viactx.exports.X(no binding required) onversions uploadand add the binding at deploy time, or usewrangler deployto provision and bind in one step (the same constraint applies to themigrationsflow).Multi-version deploys (
wrangler versions deploy A@50% B@50%) where the selected versions disagree on declarativeexportsare rejected server-side with a clear message: deploy the version that changesexportsat 100% first, then run the percentage-split deploy. This prevents traffic on one branch routing to code that references unprovisioned or just-deleted DO namespaces. Single-version (100%) deploys are unaffected.Local development (
wrangler dev,vite devandunstable_startWorker) reads Durable Object SQLite storage settings from the newexportsfield, so applications using the declarative flow get correct local-dev storage without needing to also declare amigrationsblock.@cloudflare/vitest-pool-workersalso picks up Durable Object configuration fromexports, so tests against anexports-only Worker run with the correct local SQLite storage and can reach unbound Durable Object classes viactx.exports.X.wrangler typesis also aware ofexports. Live entries (includingexpecting-transfer, the receiving side of a two-phase transfer) are added toCloudflare.GlobalProps.durableNamespaces, which typesctx.exports.Xfor unbound Durable Objects declared only viaexports.#14423
be3f792Thanks @akshitsinha! - Addwrangler flagshipcommands for managing Flagship apps and feature flags.The new
wrangler flagship appsandwrangler flagship flagscommand groups let you create, list, get, inspect, update, set, split, rollout, enable, disable, evaluate, and delete Flagship apps and flags from the CLI, including targeting rules, variations, percentage rollouts, evaluation context, and flag changelogs.#14156
e1532ebThanks @petebacondarwin! - Add opt-in OS keychain storage for OAuth credentialsBy default
wranglerstores your OAuth tokens in a plaintext file, and that is unchanged. You can now opt in to encrypting them at rest instead:wrangler login --use-keyringwrites the tokens to an AES-256-GCM-encrypted file whose key is held in your OS keyring (macOS Keychain, libsecret on Linux, or Windows Credential Manager). Existing plaintext credentials are migrated automatically on first use.Toggle it with any of:
wrangler login --use-keyring/--no-use-keyringwrangler auth keyring enable/disable(orwrangler auth keyringto print the current setting) — useful if you only use named profiles and never run the globalwrangler loginCLOUDFLARE_AUTH_USE_KEYRING=true|falseto override the saved preference for a single commandOpting out deletes the encrypted credentials rather than decrypting them back to disk, so you re-authenticate afterwards. The preference applies to every auth profile, and each named profile gets its own encrypted file and key.
Per-platform requirements: macOS uses the built-in
securitytool (nothing to install); Linux usessecret-toolfromlibsecret-tools(wrangler prints an install hint if it is missing); Windows lazily installs@napi-rs/keyring(~1.9 MB) on first opt-in, and errors with instructions in non-interactive/CI contexts.CLOUDFLARE_API_TOKENandCLOUDFLARE_API_KEY/CLOUDFLARE_EMAILcontinue to take priority over any stored OAuth credentials.Patch Changes
#14502
6b0ce98Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14306
bfe48dbThanks @matingathani! - Remove deprecated--experimental-vm-modulesflag and prevent silent exit on unexpected errorswranglerwas silently exiting with code 1 on Node.js v26 with no error message shown. This release fixes two independent issues that caused this behaviour:A stale Node.js flag that caused unexpected behaviour on Node.js v26 has been removed.
If an error occurs in a situation where the normal error reporting path itself fails,
wranglernow always prints the original error to stderr so the cause is visible rather than silently disappearing.#14481
0277bfaThanks @dario-piotrowicz! - Improve error message when deploying to a non-existent Pages project in non-interactive modePreviously, running
wrangler pages deploywith a--project-namethat doesn't exist in a non-interactive context (e.g. CI, piped input) would fail with a generic "project not found" or "This command cannot be run in a non-interactive context" error. Now it provides a specific error message explaining that the project doesn't exist and suggests how to create it. The error also suggests usingwrangler deployto deploy a Worker instead.#14305 [
98793d8](https://redirect.github.coConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.