Releases: cloudflare/workers-sdk
Release list
wrangler@4.124.0
Minor Changes
-
#15026
6529f0cThanks @petebacondarwin! - Allow containers to be attached to a Durable Object from itsexportsentryA container can now be linked to its Durable Object from the export side, using a new
containerfield that names an entry in thecontainersarray. As a resultcontainers[].class_nameis now optional — a container that is referenced this way only needs aname:The existing
containers[].class_namedirection keeps working and either direction may be used, but the two must agree: a container that names its Durable Object cannot also be claimed by a different one.containeris only valid on livedurable-objectexports (createdandexpecting-transfer) and requiresstorage: "sqlite". Wrangler now also reports an error when:- a
containerreference names a container that does not exist - two Durable Object exports claim the same container
- a container and a Durable Object export disagree about which one they are linked to
- a container ends up linked to no Durable Object at all
- two containers share a
name - a container's
class_namenames a Durable Object whosestorageislegacy-kv - two containers are attached to the same Durable Object
That last case was previously accepted but could never work: workerd attaches a single container per Durable Object namespace, and in local development every container for a class builds into the same image tag, so one silently overwrote the other. If you have two containers on one
class_name, give each its own Durable Object class. - a
Patch Changes
-
#15211
bc5726bThanks @nithin42! - Honoraccess.devwhen running Workers with@cloudflare/vitest-pool-workers, soctx.access.getIdentity()returns the configured identity just as it does withwrangler dev. -
#14999
ba54f0dThanks @mittalpk! - Fix.envloading on Windows leaking stale, differently-cased duplicate keysOn Windows,
wranglerloads.envvalues through a case-insensitiveProxywrapper so lookups likeenv.PATHandenv.Pathresolve to the same value, and this object is assigned directly toprocess.env. When a key was set again under a different casing (e.g. a value in.env.localoverriding one from.envwith different casing), the previous casing was never removed from the underlying object.env.PATH/env.Pathstill returned the correct, latest value, but anything that enumeratesprocess.env—Object.keys,for...in,JSON.stringify, object spread, or a spawned subprocess inheriting the environment — would see both the stale and current key.Duplicate entries no longer appear, so environment variables passed to subprocesses and any code that lists the environment now see only the latest value for each variable.
-
#15044
b7422b0Thanks @stareezy-1! - Normalize structural CRLF line endings before sending D1 commands to the remote query APIwrangler d1 migrations apply --remoteandwrangler d1 execute --remote --commandfailed withincomplete input: SQLITE_ERRORwhen the SQL contained CRLF line endings inside a compound statement such as aCREATE TRIGGER ... BEGIN ... END;body. Structural line endings are now normalized to LF before the command is sent to the D1 query API, while CRLF inside quoted values and identifiers remains unchanged. -
#15046
186339cThanks @erwinzhang7! - Fixes D1 SQL statements not handling lowercaseends correctlywrangler d1 executeandwrangler d1 migrations applysplit a SQL file into statements before running them. ABEGINorCASEblock closed with a lowercaseendwas not recognised as closed, so every statement after it was folded into that block instead of being run on its own. SQLite accepts either case, so a file like this applied only the trigger and silently skipped the table:CREATE TRIGGER IF NOT EXISTS update_trigger AFTER UPDATE ON items begin DELETE FROM updates WHERE item_id=old.id; end; CREATE TABLE after_the_trigger (id TEXT PRIMARY KEY);
Files written with an uppercase
ENDwere unaffected. Both cases now behave the same. -
#15231
4f922dcThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To @cloudflare/workers-types ^5.20260811.1 ^5.20260814.1 workerd 1.20260811.1 1.20260814.1 -
#15248
4d74b8dThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To @cloudflare/workers-types ^5.20260814.1 ^5.20260815.1 workerd 1.20260814.1 1.20260815.1 -
#15185
1f79aceThanks @jamesopstad! - Resolve--latestto the newest compatibility date supported by the installed runtimewrangler deploy --latestandwrangler versions upload --latestresolved the compatibility date to the current date, andwrangler pages download configdid the same for projects configured to always use the latest compatibility date. Both write that date into a configuration file for subsequent commands to use, so a date that the installedworkerddid not yet support left the project unable to runwrangler dev.These now resolve to the latest compatibility date supported by this version of Wrangler, which is the release date of the
workerdit ships with. -
#15151
49f73deThanks @maximilliangrand! - Fix spuriousTrailing comma jsonc(519)warnings forwrangler.jsoncin VS Code 1.131+Trailing commas in
wrangler.jsoncfiles that reference Wrangler's JSON schema are no longer reported as errors by recent versions of VS Code. Wrangler always accepted these files; only the editor warning was wrong. -
#14983
7cee278Thanks @kdelay! - RespectCLOUDFLARE_ACCOUNT_IDinwrangler pages project list,createanddeleteThese three commands could target a previously used account even when
CLOUDFLARE_ACCOUNT_IDwas set, failing withAuthentication error [code: 10000]in setups with more than one account. They now use the account named byCLOUDFLARE_ACCOUNT_ID, matching the rest ofwrangler pages. When the variable is unset, the previously used account is still selected, as before. -
#15153
265256aThanks @podonnell-dev! - Fixwrangler preview base-configcommands showing an inheritedscriptpositional -
#15185
1f79aceThanks @jamesopstad! - Use a fixed default compatibility date rather than the current dateWhen no compatibility date was set, Wrangler, C3 and the Vitest pool all defaulted to the current date.
workerdonly accepts a compatibility date up to 7 days beyond its own release, so whenever aworkerdrelease was delayed the default could get ahead of the runtime that had been installed, and local development would fail to start.The default is now fixed at the release date of the
workerdversion that ships with each release, which leaves a week of headroom and updates asworkerdis upgraded.@cloudflare/vite-pluginpreviously inlined the date at which it was built. It now shares the same default.
create-cloudflare@2.72.1
Patch Changes
-
#15217
1447950Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To @angular/create 22.1.3 22.1.4 -
#15218
6d71eebThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To create-solid 0.8.1 0.10.0 -
#15219
ee15a07Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To create-next-app 16.3.0 16.3.1 -
#15220
1282749Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To create-vinext-app 1.0.0-beta.1 1.0.0-beta.2 -
#15221
7af190aThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To create-analog 2.6.4 2.7.0 -
#15222
afe5788Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
Dependency From To create-vike 0.0.673 0.0.675 -
#14953
05959fbThanks @edmundhung! - Update the Hello World templates to use the latest version of@cloudflare/vitest-pool-workers. -
#15185
1f79aceThanks @jamesopstad! - Use a fixed default compatibility date rather than the current dateWhen no compatibility date was set, Wrangler, C3 and the Vitest pool all defaulted to the current date.
workerdonly accepts a compatibility date up to 7 days beyond its own release, so whenever aworkerdrelease was delayed the default could get ahead of the runtime that had been installed, and local development would fail to start.The default is now fixed at the release date of the
workerdversion that ships with each release, which leaves a week of headroom and updates asworkerdis upgraded.@cloudflare/vite-pluginpreviously inlined the date at which it was built. It now shares the same default.
@cloudflare/workers-utils@0.33.1
Patch Changes
-
#15088
fb6b51bThanks @Neal006! - Report malformed container SSH keys and a non-objectcontainers.configurationas config errors instead of crashingPreviously, a
containersentry with a malformedauthorized_keysortrusted_user_ca_keysentry (a missing or non-stringpublic_key, or an entry that is not an object), or acontainers.configurationset tonull, made Wrangler exit with a stack trace and "If you think this is a bug, please open an issue" rather than pointing at the field.These configurations now produce an ordinary configuration error naming the offending field and array index, such as
containers.authorized_keys[0].public_key must be a string. Apublic_keythat is not an ED25519 key is also now reported with correct grammar. -
#15010
1b73c87Thanks @LeSingh1! - Report an invalidqueues.consumersvalue as a configuration error instead of crashingPreviously, setting
queues.consumersto something other than an array (for examplenullor a string) could crash Wrangler or produce a flood of confusing extra errors. You now get a single clear message telling you the field must be an array.
@cloudflare/workers-auth@0.6.4
Patch Changes
-
#15080
b6d00edThanks @teamleaderleo! - Use the current Cloudflare Access service-token credentials after environment variables change. Interactive Access cookie caching is unchanged. -
Updated dependencies [
fb6b51b,1b73c87]:- @cloudflare/workers-utils@0.33.1
@cloudflare/vitest-pool-workers@0.22.0
Minor Changes
-
#13830
49d4e00Thanks @penalosa! - Mocking requests with MSW in Worker tests now requires MSW >= 2.14@cloudflare/vitest-pool-workerspreviously shipped internal shims to make MSW work inside the workerd runtime. MSW 2.14 added that support natively, so those shims have been removed.If you mock requests with MSW in your Worker tests, make sure you're on MSW
>= 2.14; older versions will no longer intercept requests. You can keep usingsetupServer()frommsw/node, or adopt the official@msw/cloudflareintegration viasetupNetwork(). See the updatedrequest-mockingexample fixture for the recommended pattern.
Patch Changes
-
#15211
bc5726bThanks @nithin42! - Honoraccess.devwhen running Workers with@cloudflare/vitest-pool-workers, soctx.access.getIdentity()returns the configured identity just as it does withwrangler dev. -
#15156
3ddd3ceThanks @dario-piotrowicz! - Fix module resolution for relativerequire()inside CJS deps when the project path contains spacesWhen a project lives under a directory with a space in its name, externalized CommonJS dependencies that use relative
require()calls (e.g.require("./lib/impl.js")) would fail with "No such module" becauseworkerdpreserves URL encoding in the module name. Encoded module paths are now handled deterministically before CommonJS resolution without altering literal percent sequences. -
#15150
2cf3143Thanks @kkkhs! - Restore typedinject()keys incloudflareTest()pool optionsinject()insidecloudflareTest()options again infers the value type from the keys you declare in your VitestProvidedContext, and reports misspelled keys. For keys that are only provided at runtime, pass an explicit type argument, e.g.inject<number>("myPort"). -
#15185
1f79aceThanks @jamesopstad! - Use a fixed default compatibility date rather than the current dateWhen no compatibility date was set, Wrangler, C3 and the Vitest pool all defaulted to the current date.
workerdonly accepts a compatibility date up to 7 days beyond its own release, so whenever aworkerdrelease was delayed the default could get ahead of the runtime that had been installed, and local development would fail to start.The default is now fixed at the release date of the
workerdversion that ships with each release, which leaves a week of headroom and updates asworkerdis upgraded.@cloudflare/vite-pluginpreviously inlined the date at which it was built. It now shares the same default. -
Updated dependencies [
bc5726b,1277a72,ba54f0d,6529f0c,b7422b0,186339c,4f922dc,4d74b8d,2e0c962,1f79ace,49f73de,7cee278,8777180,265256a,1f79ace,f431166,8fb2b87,75cf407]:- wrangler@4.124.0
- miniflare@5.20260815.0-alpha
@cloudflare/vite-plugin@1.53.0
Minor Changes
-
#15026
6529f0cThanks @petebacondarwin! - Allow containers to be attached to a Durable Object from itsexportsentryA container can now be linked to its Durable Object from the export side, using a new
containerfield that names an entry in thecontainersarray. As a resultcontainers[].class_nameis now optional — a container that is referenced this way only needs aname:{ "name": "my-worker", "main": "worker.js", "compatibility_date": "2026-07-01", "containers": [ { "name": "my-container", "image": "./Dockerfile", "max_instances": 1 } ], "exports": { "MyContainerDO": { "type": "durable-object", "storage": "sqlite", "container": "my-container" } } }The existing
containers[].class_namedirection keeps working and either direction may be used, but the two must agree: a container that names its Durable Object cannot also be claimed by a different one.containeris only valid on livedurable-objectexports (createdandexpecting-transfer) and requiresstorage: "sqlite". Wrangler now also reports an error when:- a
containerreference names a container that does not exist - two Durable Object exports claim the same container
- a container and a Durable Object export disagree about which one they are linked to
- a container ends up linked to no Durable Object at all
- two containers share a
name - a container's
class_namenames a Durable Object whosestorageislegacy-kv - two containers are attached to the same Durable Object
That last case was previously accepted but could never work: workerd attaches a single container per Durable Object namespace, and in local development every container for a class builds into the same image tag, so one silently overwrote the other. If you have two containers on one
class_name, give each its own Durable Object class. - a
Patch Changes
-
#15238
3a4fc6bThanks @jamesopstad! - Honoraccess.devwhen running Workers with@cloudflare/vite-plugin, soctx.access.getIdentity()returns the configured identity. -
#15028
d4f441fThanks @harshmathurx! - Handle Worker-side request body cancellation without surfacing stream controller errors in local dev. -
#15185
1f79aceThanks @jamesopstad! - Use a fixed default compatibility date rather than the current dateWhen no compatibility date was set, Wrangler, C3 and the Vitest pool all defaulted to the current date.
workerdonly accepts a compatibility date up to 7 days beyond its own release, so whenever aworkerdrelease was delayed the default could get ahead of the runtime that had been installed, and local development would fail to start.The default is now fixed at the release date of the
workerdversion that ships with each release, which leaves a week of headroom and updates asworkerdis upgraded.@cloudflare/vite-pluginpreviously inlined the date at which it was built. It now shares the same default. -
#15239
f431166Thanks @jamesopstad! - Prevent date-enabled Node.js compatibility from adding conflicting globals to generated runtime typesRuntime type generation now treats Node.js compatibility enabled by a compatibility date the same way as an explicit
nodejs_compatflag. Node.js globals continue to come from@types/nodeinstead of being generated asanydeclarations that override those types. -
#15196
8fb2b87Thanks @skepticfx! - Use the FedRAMP High managed container registry when Wrangler targets the FedRAMP High compliance regionContainer builds, pushes, deployments, image commands, and local development now select the corresponding production or staging FedRAMP registry and API from either
compliance_regionorCLOUDFLARE_COMPLIANCE_REGION. -
Updated dependencies [
bc5726b,1277a72,ba54f0d,6529f0c,b7422b0,186339c,4f922dc,4d74b8d,2e0c962,1f79ace,49f73de,7cee278,8777180,265256a,1f79ace,f431166,8fb2b87,75cf407]:- wrangler@4.124.0
- miniflare@5.20260815.0-alpha
@cloudflare/runtime-types@0.0.15
@cloudflare/remote-bindings@0.0.13
@cloudflare/edge-preview-authenticated-proxy@0.3.3
Patch Changes
-
#15224
32782e4Thanks @petebacondarwin! - Fix missing request and error metrics for the edge preview proxyThe proxy stopped reporting its request and error counters, so dashboards and alerts based on them had no data. Metrics reporting now works again.
{ "name": "my-worker", "main": "worker.js", "compatibility_date": "2026-07-01", "containers": [ { "name": "my-container", "image": "./Dockerfile", "max_instances": 1 } ], "exports": { "MyContainerDO": { "type": "durable-object", "storage": "sqlite", "container": "my-container" } } }