Version Packages - #14824
Merged
Merged
Conversation
Contributor
|
✅ All changesets look good |
@cloudflare/autoconfig
@cloudflare/config
create-cloudflare
@cloudflare/deploy-helpers
@cloudflare/kv-asset-handler
miniflare
@cloudflare/pages-shared
@cloudflare/unenv-preset
@cloudflare/vite-plugin
@cloudflare/vitest-pool-workers
@cloudflare/workers-auth
@cloudflare/workers-editor-shared
@cloudflare/workers-utils
wrangler
commit: |
workers-devprod
force-pushed
the
changeset-release/main
branch
27 times, most recently
from
July 28, 2026 08:19
c87541e to
d35ba77
Compare
workers-devprod
force-pushed
the
changeset-release/main
branch
6 times, most recently
from
July 28, 2026 16:50
9600248 to
73e02b8
Compare
workers-devprod
force-pushed
the
changeset-release/main
branch
from
July 28, 2026 19:02
73e02b8 to
c291008
Compare
NuroDev
approved these changes
Jul 28, 2026
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 was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
miniflare@4.20260722.1
Minor Changes
#14702
e426cb9Thanks @Sipixer! - Support passing V8 flags toworkerdvia theMINIFLARE_WORKERD_V8_FLAGSenvironment variableThe generated
workerdconfig already supportsv8Flags, but Miniflare never populated it, so the runtime always ran with V8's default heap limit (~1.4 GB). Large dev applications (e.g. big SSR module graphs under@cloudflare/vite-plugin, where each server-file edit grows the runner isolate's heap) can reach that limit, at which pointworkerdaborts withV8 fatal error; location = Reached heap limitand every subsequentdispatchFetch()fails withfetch faileduntil the dev server is manually restarted.Setting e.g.
MINIFLARE_WORKERD_V8_FLAGS="--max-old-space-size=4096"raises the limit and keeps long dev sessions alive. The variable follows the same space-separated format asMINIFLARE_WORKERD_AUTOGATES.#14280
465c0fbThanks @tahmid-23! - Add a local S3-compatible API for R2 buckets at/cdn-cgi/local/r2/s3/<bucket-id>, where<bucket-id>is the ID the bucket is configured with in ther2BucketsoptionBuckets configured with
s3Credentials: { accessKeyId, secretAccessKey }inr2Bucketsare served over an S3-compatible HTTP API, authenticated with AWS Signature Version 4 (bothAuthorizationheader and presigned URL query authentication). Supported operations: GetObject, HeadObject, PutObject, CopyObject, DeleteObject, DeleteObjects, ListObjects, ListObjectsV2, HeadBucket, ListBuckets, CreateMultipartUpload, UploadPart, UploadPartCopy, CompleteMultipartUpload, and AbortMultipartUpload. Status codes, error responses, and unsupported-header screening mirror R2's S3 endpoint, including its static responses for bucket-configuration reads and its named errors for unimplemented operations.#14712
6e0bf6eThanks @mack-erel! - Supportconnect()on remote VPC Network and VPC Service bindings in local developmentRemote VPC Network and VPC Service bindings previously only supported HTTP and JSRPC, so calling
binding.connect(address)against a private TCP service (for example a database) failed in local dev withIncoming CONNECT on a worker not supported. Raw TCP connections through remote VPC Network and VPC Service bindings now work in local development.This feature is experimental. Existing HTTP and JSRPC usage of remote VPC Network and VPC Service bindings is unaffected, and no new configuration is required.
Patch Changes
#14784
1035f74Thanks @ATKasem! - FixgetWithMetadatadropping metadata for falsy KV valuesKVNamespace.getWithMetadatareturnednullmetadata whenever the stored value was falsy — an empty string or"0"— because the metadata branch was guarded by a truthiness check on the value. The guard now checks fornullexplicitly, so metadata is preserved for empty-string and"0"values while genuinely missing keys still returnnull.#14864
3a22ae5Thanks @Hashim1999164! - Hide the workerd console window on Windows when the parent process has no console. Spawning workerd withoutwindowsHide: truecaused Windows Terminal to open a visible, focus-stealing window for background or detached parents (for example Astro'sastro dev --background).@cloudflare/vite-plugin@1.48.0
Minor Changes
#14883
76e6014Thanks @jamesopstad! - Serve the bundled client HTML in dev when Vite'sexperimental.bundledDevis enabledNote that this feature is experimental and subject to change.
Patch Changes
#14862
c232d05Thanks @petebacondarwin! - Destroy the client socket instead of crashing when a WebSocket upgrade failsIf
dispatchFetchrejected while a WebSocket upgrade was still in flight (for example when Miniflare is disposed during a dev server shutdown or restart), the error escaped theasyncupgrade handler as an unhandled rejection. This could terminate the dev server process and leaked the client socket. The upgrade handler now catches such failures and tears the socket down cleanly.#14837
de6a951Thanks @1rgs! - Fix compatibility with Vite'sexperimental.bundledDevoption. Keep Miniflare, containers, and tunnels alive when a build runs in dev.The plugin used the
buildEndhook as its signal that the dev server was closing, and tore down its dev resources there. Vite'sexperimental.bundledDevruns a build pass duringserve, which firesbuildEndwhile the dev server is still live — so Miniflare was disposed (the next request failed withExpected \miniflare` to be defined`), locally-built container images were removed, and any active tunnel was closed, all mid-serve.During
serve, these resources are now torn down from a patchedserver.close. We will replace server patching with first-class APIs when they are added to Vite.#14851
fb89b72Thanks @exKAZUu! - Retry transient module-transport failures in the runner workerEach
fetchModuleinvoke was a single fetch to the dev server with no retry. If that one fetch failed transiently (e.g.Network connection lostwhen workerd reuses a loopback connection that Node just closed), Vite's module runner cached the rejection and every request importing the affected module failed for the rest of the dev session. The invoke is an idempotent request for module code, so retry it up to three times before giving up.Updated dependencies [
773ead4,773ead4,09b8a44,4dfb96e,1035f74,e426cb9,3a22ae5,465c0fb,465c0fb,e8b3a9d,552bcfc,b737676,6e0bf6e]:@cloudflare/vitest-pool-workers@0.19.0
Minor Changes
#14879
e6480e3Thanks @dmmulroy! - Add averboseoption tocloudflareTest()andcloudflarePool()configurationSet
verbose: falseto suppress verbose workerd runtime logs, such as caught Durable Object RPC errors. The option defaults totrueto preserve existing output.Patch Changes
#14821
edc203eThanks @mishushakov! - Ignore workerd'sdisconnected: peer disconnected without gracefully ending TLS sessionexception logsWhen tests make real
fetch()calls to external TLS endpoints, servers and load balancers routinely close idle keepalive connections without sending a TLSclose_notify. No request fails — the connection is idle — but workerd logs akj/compat/tls.c++exception with a full stack trace each time, flooding otherwise green test runs. This is the TLS sibling of thedisconnected: ...messages already in the ignore list, so filter it the same way.Updated dependencies [
773ead4,773ead4,09b8a44,4dfb96e,1035f74,e426cb9,3a22ae5,465c0fb,465c0fb,e8b3a9d,552bcfc,b737676,6e0bf6e]:@cloudflare/workers-utils@0.29.0
Minor Changes
#14877
552bcfcThanks @jasoncabot! - Respect and surface theRetry-Afterheader on Cloudflare API responsesPreviously, if a Wrangler command (e.g.
wrangler versions upload,wrangler deploy) hit the Cloudflare API's rate limit, the resulting error gave no indication of how long to wait before trying again, and 429 responses weren't retried at all (only5xxerrors were, with a fixed linear backoff).Now:
429 Too Many Requestsresponses are automatically retried, alongside the existing5xxretry behaviour.Retry-Afterheader, Wrangler waits for that duration instead of the default backoff, and logs a message indicating how long it's waiting. To avoid blocking for an excessive amount of time, waits longer than 60 seconds fail fast instead — the surfacedRetry-Aftervalue lets the caller schedule its own retry.Retry-Afterduration, and thecommand-failedentry written to the Wrangler output file (WRANGLER_OUTPUT_FILE_PATH/WRANGLER_OUTPUT_FILE_DIRECTORY) gains aretry_after_msfield. This lets scripts and CI/CD pipelines calling Wrangler repeatedly (for example,wrangler versions uploadon every commit) read the wait duration directly instead of regex-parsing stderr.APIError.isRetryable()is unchanged (still5xxonly);retryOnAPIFailure()separately retries 429s.retryAfterMs, when present, is honoured for any retried error, not just 429s.retryAfterMsis also now populated onAPIErrors raised from direct R2 object requests, the Browser Rendering API, and errors surfaced from commands using the officialcloudflareSDK client.wrangler@4.115.0
Minor Changes
#14807
4dfb96eThanks @oOPa! - Add hidden--jurisdictionoption towrangler kv namespace createfor internal testingThis option creates a KV namespace within a specific jurisdiction (for example
us,eu, orfedramp), backing it with jurisdiction-scoped storage. It is experimental and currently gated to allow-listed accounts, so it is hidden from--helpuntil the feature is generally available.#14280
465c0fbThanks @tahmid-23! - Add experimentallocal_dev.experimental_s3_credentialstor2_bucketsconfigWhen set, the R2 bucket is served over a local S3-compatible API at
/cdn-cgi/local/r2/s3/<bucket-id>during local development, authenticated with the configured AWS SigV4 credentials.<bucket-id>is the bucket'sbucket_name, or the binding name ifbucket_nameis not set:{ "r2_buckets": [ { "binding": "BUCKET", "bucket_name": "my-bucket", "local_dev": { "experimental_s3_credentials": { "accessKeyId": "local-access-key-id", "secretAccessKey": "local-secret-access-key" } } } ] }#14877
552bcfcThanks @jasoncabot! - Respect and surface theRetry-Afterheader on Cloudflare API responsesPreviously, if a Wrangler command (e.g.
wrangler versions upload,wrangler deploy) hit the Cloudflare API's rate limit, the resulting error gave no indication of how long to wait before trying again, and 429 responses weren't retried at all (only5xxerrors were, with a fixed linear backoff).Now:
429 Too Many Requestsresponses are automatically retried, alongside the existing5xxretry behaviour.Retry-Afterheader, Wrangler waits for that duration instead of the default backoff, and logs a message indicating how long it's waiting. To avoid blocking for an excessive amount of time, waits longer than 60 seconds fail fast instead — the surfacedRetry-Aftervalue lets the caller schedule its own retry.Retry-Afterduration, and thecommand-failedentry written to the Wrangler output file (WRANGLER_OUTPUT_FILE_PATH/WRANGLER_OUTPUT_FILE_DIRECTORY) gains aretry_after_msfield. This lets scripts and CI/CD pipelines calling Wrangler repeatedly (for example,wrangler versions uploadon every commit) read the wait duration directly instead of regex-parsing stderr.APIError.isRetryable()is unchanged (still5xxonly);retryOnAPIFailure()separately retries 429s.retryAfterMs, when present, is honoured for any retried error, not just 429s.retryAfterMsis also now populated onAPIErrors raised from direct R2 object requests, the Browser Rendering API, and errors surfaced from commands using the officialcloudflareSDK client.#14712
6e0bf6eThanks @mack-erel! - Supportconnect()on remote VPC Network and VPC Service bindings in local developmentRemote VPC Network and VPC Service bindings previously only supported HTTP and JSRPC, so calling
binding.connect(address)against a private TCP service (for example a database) failed in local dev withIncoming CONNECT on a worker not supported. Raw TCP connections through remote VPC Network and VPC Service bindings now work in local development.This feature is experimental. Existing HTTP and JSRPC usage of remote VPC Network and VPC Service bindings is unaffected, and no new configuration is required.
Patch Changes
#14833
773ead4Thanks @DiogoSantoss! - Color Email Routing plan change markersWrangler now highlights additions in green, updates in yellow, and deletions and conflicts in red so Email Routing deployment plans are easier to scan before confirmation.
#14833
773ead4Thanks @DiogoSantoss! - Apply Email Routing changes across independent zones concurrentlyWrangler now limits concurrent zone updates while preserving the Email Routing plan order within each zone. Deployments that configure addresses across multiple zones complete faster without breaking delete-before-add transitions at a zone's rule limit.
#14815
09b8a44Thanks @chinesepowered! - Fixwrangler cloudchamber curlmangling header values that contain a colonHeader values were split on every colon and only the segment between the first and second was sent, so
--header location:https://example.com/xarrived ashttps. Headers are now split on the first colon only. A header that is not in the documented--header <name>:<value>form previously threw an unhandledTypeError, and now reports a clear error.#14806
e8b3a9dThanks @akim136! - Handle and explain authentication failures from remote bindings during local developmentWrangler now recognizes authentication failures from remote preview sessions and reports that bindings which need to run remotely require Cloudflare authentication even when the rest of the Worker is developed locally.
#14801
b737676Thanks @emily-shen! - Speed up old debug log cleanup by reading each log file's date from its filename instead ofstat-ing every fileWrangler periodically deletes debug log files older than 30 days from its logs directory. Previously it made a filesystem
statcall for each file to read its modification time; it now derives the age from the timestamp already encoded in the log filename, avoiding that extra work.Updated dependencies [
1035f74,e426cb9,3a22ae5,465c0fb,6e0bf6e]:@cloudflare/autoconfig@0.2.1
Patch Changes
552bcfc]:@cloudflare/cli-shared-helpers@0.1.17
Patch Changes
552bcfc]:create-cloudflare@2.70.15
Patch Changes
#14767
3a141edThanks @jasoncabot! - Fixgit commithanging whencommit.gpgsignis enabledIf you have GPG commit signing configured with a passphrase-protected key, the initial commit created during project setup would appear to hang: the passphrase prompt couldn't get keyboard input because it had to compete with C3's own progress output for control of the terminal. The only way out was Ctrl+C, which also skipped the rest of setup, including the prompt to deploy your new project.
git commitnow runs the same way it would if you ran it yourself, so passphrase-protected signing keys work as expected. A failure while staging files is also now reported correctly instead of leaving the progress indicator spinning indefinitely.#14758
b8b60f2Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#14852
9caa6efThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#14853
0debc23Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#14854
afaeceeThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#14855
e015a43Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#14856
7fd99b8Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#14857
a460a2aThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#14858
dfe39fcThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#14859
d44bd80Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#14888
29ea4d2Thanks @chinesepowered! - Fix thehello-world-workflowsJavaScript template crashing at runtimeMyWorkflowdefined a constructor that assigned tothiswithout callingsuper()first, so instantiating the Workflow threwReferenceError: Must call super constructor in derived class before accessing 'this'. The constructor also took(env)whereWorkflowEntrypointis constructed with(ctx, env). It was redundant in the first place — the base class already assignsthis.env— so it has been removed, matching the TypeScript variant of the same template.@cloudflare/deploy-helpers@0.6.2
Patch Changes
#14833
773ead4Thanks @DiogoSantoss! - Color Email Routing plan change markersWrangler now highlights additions in green, updates in yellow, and deletions and conflicts in red so Email Routing deployment plans are easier to scan before confirmation.
#14833
773ead4Thanks @DiogoSantoss! - Apply Email Routing changes across independent zones concurrentlyWrangler now limits concurrent zone updates while preserving the Email Routing plan order within each zone. Deployments that configure addresses across multiple zones complete faster without breaking delete-before-add transitions at a zone's rule limit.
Updated dependencies [
1035f74,e426cb9,3a22ae5,465c0fb,552bcfc,6e0bf6e]:@cloudflare/pages-shared@0.13.161
Patch Changes
1035f74,e426cb9,3a22ae5,465c0fb,6e0bf6e]:@cloudflare/workers-auth@0.5.3
Patch Changes
552bcfc]:@cloudflare/remote-bindings@0.0.3
Patch Changes
773ead4,773ead4,1035f74,e426cb9,3a22ae5,465c0fb,552bcfc,6e0bf6e]:@cloudflare/runtime-types@0.0.6
Patch Changes
1035f74,e426cb9,3a22ae5,465c0fb,6e0bf6e]:@cloudflare/workflows-shared@0.12.2
Patch Changes
#14840
03a4330Thanks @Kkartik14! - Fix local Workflows retaining abort listeners after waits completeWorkflow sleeps, retry delays, and event waits now share a typed abort-aware race that removes its listener when either side settles. This prevents long-running local Workflow instances from retaining a listener and its captured promise state for every completed wait until the instance is paused or evicted.