releases.shpreview
Cloudflare/Workers SDK

Workers SDK

Mon
Wed
Fri
JunJulAugSepOctNovDecJanFebMarAprMay
Less
More
Releases276Avg84/moVersions@cloudflare/cli-shared-helpers@0.1.4 to wrangler@4.97.0
create-cloudflare@2.70.0
Minor Changes
  • #14095 8b4e917 Thanks @dario-piotrowicz! - Hide non-framework categories when --platform=pages is specified

    When running C3 with --platform=pages, the "Hello World example" and "Application Starter" categories are now hidden since they only produce Workers projects. The framework list is also filtered to only show frameworks that support the Pages platform. This makes it clear that C3 can only create Pages projects when using a framework.

Patch Changes
  • #14128 7868998 Thanks @dependabot! - Update dependencies of "create-cloudflare"

    The following dependency versions have been updated:

    DependencyFromTo
    @angular/create21.2.1221.2.13
  • #14129 fe97ff8 Thanks @dependabot! - Update dependencies of "create-cloudflare"

    The following dependency versions have been updated:

    DependencyFromTo
    create-react-router7.15.17.16.0
  • #14113 063d98e Thanks @petebacondarwin! - Switch the react-router template to scaffold from the upstream create-react-router default template and overlay Cloudflare-specific files locally

    Previously, C3 invoked create-react-router with --template <pinned GitHub URL> pointing at a specific commit of remix-run/react-router-templates/cloudflare. This pinning was needed because the upstream Cloudflare template had been deleted before, leaving us reliant on a third-party source we don't control.

    We now invoke create-react-router without --template (using the upstream default template) and overlay all Cloudflare-specific files — workers/app.ts, wrangler.jsonc, split tsconfigs, a Cloudflare-flavored vite.config.ts, entry.server.tsx, etc. — from templates/react-router/ts/. A configure step deletes Dockerfile/.dockerignore and the @react-router/node/@react-router/serve dependencies and start script that ship with the default template.

    This brings the react-router template in line with how astro, svelte, and react already work and removes our dependency on a deleted upstream template. The scaffolded project is functionally equivalent to before.

