You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.20260329.0
Minor Changes
#130259eff028 Thanks @ruifigueira! - Add missing devtools endpoints to browser rendering local binding.
The local browser rendering binding now implements the full set of devtools endpoints, matching the remote Browser Rendering API:
GET /v1/limits — returns local concurrency defaults
GET /v1/history — returns empty array (no persistence in local dev)
GET /v1/devtools/session - list and inspect active sessions
GET /v1/devtools/session/:id — list and inspect active session
GET /v1/devtools/browser/:id/json/version — Browser version metadata, includes webSocketDebuggerUrl
GET /v1/devtools/browser/:id/json/list — A list of all available websocket targets
GET /v1/devtools/browser/:id/json — Alias for GET /v1/devtools/browser/:id/json
GET /v1/devtools/browser/:id/json/protocol — The current devtools protocol, as JSON. Includes webSocketDebuggerUrl and devtoolsFrontendUrl
PUT /v1/devtools/browser/:id/json/new — Opens a new tab. Responds with the websocket target data for the new tab
GET /v1/devtools/browser/:id/json/activate/:target — Brings a page into the foreground (activate a tab)
GET /v1/devtools/browser/:id/json/close/:target — Closes the target page identified by targetId
GET /v1/devtools/browser/:id/page/:target — WebSocket connection to a page target
GET /v1/devtools/browser/:id — WebSocket connection to a previously acquired browser session
DELETE /v1/devtools/browser/:id — Closes a browser session
POST /v1/devtools/browser — Acquires a new session
GET /v1/devtools/browser — Acquire a new session and connect via WebSocket in one step, returning cf-browser-session-id header
The following dependency versions have been updated:
Dependency
From
To
workerd
1.20260317.1
1.20260329.1
#130789282493 Thanks @penalosa! - Fix noisy EBUSY errors on Windows when disposing Miniflare instances
On Windows, workerd may not release file handles immediately after disposal, causing EBUSY errors when Miniflare tries to remove its temporary directory during dispose(). Previously, this error propagated to the caller (e.g. vitest-pool-workers), producing repeated noisy error messages in test output. The cleanup is now best-effort — matching the existing exit hook behaviour — since the temporary directory lives in os.tmpdir() and will be cleaned up by the OS.
#13090a532eea Thanks @edmundhung! - Remove LOCAL_EXPLORER_BASE_PATH and LOCAL_EXPLORER_API_PATH constants in favor of CorePaths.EXPLORER
These were redundant aliases introduced before CorePaths was centralized. All internal consumers now use CorePaths.EXPLORER directly.
@cloudflare/vitest-pool-workers@0.14.0
Minor Changes
#12858f05f2da Thanks @repository! - Add disableRetryDelays() to WorkflowInstanceModifier to skip retry backoff delays in tests
When testing Workflows with retry configurations, the backoff delays between retry attempts of a failing step.do() caused real wall-clock waiting (e.g., 35 seconds for 3 retries with 5-second exponential backoff), even when step results were fully mocked. The new disableRetryDelays() method eliminates these delays while preserving retry behavior — all attempts still execute, just without waiting between them.
Patch Changes
#130916d58f0f Thanks @penalosa! - Use today's date for the RTTI compat date query instead of a hardcoded "2023-12-01", so newly added Node.js builtin modules are recognized by the module fallback service.
#13070cdb9c88 Thanks @penalosa! - Suppress CODE_MOVED for unknown code block log spam from workerd
These are internal workerd diagnostic messages not relevant to application developers. Miniflare's structured log handler already filters them, but vitest-pool-workers uses a custom handleRuntimeStdio that bypasses that pipeline. This adds the pattern to the pool's own ignore list.
#13075b8df076 Thanks @penalosa! - Support @voidzero-dev/vite-plus-test as an alternative to vitest
Users running tests via Vite+ (@voidzero-dev/vite-plus-test) with the recommended pnpm overrides no longer hit spurious version warnings or Disallowed operation called within global scope errors.
Semantic search: ai-search search with repeatable --filter key=value flags
Instance stats: ai-search stats
The create command uses an interactive wizard to guide configuration. All commands require authentication via wrangler login.
#13097cd0e971 Thanks @pombosilva! - Add --local flag to Workflows commands for interacting with local dev
All Workflows CLI commands now support a --local flag that targets a running wrangler dev session instead of the Cloudflare production API. This uses the /cdn-cgi/explorer/api/workflows endpoints served by the local dev server.
By default, commands continue to hit remote (production). Pass --local to opt in, and optionally --port to specify a custom dev server port (defaults to 8787).
Patch Changes
#13050ed20a9b Thanks @dario-piotrowicz! - Add minimum and maximum version checks for frameworks during auto-configuration
When Wrangler automatically configures a project, it now validates the installed version of the detected framework before proceeding:
If the version is below the minimum known-good version, the command exits with an error asking the user to upgrade the framework.
If the version is above the maximum known major version, a warning is emitted to let the user know the framework version has not been officially tested with this feature, and the command continues.
The following dependency versions have been updated:
Dependency
From
To
workerd
1.20260317.1
1.20260329.1
#13079746858a Thanks @penalosa! - Fix getPlatformProxy and unstable_getMiniflareWorkerOptions crashing when assets is configured without a directory
getPlatformProxy and unstable_getMiniflareWorkerOptions now skip asset setup when the config has an assets block but no directory — instead of throwing "missing required directory property". This happens when an external tool like @cloudflare/vite-plugin handles asset serving independently.
Waku has a tight integration with Hono, causing both to be detected simultaneously and triggering a "multiple frameworks found" error. Hono is now filtered out when Waku is also detected.
Previously, running autoconfig on a static project (one with no framework detected) would emit a misleading warning about a missing lock file, suggesting the project might be in a workspace. Since static projects don't require a lock file, this warning is now suppressed for them.
#13072b539dc7 Thanks @jbwcloudflare! - Skip unnecessary GET /versions?deployable=true API call in wrangler versions deploy when all version IDs are explicitly provided and --yes is passed
When deploying a specific version non-interactively (e.g. wrangler versions deploy <id> --yes), Wrangler previously always fetched the full list of deployable versions to populate the interactive selection prompt — even though the prompt is skipped entirely when --yes is used and all versions are already specified. The deployable-versions list is now only fetched when actually needed (i.e. when no version IDs are provided, or when running interactively).
#131152565b1d Thanks @dario-piotrowicz! - Improve error message when the assets directory path points to a file instead of a directory
Previously, if the path provided as the assets directory (via --assets flag or assets.directory config) pointed to an existing file rather than a directory, Wrangler would throw an unhelpful ENOTDIR system error when trying to read the _redirects file inside it. Now Wrangler detects this condition earlier and throws a clear user error.
#13111f214760 Thanks @dependabot! - Add missing connect key to WorkerEntrypoint and DurableObject key lists in the runner worker
The connect method was added to the WorkerEntrypoint and DurableObject types in workerd 1.20260329.1 but was missing from the WORKER_ENTRYPOINT_KEYS and DURABLE_OBJECT_KEYS arrays used for RPC property access in the Vite plugin runner worker. This caused the compile-time exhaustiveness check to fail with the updated workers-types.
#13068e631a94 Thanks @dario-piotrowicz! - Add runCommand and quoteShellArgs, installPackages and installWrangler utilities to @cloudflare/cli/command
These utilities are now available from @cloudflare/cli as dedicated sub-path exports: runCommand and quoteShellArgs via @cloudflare/cli/command, and installPackages and installWrangler via @cloudflare/cli/packages. This makes them reusable across packages in the SDK without duplication.
Add @cloudflare/codemod package with internal AST-based codemod utilities (parseJs, parseTs, parseFile, transformFile, mergeObjectProperties) built on recast.
@cloudflare/workers-playground@0.4.3
Patch Changes
#13105ff41b07 Thanks @petebacondarwin! - fix: resolve TypeError: createRenderer is not a function when built with Vite 8
Vite 8 switched its bundler from Rollup to rolldown. The @cloudflare/style-provider package ships a hybrid ESM+CJS build (its es/ directory uses require() internally), which rolldown mishandles by generating an anonymous, unreachable module initializer — leaving createRenderer as undefined at runtime.
Fixed by aliasing @cloudflare/style-provider to its CJS entry (lib/index.js) in vite.config.ts. Rolldown handles plain CJS correctly via its interop layer.
fix: suppress `outputGateBroken` stderr noise when testing Workflows
Per the guidelines, the body should include "one or more paragraphs explaining the reason for the change and anything notable about the approach." There is no explanation of what outputGateBroken is, why it produces noise, or how it was fixed. A brief body similar to the suppress-code-moved-logs.md changeset would be appropriate.
.changeset/warm-foxes-shave.md
Possible breaking change marked as patch.
The changeset removes two named exports (LOCAL_EXPLORER_BASE_PATH and LOCAL_EXPLORER_API_PATH) from miniflare:
Remove LOCAL_EXPLORER_BASE_PATH and LOCAL_EXPLORER_API_PATH constants in favor of CorePaths.EXPLORER
If these constants were part of miniflare's public API surface (i.e., exported from the package's entry point), removing them is a breaking change and should be at minimum minor (or major if they are considered stable API). Please verify whether these symbols appear in miniflare's public exports. If they are purely internal (not re-exported from the package index), patch is fine — but the changeset should clarify that they were internal-only to make the intent clear.
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
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.20260329.0
Minor Changes
#13025
9eff028Thanks @ruifigueira! - Add missing devtools endpoints to browser rendering local binding.The local browser rendering binding now implements the full set of devtools endpoints, matching the remote Browser Rendering API:
GET /v1/limits— returns local concurrency defaultsGET /v1/history— returns empty array (no persistence in local dev)GET /v1/devtools/session- list and inspect active sessionsGET /v1/devtools/session/:id— list and inspect active sessionGET /v1/devtools/browser/:id/json/version— Browser version metadata, includes webSocketDebuggerUrlGET /v1/devtools/browser/:id/json/list— A list of all available websocket targetsGET /v1/devtools/browser/:id/json— Alias forGET /v1/devtools/browser/:id/jsonGET /v1/devtools/browser/:id/json/protocol— The current devtools protocol, as JSON. Includes webSocketDebuggerUrl and devtoolsFrontendUrlPUT /v1/devtools/browser/:id/json/new— Opens a new tab. Responds with the websocket target data for the new tabGET /v1/devtools/browser/:id/json/activate/:target— Brings a page into the foreground (activate a tab)GET /v1/devtools/browser/:id/json/close/:target— Closes the target page identified by targetIdGET /v1/devtools/browser/:id/page/:target— WebSocket connection to a page targetGET /v1/devtools/browser/:id— WebSocket connection to a previously acquired browser sessionDELETE /v1/devtools/browser/:id— Closes a browser sessionPOST /v1/devtools/browser— Acquires a new sessionGET /v1/devtools/browser— Acquire a new session and connect via WebSocket in one step, returningcf-browser-session-idheader#13086
d4c6158Thanks @pombosilva! - Add Workflows support to the local explorer UI.The local explorer (
/cdn-cgi/explorer/) now includes a full Workflows dashboard for viewing and managing workflow instances during local development.UI features:
Patch Changes
#13111
f214760Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#13078
9282493Thanks @penalosa! - Fix noisy EBUSY errors on Windows when disposing Miniflare instancesOn Windows,
workerdmay not release file handles immediately after disposal, causingEBUSYerrors when Miniflare tries to remove its temporary directory duringdispose(). Previously, this error propagated to the caller (e.g. vitest-pool-workers), producing repeated noisy error messages in test output. The cleanup is now best-effort — matching the existing exit hook behaviour — since the temporary directory lives inos.tmpdir()and will be cleaned up by the OS.#13090
a532eeaThanks @edmundhung! - RemoveLOCAL_EXPLORER_BASE_PATHandLOCAL_EXPLORER_API_PATHconstants in favor ofCorePaths.EXPLORERThese were redundant aliases introduced before
CorePathswas centralized. All internal consumers now useCorePaths.EXPLORERdirectly.@cloudflare/vitest-pool-workers@0.14.0
Minor Changes
#12858
f05f2daThanks @repository! - AdddisableRetryDelays()toWorkflowInstanceModifierto skip retry backoff delays in testsWhen testing Workflows with retry configurations, the backoff delays between retry attempts of a failing
step.do()caused real wall-clock waiting (e.g., 35 seconds for 3 retries with 5-second exponential backoff), even when step results were fully mocked. The newdisableRetryDelays()method eliminates these delays while preserving retry behavior — all attempts still execute, just without waiting between them.Patch Changes
#13091
6d58f0fThanks @penalosa! - Use today's date for the RTTI compat date query instead of a hardcoded"2023-12-01", so newly added Node.js builtin modules are recognized by the module fallback service.#13070
cdb9c88Thanks @penalosa! - SuppressCODE_MOVED for unknown code blocklog spam from workerdThese are internal workerd diagnostic messages not relevant to application developers. Miniflare's structured log handler already filters them, but
vitest-pool-workersuses a customhandleRuntimeStdiothat bypasses that pipeline. This adds the pattern to the pool's own ignore list.#13069
6d0e329Thanks @penalosa! - fix: suppressoutputGateBrokenstderr noise when testing Workflows#13075
b8df076Thanks @penalosa! - Support@voidzero-dev/vite-plus-testas an alternative tovitestUsers running tests via Vite+ (
@voidzero-dev/vite-plus-test) with the recommended pnpm overrides no longer hit spurious version warnings orDisallowed operation called within global scopeerrors.Updated dependencies [
ffbc268,9eff028,ed20a9b,f214760,746858a,9aad27f,1fc5518,b539dc7,9282493,a532eea,cd0e971,d4c6158,2565b1d]:wrangler@4.79.0
Minor Changes
#12868
ffbc268Thanks @danielgek! - Addwrangler ai-searchcommand namespace for managing Cloudflare AI Search instancesIntroduces a CLI surface for the Cloudflare AI Search API (open beta), including:
ai-search list,create,get,update,deleteai-search searchwith repeatable--filter key=valueflagsai-search statsThe
createcommand uses an interactive wizard to guide configuration. All commands require authentication viawrangler login.#13097
cd0e971Thanks @pombosilva! - Add--localflag to Workflows commands for interacting with local devAll Workflows CLI commands now support a
--localflag that targets a runningwrangler devsession instead of the Cloudflare production API. This uses the/cdn-cgi/explorer/api/workflowsendpoints served by the local dev server.By default, commands continue to hit remote (production). Pass
--localto opt in, and optionally--portto specify a custom dev server port (defaults to 8787).Patch Changes
#13050
ed20a9bThanks @dario-piotrowicz! - Add minimum and maximum version checks for frameworks during auto-configurationWhen Wrangler automatically configures a project, it now validates the installed version of the detected framework before proceeding:
#13111
f214760Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#13079
746858aThanks @penalosa! - FixgetPlatformProxyandunstable_getMiniflareWorkerOptionscrashing whenassetsis configured without adirectorygetPlatformProxyandunstable_getMiniflareWorkerOptionsnow skip asset setup when the config has anassetsblock but nodirectory— instead of throwing "missing requireddirectoryproperty". This happens when an external tool like@cloudflare/vite-pluginhandles asset serving independently.#13112
9aad27fThanks @dario-piotrowicz! - Fix autoconfig failing onwakuprojects that usehonoWaku has a tight integration with Hono, causing both to be detected simultaneously and triggering a "multiple frameworks found" error. Hono is now filtered out when Waku is also detected.
#13113
1fc5518Thanks @dario-piotrowicz! - Skip lock file warning for static projects during autoconfigPreviously, running autoconfig on a static project (one with no framework detected) would emit a misleading warning about a missing lock file, suggesting the project might be in a workspace. Since static projects don't require a lock file, this warning is now suppressed for them.
#13072
b539dc7Thanks @jbwcloudflare! - Skip unnecessaryGET /versions?deployable=trueAPI call inwrangler versions deploywhen all version IDs are explicitly provided and--yesis passedWhen deploying a specific version non-interactively (e.g.
wrangler versions deploy <id> --yes), Wrangler previously always fetched the full list of deployable versions to populate the interactive selection prompt — even though the prompt is skipped entirely when--yesis used and all versions are already specified. The deployable-versions list is now only fetched when actually needed (i.e. when no version IDs are provided, or when running interactively).#13115
2565b1dThanks @dario-piotrowicz! - Improve error message when the assets directory path points to a file instead of a directoryPreviously, if the path provided as the assets directory (via
--assetsflag orassets.directoryconfig) pointed to an existing file rather than a directory, Wrangler would throw an unhelpfulENOTDIRsystem error when trying to read the_redirectsfile inside it. Now Wrangler detects this condition earlier and throws a clear user error.Updated dependencies [
9eff028,f214760,9282493,a532eea,d4c6158]:create-cloudflare@2.66.1
Patch Changes
#13106
c8c44a7Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#13107
687f144Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#13108
3a8a24cThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#13109
9deba25Thanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
#13110
71059beThanks @dependabot! - Update dependencies of "create-cloudflare"The following dependency versions have been updated:
@cloudflare/pages-shared@0.13.120
Patch Changes
9eff028,f214760,9282493,a532eea,d4c6158]:@cloudflare/vite-plugin@1.30.3
Patch Changes
#13111
f214760Thanks @dependabot! - Add missingconnectkey toWorkerEntrypointandDurableObjectkey lists in the runner workerThe
connectmethod was added to theWorkerEntrypointandDurableObjecttypes in workerd 1.20260329.1 but was missing from theWORKER_ENTRYPOINT_KEYSandDURABLE_OBJECT_KEYSarrays used for RPC property access in the Vite plugin runner worker. This caused the compile-time exhaustiveness check to fail with the updated workers-types.Updated dependencies [
ffbc268,9eff028,ed20a9b,f214760,746858a,9aad27f,1fc5518,b539dc7,9282493,a532eea,cd0e971,d4c6158,2565b1d]:@cloudflare/cli@1.3.0
Minor Changes
#13068
e631a94Thanks @dario-piotrowicz! - AddrunCommandandquoteShellArgs,installPackagesandinstallWranglerutilities to@cloudflare/cli/commandThese utilities are now available from
@cloudflare/clias dedicated sub-path exports:runCommandandquoteShellArgsvia@cloudflare/cli/command, andinstallPackagesandinstallWranglervia@cloudflare/cli/packages. This makes them reusable across packages in the SDK without duplication.@cloudflare/codemod@1.1.0
Minor Changes
#13102
e200179Thanks @dario-piotrowicz! - First release of new packageAdd
@cloudflare/codemodpackage with internal AST-based codemod utilities (parseJs,parseTs,parseFile,transformFile,mergeObjectProperties) built onrecast.@cloudflare/workers-playground@0.4.3
Patch Changes
#13105
ff41b07Thanks @petebacondarwin! - fix: resolve TypeError: createRenderer is not a function when built with Vite 8Vite 8 switched its bundler from Rollup to rolldown. The
@cloudflare/style-providerpackage ships a hybrid ESM+CJS build (itses/directory usesrequire()internally), which rolldown mishandles by generating an anonymous, unreachable module initializer — leavingcreateRendererasundefinedat runtime.Fixed by aliasing
@cloudflare/style-providerto its CJS entry (lib/index.js) invite.config.ts. Rolldown handles plain CJS correctly via its interop layer.@cloudflare/workflows-shared@0.7.2
Patch Changes
#13086
d4c6158Thanks @pombosilva! - Add Workflows support to the local explorer UI.The local explorer (
/cdn-cgi/explorer/) now includes a full Workflows dashboard for viewing and managing workflow instances during local development.UI features: