Update dependency wrangler to v4.114.0#1122
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 2, 2026 17:51
ff0d1c8 to
279cd20
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 4, 2026 15:46
279cd20 to
18ddc61
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 9, 2026 17:09
18ddc61 to
0854f48
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 13, 2026 20:06
0854f48 to
8189b4b
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 16, 2026 17:09
8189b4b to
3f768f3
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 18, 2026 20:37
3f768f3 to
bfa6d0f
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 19, 2026 14:31
bfa6d0f to
b791721
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 23, 2026 19:45
b791721 to
51554e0
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 25, 2026 15:05
51554e0 to
3789e6d
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
June 30, 2026 18:43
3789e6d to
cc15cab
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 2, 2026 16:47
cc15cab to
1303ca9
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 7, 2026 19:48
1303ca9 to
da76b45
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 7, 2026 20:40
da76b45 to
ad1bf23
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 8, 2026 19:45
ad1bf23 to
3dc54d3
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 9, 2026 17:18
3dc54d3 to
523bcb9
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 9, 2026 23:35
523bcb9 to
1c8fa2b
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 15, 2026 12:53
1c8fa2b to
1d61953
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 17, 2026 10:37
1d61953 to
f7d7967
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 22, 2026 00:05
f7d7967 to
1ebd5a3
Compare
renovate
Bot
force-pushed
the
renovate/wrangler-4.x-lockfile
branch
from
July 23, 2026 19:33
1ebd5a3 to
710bc68
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.95.0→4.114.0Release Notes
cloudflare/workers-sdk (wrangler)
v4.114.0Compare Source
Minor Changes
#14633
3203b5dThanks @nickpatt! - Add local-dev observabilitywrangler devand the Vite plugin now capture a trace for every local Worker invocation - spans, logs, andconsole.*output, including requests that cross worker or Durable Object boundaries.You can explore this data two ways:
/cdn-cgi/explorer/api/local/observability/query, discoverable via the Local Explorer's OpenAPI document, so coding agents and tools can query the samespansandlogstables.While this is in testing it's off by default; set
X_LOCAL_OBSERVABILITY=trueto turn it on. It will be on by default in the public release.Patch Changes
#14373
246ce92Thanks @Jacroney! - Improve the D1 database-limit error messageWhen creating a D1 database fails because the account has hit its database limit, the error now points to the relevant next steps — upgrading on the Workers Free plan or requesting a higher limit on a paid plan — alongside the existing commands to list and delete databases. Previously it only suggested deleting unused databases. This applies both to
wrangler d1 createand to the D1 database that is created during resource provisioning on deploy.#14796
c38a2c3Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14788
8416b33Thanks @chinesepowered! - Fix grammar in the container image-too-large errorThe error thrown when a container image exceeds the available disk size ended with "Your need more disk for this image." It now reads "You need more disk for this image."
#14809
4683ff8Thanks @jamesopstad! - Ignore the removedlegacy_envfield when reading a redirected configurationOlder versions of tools such as the Vite plugin can generate a redirected configuration (
.wrangler/deploy/config.json) that still includes the removedlegacy_envfield. Since these files are tool-generated, users could not easily remove the field themselves, and Wrangler would error out. Wrangler now silently stripslegacy_envfrom redirected configurations. User-authored configurations still report an error so that the field can be removed.#14593
02232f3Thanks @spk-ai! - Fix dev proxy silently hanging or returning a misleading 503 on network errors for non-root-path requestsDuring
wrangler dev, a transient network error on any request path other than/could be misclassified as the worker being reloaded, even when it wasn't:GET/HEADrequests would silently hang (with nothing logged) until the client timed out, and other methods would receive a misleadingYour worker restarted mid-request503. Such errors are now reported and surfaced immediately when the worker has not actually changed.#14797
f8a8c2cThanks @roerohan! - Explain how to provision Flagship bindings ifapp_idmissing in remote developmentWrangler now reports that a Flagship binding without an
app_idmust first be created withwrangler flagship apps create.Updated dependencies [
c38a2c3,c079ba3,95b026e,c4bacec,3203b5d]: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/