@cloudflare/workers-utils@0.22.1
Patch Changes
  • #14084 e86489a Thanks @dario-piotrowicz! - Correctly map JSON bindings in mapWorkerMetadataBindings

    The json binding case used literal keys name and json instead of a computed property key [binding.name]: binding.json. This caused JSON bindings to always produce { name: "<binding_name>", json: <value> } instead of { <binding_name>: <value> }, clobbering any existing vars with those keys. This is now consistent with how plain_text bindings are mapped.

  • #14105 337e912 Thanks @dario-piotrowicz! - Remove trailing periods from URLs in terminal output

    URLs printed to the terminal with a sentence-ending period (e.g. https://example.com/path.) would include the period when clicked in some terminal emulators, causing 404 errors. This removes trailing periods from all URLs displayed in CLI output across wrangler, miniflare, vitest-pool-workers, and workers-utils.

  • #14063 65b5f9e Thanks @emily-shen! - Move fetch helpers into @cloudflare/workers-utils

    Shared Cloudflare API fetch helper types and plumbing now live in @cloudflare/workers-utils so Wrangler and other clients can use the same implementation.

@cloudflare/workers-editor-shared@0.1.2
Patch Changes
  • #14112 3a746ac Thanks @penalosa! - Pin non-bundled runtime dependencies to exact versions

    Dependencies that are not bundled into a package's published output are installed directly into consumers' dependency trees, so they are now pinned to exact versions instead of semver ranges. This closes a supply-chain gap where an unpinned external dependency could resolve to a compromised upstream release on a fresh install. A new pnpm check:pinned-deps lint enforces this for all published packages (and for the shared pnpm catalog) going forward.

@cloudflare/cli-shared-helpers@0.1.6
Patch Changes
  • #14112 3a746ac Thanks @penalosa! - Pin non-bundled runtime dependencies to exact versions

    Dependencies that are not bundled into a package's published output are installed directly into consumers' dependency trees, so they are now pinned to exact versions instead of semver ranges. This closes a supply-chain gap where an unpinned external dependency could resolve to a compromised upstream release on a fresh install. A new pnpm check:pinned-deps lint enforces this for all published packages (and for the shared pnpm catalog) going forward.

  • Updated dependencies [e86489a, 337e912, 65b5f9e]:

    • @cloudflare/workers-utils@0.22.1
wrangler@4.97.0
Minor Changes
  • #13996 94b29f7 Thanks @vaishnav-mk! - Add restart-from-step options to wrangler workflows instances restart

    You can now restart a Workflow instance from a specific step using --from-step-name, with optional --from-step-count and --from-step-type disambiguation. These options work for both remote Workflow instances and local wrangler dev --local sessions.

Patch Changes
  • #14141 b210c5e Thanks @MattieTK! - Add re-authentication hint to account fetch error messages

    When Wrangler fails to automatically retrieve account IDs, the error messages now suggest running wrangler login as a troubleshooting step. This addresses confusion for users who encounter these errors after OAuth system changes or other authentication issues.

  • #14078 aec1bb8 Thanks @MattieTK! - Bump am-i-vibing from 0.1.1 to 0.4.0

    This updates the agentic environment detection library to the latest version, which includes improved detection coverage for newer AI coding agents.

  • #14147 e06cbb7 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    DependencyFromTo
    workerd1.20260529.11.20260601.1
  • #14027 9a26191 Thanks @matingathani! - Gracefully handle EMFILE error when assets directory exceeds OS watcher limit

    Previously, when wrangler dev was pointed at an assets directory with more than ~4,096 subdirectories, the chokidar file watcher threw an EMFILE: too many open files error that was not caught, causing an infinite error loop that made the dev server unresponsive.

    Now the error is caught and wrangler:

    1. Logs a clear warning explaining the platform watcher limit was hit
    2. Recommends reducing the number of subdirectories by flattening or restructuring the assets directory
    3. Disables the assets watcher gracefully so the dev server continues working without hot-reload
  • #14041 5565823 Thanks @matingathani! - Fix wrangler complete printing the AI skills prompt into shell completion output

    Previously, running eval "$(wrangler complete zsh)" (or any other shell) would fail with errors like zsh: command not found: --install-skills because the interactive AI agent skills installation prompt was included in the completion script output.

    The skills prompt is now skipped when running wrangler complete, so the generated completion script is clean and can be sourced correctly.

  • #13881 890fca7 Thanks @matingathani! - Show a clear error when --metadata is not valid JSON instead of silently ignoring the value

  • #14149 6fc9777 Thanks @mattjohnsonpint! - Fix wrangler deploy --upload-source-maps silently skipping source maps when the entry file ends with magic comments after //# sourceMappingURL=

    Wrangler previously assumed the //# sourceMappingURL= comment was the last non-empty line of a module. Tools like sentry-cli sourcemaps inject append a //# debugId= comment after it, which silently caused source maps to be omitted from the upload form, most commonly when deploying with --no-bundle --upload-source-maps. Wrangler now scans trailing magic comments (lines starting with //# or //@) and detects the //# sourceMappingURL= comment regardless of which other magic comments follow it.

  • #14105 337e912 Thanks @dario-piotrowicz! - Remove trailing periods from URLs in terminal output

    URLs printed to the terminal with a sentence-ending period (e.g. https://example.com/path.) would include the period when clicked in some terminal emulators, causing 404 errors. This removes trailing periods from all URLs displayed in CLI output across wrangler, miniflare, vitest-pool-workers, and workers-utils.

  • #14150 8e7b74f Thanks @avenceslau! - Fix Workflows schedules deploy payload to match the control plane API

    When deploying a Workflow with a schedules binding property, Wrangler sent the cron expressions as a list of strings. The Workflows API expects a list of objects of the form { cron: string }, so the request was rejected. Wrangler now maps each configured cron expression to { cron } (normalizing a single string or an array) when building the request. The user-facing config still accepts a string or an array of strings.

  • #14084 e86489a Thanks @dario-piotrowicz! - Fix JSON variable bindings in wrangler init --from-dash and remote config diff

    When fetching a remote Worker's configuration, JSON variable bindings (e.g. {"my_value": 5}) were incorrectly serialized as { "name": "MY_JSON", "json": {"my_value": 5} } instead of { "MY_JSON": {"my_value": 5} }. This affected two areas:

    • wrangler init --from-dash would generate a wrangler.json with broken vars entries
    • Remote config diff checks would always report JSON bindings as changed, since the malformed remote representation could never match the local config

    Both issues are now fixed and remote JSON bindings are now correctly mapped.

  • #14155 42288d4 Thanks @dario-piotrowicz! - Include agent skill installation status in all telemetry events

    The agent skill installation status is now consistently included in all telemetry events, not just a subset of them.

  • #14063 65b5f9e Thanks @emily-shen! - Move fetch helpers into @cloudflare/workers-utils

    Shared Cloudflare API fetch helper types and plumbing now live in @cloudflare/workers-utils so Wrangler and other clients can use the same implementation.

  • #14112 3a746ac Thanks @penalosa! - Pin non-bundled runtime dependencies to exact versions

    Dependencies that are not bundled into a package's published output are installed directly into consumers' dependency trees, so they are now pinned to exact versions instead of semver ranges. This closes a supply-chain gap where an unpinned external dependency could resolve to a compromised upstream release on a fresh install. A new pnpm check:pinned-deps lint enforces this for all published packages (and for the shared pnpm catalog) going forward.

  • #14124 64ef9fd Thanks @odiak! - Fix wrangler secret bulk dropping newlines from .env input read from stdin

    Previously, .env input piped through stdin was concatenated without line breaks, so only the first secret could be parsed correctly. Stdin input now preserves line separators before parsing.

  • Updated dependencies [e06cbb7, 4ef790b, 337e912, 3a746ac]:

    • miniflare@4.20260601.0
miniflare@4.20260601.0
Patch Changes
  • #14147 e06cbb7 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    DependencyFromTo
    workerd1.20260529.11.20260601.1
  • #14086 4ef790b Thanks @dario-piotrowicz! - Use 127.0.0.1 instead of localhost for the runtime inspector address

    On systems where getaddrinfo("localhost") returns ::1 but IPv6 is disabled at the kernel level, workerd fails to bind the inspector socket and silently continues without emitting the listen-inspector event to the control FD. This caused wrangler dev to hang indefinitely at "Starting local server..." with no error output.

    Using 127.0.0.1 explicitly is consistent with DEFAULT_HOST, --debug-port, and resolveLocalhost() already in the codebase.

  • #14105 337e912 Thanks @dario-piotrowicz! - Remove trailing periods from URLs in terminal output

    URLs printed to the terminal with a sentence-ending period (e.g. https://example.com/path.) would include the period when clicked in some terminal emulators, causing 404 errors. This removes trailing periods from all URLs displayed in CLI output across wrangler, miniflare, vitest-pool-workers, and workers-utils.

  • #14112 3a746ac Thanks @penalosa! - Pin non-bundled runtime dependencies to exact versions

    Dependencies that are not bundled into a package's published output are installed directly into consumers' dependency trees, so they are now pinned to exact versions instead of semver ranges. This closes a supply-chain gap where an unpinned external dependency could resolve to a compromised upstream release on a fresh install. A new pnpm check:pinned-deps lint enforces this for all published packages (and for the shared pnpm catalog) going forward.

@cloudflare/vite-plugin@1.39.2
Patch Changes
  • #13893 d8a16e7 Thanks @penalosa! - Add an experimental, internal cf-vite delegate binary

    This adds an experimental bin/cf-vite binary that is spawned by Cloudflare's own parent tooling to drive the plugin as a long-running dev-server subprocess. It is not part of the plugin's public API surface, is not intended to be invoked directly, and its contract may change at any time without notice.

  • #14117 3c86121 Thanks @aicayzer! - Forward response headers from the Worker on WebSocket upgrade responses

    Headers set on a new Response(null, { status: 101, webSocket, headers }) returned from the Worker are now propagated to the upgrade response sent to the browser during vite dev. Previously the headers were dropped, so cookies (Set-Cookie) and custom headers (X-*) on WebSocket handshake responses were invisible client-side — even though they were delivered correctly by wrangler dev.

  • Updated dependencies [b210c5e, aec1bb8, e06cbb7, 9a26191, 5565823, 4ef790b, 890fca7, 6fc9777, 337e912, 8e7b74f, e86489a, 42288d4, 65b5f9e, 3a746ac, 64ef9fd, 94b29f7]:

    • wrangler@4.97.0
    • miniflare@4.20260601.0
@cloudflare/deploy-helpers@0.1.1
Patch Changes
  • #14063 65b5f9e Thanks @emily-shen! - Move fetch helpers into @cloudflare/workers-utils

    Shared Cloudflare API fetch helper types and plumbing now live in @cloudflare/workers-utils so Wrangler and other clients can use the same implementation.

@cloudflare/vitest-pool-workers@0.16.12
Patch Changes
  • #14152 3d7992e Thanks @petebacondarwin! - Fix module resolution failing when project path contains spaces

    When a project lived under a directory with spaces (e.g. /Users/me/Documents/Master CMS/project), the vitest pool would fail with No such module "threads.js" before any test executed. The module fallback service now uses the rawSpecifier from workerd's fallback request to correctly decode file:// URLs, avoiding the double-encoding of spaces (%20%2520) that occurred when workerd resolved these URLs as relative paths.

  • #14105 337e912 Thanks @dario-piotrowicz! - Remove trailing periods from URLs in terminal output

    URLs printed to the terminal with a sentence-ending period (e.g. https://example.com/path.) would include the period when clicked in some terminal emulators, causing 404 errors. This removes trailing periods from all URLs displayed in CLI output across wrangler, miniflare, vitest-pool-workers, and workers-utils.

  • #14112 3a746ac Thanks @penalosa! - Pin non-bundled runtime dependencies to exact versions

    Dependencies that are not bundled into a package's published output are installed directly into consumers' dependency trees, so they are now pinned to exact versions instead of semver ranges. This closes a supply-chain gap where an unpinned external dependency could resolve to a compromised upstream release on a fresh install. A new pnpm check:pinned-deps lint enforces this for all published packages (and for the shared pnpm catalog) going forward.

  • #14061 da8e306 Thanks @Vardiak! - Preserve Durable Object WebSocket handler invocation order

    Durable Object WebSocket events could begin executing out of order in the Workers Vitest integration when several events arrived while the test wrapper was resolving user code.

    Handler invocation now preserves arrival order while still allowing asynchronous handler completion to run concurrently.

  • Updated dependencies [b210c5e, aec1bb8, e06cbb7, 9a26191, 5565823, 4ef790b, 890fca7, 6fc9777, 337e912, 8e7b74f, e86489a, 42288d4, 65b5f9e, 3a746ac, 64ef9fd, 94b29f7]:

    • wrangler@4.97.0
    • miniflare@4.20260601.0
wrangler@4.96.0
Minor Changes
  • https://github.com/cloudflare/workers-sdk/pull/13955 a2ef1a3 Thanks @G4brym! - Add support for the new web_search binding kind.

    Cloudflare Web Search is a managed, zero-setup web discovery primitive for agents and Workers. Declare the binding as a single object in wrangler.jsonc:

    {
    	"web_search": { "binding": "WEBSEARCH" },
    }

    There is exactly one shared web corpus, so there is no namespace, instance, or other field to specify -- only the variable name. The binding exposes a single search() method that returns URLs and catalog metadata for a query. Web Search is discovery-only -- to read a result's content the caller invokes the global fetch() API against the result's url.

    The binding is always remote in local development: Miniflare proxies to the production Web Search service via the remote-bindings transport. Adds the websearch.run OAuth scope to wrangler login.

    Also adds a wrangler websearch search command for running ad-hoc queries from the CLI:

    npx wrangler websearch search "cloudflare workers"
    npx wrangler websearch search "cloudflare workers" --limit 5
    npx wrangler websearch search "cloudflare workers" --json

    --limit is optional (defaults to 10, capped at 20). --json prints the raw response; without it the results render as a pretty table.

  • #13610 cbb39bd Thanks @petebacondarwin! - Add support for agent_memory bindings

    Agent Memory bindings allow Workers to connect to Cloudflare's Agent Memory service for storing and retrieving agent conversation state. This binding is remote-only, meaning it always connects to the Cloudflare API during wrangler dev rather than using a local simulation.

    To configure an agent_memory binding, add the following to your wrangler.json:

    {
    	"agent_memory": [
    		{
    			"binding": "MY_MEMORY",
    			"namespace": "my-namespace",
    		},
    	],
    }

    Wrangler will automatically provision the namespace during deployment if it does not already exist. Type generation via wrangler types is also supported.

    This change also adds the agent-memory:write OAuth scope to Wrangler's default login scopes, so wrangler login can request the permissions needed to provision and manage Agent Memory namespaces.

  • #13610 cbb39bd Thanks @petebacondarwin! - Add wrangler agent-memory namespace commands

    The following commands have been added for managing Agent Memory namespaces:

    wrangler agent-memory namespace create <namespace>
    wrangler agent-memory namespace list [--json]
    wrangler agent-memory namespace get <namespace_name> [--json]
    wrangler agent-memory namespace delete <namespace_name> [--force]
  • #14071 f623ae4 Thanks @sherryliu-lsy! - Add confirmation prompt to wrangler containers images delete

    Previously, running wrangler containers images delete IMAGE:TAG would delete the image immediately with no confirmation. The command now prompts for confirmation before deleting. Use -y or --skip-confirmation to bypass the prompt in non-interactive or scripted environments.

  • #13860 c8c7ec0 Thanks @oliy! - Rename pipeline field to stream in pipeline bindings configuration

    The pipeline field inside pipelines bindings has been renamed to stream to align with the updated API wire format. The old pipeline field is still accepted but deprecated and will emit a warning.

    Before:

    // wrangler.json
    {
    	"pipelines": [
    		{
    			"binding": "MY_PIPELINE",
    			"pipeline": "my-stream-name",
    		},
    	],
    }

    After:

    // wrangler.json
    {
    	"pipelines": [
    		{
    			"binding": "MY_PIPELINE",
    			"stream": "my-stream-name",
    		},
    	],
    }
  • #13960 39d8717 Thanks @cmackenzie1! - Allow pipeline, stream, and sink commands to resolve resources by name with pagination-aware lookups.

  • #14019 ee56ec0 Thanks @danielrs! - Support deleting secrets via wrangler secret bulk You can now delete secrets in bulk by setting their value to null in the JSON input file:

    { "SECRET_TO_DELETE": null, "SECRET_TO_UPDATE": "new-value" }
  • #14091 4c0da7b Thanks @gpanders! - Add ProxyCommand support for wrangler containers ssh

    wrangler containers ssh now automatically switches to a stdio proxy when invoked by OpenSSH's ProxyCommand, and --stdio can force this mode. This lets users connect with ssh <instance_id> when their SSH config uses Wrangler as the proxy command.

  • #13892 13cbadb Thanks @penalosa! - Remove the deprecated experimental.testMode option from unstable_dev

    experimental.testMode previously only affected the default logLevel (warn when testMode: true, log otherwise) and has been flagged for removal in its type-definition comment since it landed. It is now removed, and unstable_dev's default log level matches wrangler dev's (log).

    Callers that explicitly passed testMode: true to get quieter logs should now set logLevel: "warn" directly.

Patch Changes
  • #14016 408432a Thanks @petebacondarwin! - report all failing triggers from a single deploy

    wrangler deploy deploys several kinds of trigger in parallel (routes, custom domains, schedules, queue producers/consumers, workflows). Previously, if one of those API calls failed, the first rejection short-circuited the rest, no other deployments were reported, and (in the case of custom-domain confirmation conflicts) some failures were silently logged to stdout without the deploy actually failing.

    wrangler deploy now waits for every trigger deployment to settle, prints every successfully-deployed target (so you still see what landed), and then throws a single error listing every trigger that failed.

    Note that this also turns the previously-silent "user declined to override a conflicting Custom Domain" case into a hard failure of wrangler deploy, which matches what was always implied by the message ("Publishing to Custom Domain ... was skipped, fix conflict and try again").

  • #14125 1103c07 Thanks @dario-piotrowicz! - Bump rosie-skills from 0.7.6 to 0.8.1 and bundle it into the Wrangler output

    The new version of rosie-skills is a pure-TypeScript rewrite that removes the previously necessary ~600kb WASM binary. The package now ships only JavaScript with one minimal dependencies (modern-tar).

    Additionally, rosie-skills is now bundled directly into Wrangler's distributable rather than kept as an external runtime dependency. This eliminates the supply chain concern raised in #14110: there is no separate package to resolve at install time, since all code is inlined into Wrangler's build output.

  • #14135 5b5cbd3 Thanks @Refaerds! - Update the generated type for browser bindings to BrowserRun

    When running wrangler types, browser bindings were previously typed as the generic Fetcher. They now generate the more specific and accurate BrowserRun type.

  • #14068 2c1d8b2 Thanks @dario-piotrowicz! - Bump rosie-skills package from 0.6.3 to 0.7.6

  • #14062 ce4eb20 Thanks @dario-piotrowicz! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    DependencyFromTo
    workerd1.20260526.11.20260527.1
  • #14076 97d7d81 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    DependencyFromTo
    workerd1.20260527.11.20260528.1
  • #14100 c647ccc Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    DependencyFromTo
    workerd1.20260528.11.20260529.1
  • #13815 5fa3de6 Thanks @penalosa! - Disable Sentry error reporting by default

    WRANGLER_SEND_ERROR_REPORTS now defaults to false instead of prompting on every error. The current prompt produces too many false-positive reports. Users can still opt in explicitly by setting WRANGLER_SEND_ERROR_REPORTS=true.

  • #14074 37176e5 Thanks @MattieTK! - Fix wrangler setup failing for Vite projects without a config file

    wrangler setup (and wrangler deploy --experimental-autoconfig) crashed with "Could not find Vite config file to modify" for Vite projects that don't have a vite.config.js or vite.config.ts. This affected 6 of the 16 create-vite templates: vanilla, vanilla-ts, react-swc, react-swc-ts, lit, and lit-ts.

    Autoconfig now creates a minimal Vite config with the Cloudflare plugin when no config file exists, instead of failing. The file extension (.ts or .js) is chosen based on whether the project has a tsconfig.json.

  • #14026 66d86ba Thanks @matingathani! - Show helpful message with URL when browser cannot be opened in headless/container environments

    Previously, running wrangler login (or any command that opens a browser) in headless Linux environments without xdg-open installed would crash with a confusing "A file or directory could not be found — Missing file or directory: xdg-open" error.

    Now wrangler catches the error and prints a clear warning with the URL so users can copy-paste it into a browser manually.

  • #14020 9dee4cc Thanks @shiminshen! - wrangler secrets-store secret create and secret update now reject secret values larger than 64 KiB (65,536 bytes) with a clear error before calling the Cloudflare API. Previously the CLI accepted them, the secret appeared in secret list, and the failure surfaced later (and confusingly) at worker deploy time as a "secret doesn't exist" error against the binding. 64 KiB is the cap enforced by the API; the CLI now enforces it at the same boundary.

  • #14059 b64b7e4 Thanks @matingathani! - Fix wrangler kv bulk get printing "Success!" to stdout, which corrupted JSON output when piped to tools like jq

  • #14002 e4c8fd9 Thanks @danyalahmed1995! - Show a clear error for invalid API token header characters

    Wrangler now detects API tokens containing characters that cannot be sent in the HTTP Authorization header before making an API request. This avoids a low-level ByteString conversion error and helps users recreate or recopy the token without printing the token value.

  • #14132 2dffeeb Thanks @dario-piotrowicz! - Adapt React Router autoconfig based on v8_middleware future flag

    The React Router autoconfig (wrangler setup) now detects whether v8_middleware: true is set in the user's react-router.config.ts. When it is, the generated workers/app.ts uses a simplified fetch handler without AppLoadContext module augmentation, and the generated app/entry.server.tsx omits the _loadContext parameter. When v8_middleware is not set, the existing AppLoadContext pattern with env/ctx params is preserved.

    This avoids breaking projects that use the v8_middleware future flag (which changes the context API from AppLoadContext to RouterContextProvider), while keeping the traditional pattern for projects that haven't opted in.

  • #14133 59e43e4 Thanks @matingathani! - Fix wrangler whoami printing a trailing period after the api-tokens URL

    The message To see token permissions visit https://...api-tokens. ended with a period that became part of the URL when clicked in terminals or GitHub Actions output, causing a 404. The period is removed and a comma added before "visit" so the sentence reads naturally without a trailing period on the URL.

  • Updated dependencies [a2ef1a3, cbb39bd, 7bb5c7a, c8c7ec0, 97d7d81, c647ccc, ce4eb20, 0ce88ea, 972d13d]:

    • miniflare@4.20260529.0
miniflare@4.20260529.0
Minor Changes
  • #13955 a2ef1a3 Thanks @G4brym! - Add support for the new web_search binding kind.

    Cloudflare Web Search is a managed, zero-setup web discovery primitive for agents and Workers. Declare the binding as a single object in wrangler.jsonc:

    {
    	"web_search": { "binding": "WEBSEARCH" },
    }

    There is exactly one shared web corpus, so there is no namespace, instance, or other field to specify -- only the variable name. The binding exposes a single search() method that returns URLs and catalog metadata for a query. Web Search is discovery-only -- to read a result's content the caller invokes the global fetch() API against the result's url.

    The binding is always remote in local development: Miniflare proxies to the production Web Search service via the remote-bindings transport. Adds the websearch.run OAuth scope to wrangler login.

    Also adds a wrangler websearch search command for running ad-hoc queries from the CLI:

    npx wrangler websearch search "cloudflare workers"
    npx wrangler websearch search "cloudflare workers" --limit 5
    npx wrangler websearch search "cloudflare workers" --json

    --limit is optional (defaults to 10, capped at 20). --json prints the raw response; without it the results render as a pretty table.

  • #13610 cbb39bd Thanks @petebacondarwin! - Add support for agent_memory bindings

    Agent Memory bindings allow Workers to connect to Cloudflare's Agent Memory service for storing and retrieving agent conversation state. This binding is remote-only, meaning it always connects to the Cloudflare API during wrangler dev rather than using a local simulation.

    To configure an agent_memory binding, add the following to your wrangler.json:

    {
    	"agent_memory": [
    		{
    			"binding": "MY_MEMORY",
    			"namespace": "my-namespace",
    		},
    	],
    }

    Wrangler will automatically provision the namespace during deployment if it does not already exist. Type generation via wrangler types is also supported.

    This change also adds the agent-memory:write OAuth scope to Wrangler's default login scopes, so wrangler login can request the permissions needed to provision and manage Agent Memory namespaces.

  • #13860 c8c7ec0 Thanks @oliy! - Rename pipeline field to stream in pipeline bindings configuration

    The pipeline field inside pipelines bindings has been renamed to stream to align with the updated API wire format. The old pipeline field is still accepted but deprecated and will emit a warning.

    Before:

    // wrangler.json
    {
    	"pipelines": [
    		{
    			"binding": "MY_PIPELINE",
    			"pipeline": "my-stream-name",
    		},
    	],
    }

    After:

    // wrangler.json
    {
    	"pipelines": [
    		{
    			"binding": "MY_PIPELINE",
    			"stream": "my-stream-name",
    		},
    	],
    }
  • #14079 972d13d Thanks @edmundhung! - Add JSON output to /cdn-cgi/handler/scheduled

    The /cdn-cgi/handler/scheduled endpoint now accepts ?format=json to return the scheduled handler result as JSON, including whether the handler called controller.noRetry(). Requests without format=json still return the existing text outcome for backward compatibility.

Patch Changes
  • #14106 7bb5c7a Thanks @dario-piotrowicz! - Add timeout to browser-rendering browser launch to prevent infinite hangs

    The browser-rendering plugin's launchBrowser() function now passes a 5-minute timeout to waitForLineOutput() when waiting for Chrome to print its DevTools WebSocket URL. Previously, if Chrome failed to start or crashed before printing the URL, the promise would hang forever. This could cause CI pipelines and local dev sessions to get stuck indefinitely.

  • #14062 ce4eb20 Thanks @dario-piotrowicz! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    DependencyFromTo
    workerd1.20260526.11.20260527.1
  • #14076 97d7d81 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    DependencyFromTo
    workerd1.20260527.11.20260528.1
  • #14100 c647ccc Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    DependencyFromTo
    workerd1.20260528.11.20260529.1
  • #13968 0ce88ea Thanks @danieltroger! - Fix wrangler dev crash under Yarn PnP when the worker emits a structured log or the inspector forwards a stack trace.

    getFreshSourceMapSupport was unconditionally indexing require.cache, but when miniflare is imported from ESM under Yarn PnP, Node's ESM->CJS bridge (loadCJSModule in node:internal/modules/esm/translators) hands the wrapped CJS module a re-invented require that only carries .resolve and .main, with no .cache. Fall back to createRequire(__filename) in that case so the fresh-load cache-swap keeps working.

create-cloudflare@2.69.0
Minor Changes
  • #14096 a5b7690 Thanks @MattieTK! - Migrate TanStack Start scaffolding from @tanstack/create-start to @tanstack/cli

    TanStack has consolidated their project scaffolding into a unified CLI package (@tanstack/cli) with a create subcommand, replacing the previous @tanstack/create-start package. This updates C3 to use the new CLI while preserving the same Cloudflare deployment target and React framework options.

@cloudflare/workers-utils@0.22.0
Minor Changes
  • #13955 a2ef1a3 Thanks @G4brym! - Add support for the new web_search binding kind.

    Cloudflare Web Search is a managed, zero-setup web discovery primitive for agents and Workers. Declare the binding as a single object in wrangler.jsonc:

    {
    	"web_search": { "binding": "WEBSEARCH" },
    }

    There is exactly one shared web corpus, so there is no namespace, instance, or other field to specify -- only the variable name. The binding exposes a single search() method that returns URLs and catalog metadata for a query. Web Search is discovery-only -- to read a result's content the caller invokes the global fetch() API against the result's url.

    The binding is always remote in local development: Miniflare proxies to the production Web Search service via the remote-bindings transport. Adds the websearch.run OAuth scope to wrangler login.

    Also adds a wrangler websearch search command for running ad-hoc queries from the CLI:

    npx wrangler websearch search "cloudflare workers"
    npx wrangler websearch search "cloudflare workers" --limit 5
    npx wrangler websearch search "cloudflare workers" --json

    --limit is optional (defaults to 10, capped at 20). --json prints the raw response; without it the results render as a pretty table.

  • #13860 c8c7ec0 Thanks @oliy! - Rename pipeline field to stream in pipeline bindings configuration

    The pipeline field inside pipelines bindings has been renamed to stream to align with the updated API wire format. The old pipeline field is still accepted but deprecated and will emit a warning.

    Before:

    // wrangler.json
    {
    	"pipelines": [
    		{
    			"binding": "MY_PIPELINE",
    			"pipeline": "my-stream-name",
    		},
    	],
    }

    After:

    // wrangler.json
    {
    	"pipelines": [
    		{
    			"binding": "MY_PIPELINE",
    			"stream": "my-stream-name",
    		},
    	],
    }
Patch Changes
  • #14111 599b27a Thanks @nikitacano! - Fix cloudflared SHA256 checksum mismatch on macOS

    The update service (update.argotunnel.com) returns a checksum for the extracted binary, not the .tgz tarball. We were computing the SHA256 of the tarball itself, which always mismatched on macOS where cloudflared is distributed as a compressed archive.

    This aligns with cloudflared's own auto-updater (cmd/cloudflared/updater/workers_update.go), which decompresses the tarball first, then checksums the resulting binary. We now do the same: extract, then verify.

  • #12400 d4177ce Thanks @dario-piotrowicz! - Filter compatibility date fallback warning when no update is available

    The compatibility date warning from workerd (e.g., "The latest compatibility date supported by the installed Cloudflare Workers Runtime is...") is now only shown when a newer version of @cloudflare/vite-plugin is available. This matches the behavior in Wrangler and reduces noise when the user is already on the latest version.

    The update-check logic has been extracted to @cloudflare/workers-utils so it can be shared across packages.

@cloudflare/vite-plugin@1.39.1
Patch Changes
@cloudflare/vitest-pool-workers@0.16.11
Patch Changes
Last Checked
26m ago
Latest
create-cloudflare@2.70.0
Tracking since Jan 20, 2026