fix(deps): update dependency wrangler ( 4.118.0 ➔ 4.142.0 ) #33

Open
renovate wants to merge 1 commit from renovate/cloudflare-tooling into development
Member

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
wrangler (source) 4.118.0 → 4.142.0 age adoption passing confidence

Merge Confidence badges are included where supported — low or neutral confidence warrants a manual impact check before merge.

Released is the upstream publish time. — means this datasource reports no release timestamp — normal for ghcr.io, quay.io and private/proxy registries — so minimumReleaseAge cannot hold the update back and it is eligible as soon as checks pass. A real date means the soak is enforced: add this update type's minimumReleaseAge to Released to get the eligibility moment.


Release Notes

cloudflare/workers-sdk (wrangler)

v4.142.0

Compare Source

Minor Changes
  • #​15856 4c2993b Thanks @​Naapperas! - Support Workflows declared in exports on ctx.exports in local development

    A Workflow declared in a Worker's exports is now available on ctx.exports in wrangler dev, the Vite plugin and the Vitest plugin, with the same API as a Workflow binding:

    const instance = await ctx.exports.MyWorkflow.create({
      params: { name: "World" },
    });
    

    ctx.exports and workflows bindings with the same Workflow name share their instances, including instances created before the Workflow was declared in exports. Two Workers can't export the same Workflow name, and a binding to an exported Workflow must refer to the Worker and class that export it. getPlatformProxy() ignores Workflows declared in exports, since it doesn't run the Worker's code.

    wrangler workflows commands run with --local also work with Workflows declared only in exports, without a workflows binding.

    In the Vitest plugin, introspectWorkflow() and introspectWorkflowInstance() still need a Workflow binding, and now explain how to add one when passed a Workflow from ctx.exports. Instances created through ctx.exports are introspected too. A workflows binding whose script_name is the Worker's own name now resolves to the Worker itself again.

Patch Changes

v4.141.0

Compare Source

Minor Changes
  • #​15658 8280086 Thanks @​jqmmes! - Add Durable Objects code update strategies to Worker deployments

    Use --durable-objects-code-update-mode immediate with wrangler deploy, wrangler versions deploy, and wrangler rollback to update code without waiting for active instances to hibernate. Use --durable-objects-code-update-mode deferred 30s to set a maximum delay, or configure durable_objects.code_update_strategy with mode and max_delay. When unset, the strategy defaults to deferred with a 5-minute maximum delay; delays cannot exceed 24 hours and must use millisecond precision.

  • #​15800 bd56b98 Thanks @​Refaerds! - Add Browser Run as an event source for Queue subscriptions

    You can now create Queue subscriptions with --source browserRun.

Patch Changes

v4.140.0

Compare Source

Minor Changes
Patch Changes

v4.139.0

Compare Source

Minor Changes
  • #​15792 479e1e8 Thanks @​flakey5! - Configure SSH for experimental Durable Object-managed Containers

    Set containers[].ssh and containers[].authorized_keys when using scheduling_policy: "durable_object". These are application-wide settings that follow the same rules as the existing Durable Object-managed Container settings: normal deployments create missing applications and update explicitly configured values, while omitted settings preserve the existing application configuration.

    // wrangler.jsonc
    {
      "containers": [
        {
          "name": "sandbox",
          "class_name": "Sandbox",
          "scheduling_policy": "durable_object",
          "ssh": { "enabled": true },
          "authorized_keys": [
            { "name": "laptop", "public_key": "ssh-ed25519 AAAA..." }
          ]
        }
      ]
    }
    
  • #​15648 52c0e9f Thanks @​tpmmorris! - Expose configured Cron Triggers to local development consumers

    Wrangler now passes the active environment's exact Cron Trigger expressions to Miniflare so Local Explorer can display them. Headless agent sessions also advertise the Local Explorer scheduled invocation API.

  • #​15786 bdda4c3 Thanks @​ThomasRubini! - Support UDP connect handlers in local development

    The experimental connect configuration now accepts protocol: "udp", with optional idle_timeout_ms and max_pending_bytes settings. UDP datagrams are delivered to the Worker's connect() handler using workerd's value-mode socket streams, and can be tested with Miniflare#dispatchConnect({ protocol: "udp" }).

  • #​15779 fc3cbaa Thanks @​Naapperas! - Support workflow entries in the exports configuration map

    A Worker can now declare the Workflows it defines in exports, keyed by the WorkflowEntrypoint class name:

    {
      "exports": {
        "MyWorkflow": {
          "type": "workflow",
          "name": "my-workflow",
          "limits": { "steps": 100 },
          "schedules": "0 * * * *"
        }
      }
    }
    

    A workflow export accepts the same settings as a workflows binding: limits, concurrency, schedules, and default_retention. wrangler deploy and wrangler versions upload send these entries to the upload API by name, and wrangler deploy and wrangler triggers deploy provision the Workflow with its settings, just as they do for workflows bindings owned by the Worker. A Workflow may be declared both as a binding and as an export, as long as both declarations use the same class and do not set the same setting to different values. A binding to another Worker's Workflow cannot share a name with an export. @cloudflare/config adds the matching exports.workflow() helper. Local development does not yet act on these entries.

Patch Changes
  • #​15796 be72815 Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260921.1 ^5.20260923.1
    workerd 1.20260921.1 1.20260923.1
  • #​14847 940c692 Thanks @​TheSaiEaranti! - Emulate the deterministic-ID uniqueness contract in the local Workflows binding

    The local Workflows binding now matches the documented production behavior for deterministic instance IDs: create({ id }) with an ID that already exists throws (instance.already_exists) and retains the existing instance, and createBatch() skips IDs that already exist or repeat within the batch, excluding them from the result instead of creating duplicate executions. Previously both paths silently created duplicates, so code relying on deterministic IDs for idempotency (for example a Queue consumer creating one workflow per message) appeared to work locally while double-executing workflow bodies.

  • #​15803 cd60c9c Thanks @​pmiguel! - Show --jurisdiction in help for wrangler kv namespace create

    The option was supported but omitted from the command's help output. Users can now discover how to create KV namespaces in a specific jurisdiction.

  • #​15838 15799d4 Thanks @​oddharsh! - Update smol-toml to 1.9.0 to fix slow parsing of very large TOML files

    Parse time for TOML config files now grows linearly with their size, instead of with its square: a 40,000-line file that took 259 ms to parse now takes 17 ms, while typical wrangler.toml files parse in the same time as before. This addresses the GHSA-r4xh-jqrq-34v2 advisory against earlier versions of the parser.

    Some TOML syntax errors now point at the character that caused them. For example, a wrangler.toml containing INVALID "FILE is now reported as illegal character in key at the ", rather than incomplete key-value at the start of the line.

  • Updated dependencies [52c0e9f, 44f5295, be72815, 940c692, bdda4c3, fc3cbaa]:

v4.138.0

Compare Source

Minor Changes
  • #​15776 b03f960 Thanks @​edevil! - Add event-code support to temporary Worker deployments

    Use wrangler deploy --temporary --event-code <code> to provision an account for an event. Wrangler requires explicit server acknowledgement before caching the account and keeps the event code out of its cache and telemetry.

  • #​15817 6e77c53 Thanks @​jamesopstad! - Allow framework commands to produce Preview Build Output with the experimental config

    When cf previews deploy invokes a framework build command, Preview intent is now preserved. Function-based cloudflare.config.ts files receive isPreview: true, and generated Build Output is marked as a Preview build.

Patch Changes

v4.137.0

Compare Source

Minor Changes
  • #​15778 cd7508c Thanks @​jamesopstad! - Generate types during development and supported builds with Vite's experimental.newConfig option or Wrangler's --experimental-new-config flag (and --experimental-cf-build-output for builds)

    When Wrangler's --experimental-new-config flag or Vite's experimental.newConfig option is enabled, inferred configuration and runtime declarations are now kept in .cloudflare/types/index.d.ts. Vite refreshes them during development and production builds. Wrangler refreshes them during development and when building with both --experimental-new-config and --experimental-cf-build-output. In the experimental wrangler.config.ts format, the types option is now top-level because it applies to both commands.

Patch Changes
  • #​15765 1bdb96d Thanks @​th0m! - Prepare the required egress sidecar for local Containers without configured images

    Wrangler dev and Vite dev/preview now pull the required sidecar for Durable Object-managed Containers that select their application image at start time. Previously, these Containers failed to start unless the sidecar image was already cached in Docker.

  • #​15712 f5605f5 Thanks @​alsuren! - Match D1 SQL statement splitting to the local SQLite runtime

    Wrangler now uses SQLite's statement-completion state machine when splitting D1 SQL files. This keeps trigger, quoted identifier, comment, and keyword handling consistent with local execution.

v4.136.3

Compare Source

Patch Changes
  • #​15662 59267fc Thanks @​oddharsh! - Update smol-toml to 1.8.0

    This updates the bundled TOML parser that reads wrangler.toml to a version that addresses two advisories against 1.5.2: GHSA-7w5x-hrqm-74c2 (a value followed by a comment with no trailing newline, such as a=[1 #, put the parser in an infinite loop) and GHSA-v3rj-xjv7-4jmq (thousands of consecutive comment lines overflowed the stack). On the old version, wrangler deploy against a wrangler.toml ending in a=[1 # never returned; it now fails with Invalid TOML document: cannot find end of structure.

  • #​15760 6906bf0 Thanks @​yomna-shousha! - Warn when wrangler preview returns only non-custom-domain URLs even though custom-domain Preview URLs are configured.

  • #​15761 354ebdb Thanks @​podonnell-dev! - Fix Preview output artifacts to always include the resolved parent Worker name

    Preview artifacts now use Wrangler's resolved Worker name instead of relying on the Preview API response to include it.

  • Updated dependencies []:

v4.136.2

Compare Source

Patch Changes
  • #​15762 ad20547 Thanks @​podonnell-dev! - Fix wrangler types generating runtime headers with trailing whitespace

    Runtime type headers without compatibility flags now end at the compatibility date, keeping generated types reproducible when tools remove trailing whitespace.

  • #​15703 02c1d83 Thanks @​KianNH! - Improve Container image listing and deletion

    List all image pages using read-only credentials, validate tags before deletion, and report successful deletion when the garbage-collection request fails.

  • #​15700 275184d Thanks @​KianNH! - Fix Container SSH connection setup and shutdown

    Prevent SSH connections from stalling during setup and ensure proxy processes exit when sessions close.

  • #​15759 bd59eca Thanks @​petebacondarwin! - Show valid sha256-prefixed tags in Container image listings

    Container image listings now distinguish valid OCI tags such as sha256-release from synthetic digest entries such as sha256:<digest>.

  • Updated dependencies []:

v4.136.1

Compare Source

Patch Changes
  • #​15744 0ed4c54 Thanks @​podonnell-dev! - Improve wrangler preview onboarding guidance

    Wrangler now displays placeholder replacement guidance directly beneath the suggested Preview configuration instead of as a separate warning. JSON output continues to include the guidance in its structured onboarding messages.

  • #​15678 703922d Thanks @​christhorwarth! - Read workers.dev URLs from the Worker resource during deployment

    Wrangler no longer requires account-level subdomain permission to display Worker and version-preview URLs. It now uses the Worker-scoped URL fields while preserving account-level registration for accounts without a workers.dev subdomain.

  • Updated dependencies [14d946d]:

v4.136.0

Compare Source

Minor Changes
  • #​15713 3c75cad Thanks @​jamesopstad! - Identify experimental Build Output resource configs by filename and location

    The root remains config.json, Worker configs are now worker.config.json, and Container configs are now container.config.json. Resource configs no longer contain top-level type discriminators, while settings and build context are stored together in the root config.

  • #​15713 3c75cad Thanks @​jamesopstad! - Define experimental Cloudflare configuration with a single default export

    Experimental cloudflare.config.ts files now define settings and resources together in a default-exported defineConfig() call. Add a Worker under worker, add Containers to the containers array, or omit both to provide settings only.

    import * as entrypoint from "./src/index.ts" with { type: "cf-worker" };
    
    export default defineConfig({
    	accountId: "...",
    	complianceRegion: "public",
    	worker: {
    		name: "my-worker",
    		compatibilityDate: "2026-09-18",
    		entrypoint,
    	},
    });
    
  • #​15720 35668d7 Thanks @​alexkli! - Add experimental --zone and --zone-id flags to wrangler deploy and wrangler triggers deploy to attach a zone to routes passed via --route

    Routes passed on the command line were always sent to the Cloudflare API as bare patterns. Zones with an SSL for SaaS entitlement reject such routes with error 10082 ("When using wildcard host ssl for saas entitlement you must specify the zone per route using zone_id or zone_name"), and until now the only way to set a zone was in the config file, which --route overrides.

    The new flags are experimental and must be enabled with --experimental-route-zones (alias --x-route-zones). Pass a single zone to apply it to all routes, or one zone per route in the same order as the --route flags:

    wrangler deploy --x-route-zones --route "app.example.com/*" --route "api.example.com/*" --zone example.com

    wrangler deploy --x-route-zones --route "a.example.com/*" --zone example.com --route "b.example.net/*" --zone example.net

    --zone sets zone_name and --zone-id sets zone_id on each route. The two flags cannot be combined, and passing more than one zone requires exactly one per --route. Routes without zone flags behave exactly as before.

  • #​15699 45b3b81 Thanks @​skepticfx! - Remove the experimental Container image environment binding

    Durable Object-managed Containers now use ctx.container.images without Wrangler generating env.EXPERIMENTAL_CLOUDFLARE_CONTAINER_IMAGES. Update code using the experimental environment binding to read ctx.container.images and regenerate your Worker types.

    Version deployments identify managed applications from native named images, and --containers-rollout=none preserves native Container metadata. Containers without named images must first be provisioned with wrangler deploy; versions upload verifies that their applications already exist. The old binding is no longer read or reserved, including on previously uploaded versions. keep_vars retains existing variables as usual; redeploy without it to remove an existing experimental binding.

  • #​15702 8235e6a Thanks @​podonnell-dev! - Return structured configuration errors from wrangler preview --json

    When a Worker is missing its Preview configuration, JSON mode now returns an error, a suggested_config patch, and any associated onboarding messages without interactive output or terminal formatting. This changes the private-beta Preview command to make automated onboarding reliable.

  • #​15577 731a2ee Thanks @​sdnts! - Add support for jurisdictions to Queues subcommands

Patch Changes
  • #​15711 91e2f86 Thanks @​ghostwriternr! - Allow local Container images without exposed ports

    Wrangler and the Cloudflare Vite plugin no longer reject images that omit Docker EXPOSE metadata. Local Containers can run command-only workloads or serve traffic through workerd without declaring an unused image port.

  • #​15740 c5913a6 Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260918.1 ^5.20260921.1
    workerd 1.20260918.1 1.20260921.1
  • #​15471 0751490 Thanks @​edmundhung! - Fix cf builds for static projects that serve assets from the project root

    The experimental Build Output path now omits the reserved .cloudflare directory when the project root is used for static assets. This prevents recursive output copying in Wrangler while preserving the existing behaviour for other asset directories.

  • #​15440 43b1f85 Thanks @​HuzaifaAbdulRehman! - Rebase absolute non-JavaScript module specifiers when preserve_file_names is enabled

    With preserve_file_names set, a non-JS module imported by an absolute path kept that path as its module name. The build machine's filesystem layout ended up inside the deployed Worker, and the module was never written to --outdir. A local dry run reported success while the upload failed server-side with error code 10021. Tooling that rewrites externals to absolute paths hits this, which is how it was found in @opennextjs/cloudflare with WASM imports.

    Absolute specifiers are now rebased to ./<basename>, which is what the hashed branch of the same code already does minus the hash prefix. Relative specifiers keep the behaviour they had.

  • Updated dependencies [c5913a6, 3c75cad]:

v4.135.0

Compare Source

Minor Changes
  • #​15609 1f070c8 Thanks @​emily-shen! - Build Containers when emitting experimental Build Output

    Wrangler and the Cloudflare Vite plugin now build Dockerfile-backed Container images when experimental Build Output is enabled. Container configs are emitted under .cloudflare/output/v0/containers with local image references, while existing registry references pass through unchanged.

  • #​15329 c4c9b75 Thanks @​akshitsinha! - Evaluate Flagship flags locally during development

    Flagship bindings now use the local Miniflare store by default in Wrangler and the Vite plugin, keeping development offline and isolated from production flags. Set remote: true on a binding to continue using its remote app.

    Use wrangler flagship flags pull <APP_ID> to seed the store from a remote app. Flag management commands also accept --local to read and update the local store directly.

  • #​15701 643e5cc Thanks @​WillTaylorDev! - Pass Preview intent to defineWorker and upload its resolved configuration

    Preview builds now evaluate programmatic Worker configuration with ctx.isPreview set to true and record that intent in Build Output. The shared Preview uploader deploys the resolved bindings and settings while preserving configured Preview base values when it creates a Preview.

Patch Changes
  • #​15705 a0485d5 Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260917.1 ^5.20260918.1
    workerd 1.20260917.1 1.20260918.1
  • #​15587 629ddef Thanks @​Kuldeeep18! - Fix duration calculation for running workflow instances, steps, and attempts in wrangler workflows instances describe

    wrangler workflows instances describe previously distorted the elapsed duration of in-progress instances, steps, and attempts across non-UTC timezones by stripping " GMT" from toUTCString(), causing new Date(...) to parse the timestamp in the local client timezone. The duration is now correctly computed against the current time.

  • Updated dependencies [a0485d5]:

v4.134.0

Compare Source

Minor Changes
  • #​15684 6874aa9 Thanks @​Ankcorn! - Add support for configuring real-time Issues with observability.issues.enabled

    Wrangler now validates and uploads the Issues setting alongside the existing logs and traces observability options. The experimental configuration format supports the equivalent observability.issues.enabled option.

  • #​15681 d96b319 Thanks @​podonnell-dev! - Mark wrangler preview commands as open beta

    Wrangler now labels Preview commands as open beta in help output and command warnings, matching the feature's public availability.

  • #​15673 2b39fc2 Thanks @​ghostwriternr! - Support explicit named Container image selection in Wrangler local development

    Wrangler builds or pulls named images configured through Wrangler JSON or TOML and exposes their local tags through ctx.container.images. Pass one of those references to ctx.container.start({ image }) to select the image.

    This extends the experimental Durable Object-managed Containers interface. Named images are opt-in and do not become the Container's default image. A Container without a default image must supply an image or full Container snapshot when starting.

Patch Changes

v4.133.0

Compare Source

Minor Changes
  • #​15600 bac0c6a Thanks @​podonnell-dev! - Add placement configuration for Previews

    You can now configure placement in the previews block. Preview-specific placement overrides the top-level placement configuration for Preview Defaults and deployments.

  • #​15600 bac0c6a Thanks @​podonnell-dev! - Improve onboarding guidance for Previews (when previews block is missing from configuration file)

    When a local previews block is absent, Wrangler writes the Preview Base configuration to the local config file. When no Preview Base configuration exists, Wrangler prints a placeholder configuration derived from production bindings and warns against reusing production binding configuration.

Patch Changes
  • #​15483 71b6f10 Thanks @​tpmmorris! - Align Local Explorer Workflow instance status requests with production

    Local Explorer and Wrangler local mode now use the production-compatible status request field for pausing, resuming, restarting, and terminating Workflow instances. Direct Local Explorer API consumers must replace the previous action field with status.

    Successful Local Explorer status updates now return the production-compatible instance status and response timestamp instead of the local-only result.success acknowledgement.

  • #​15665 ad23e6e Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260915.1 ^5.20260916.1
    workerd 1.20260915.1 1.20260916.1
  • #​15655 be2437a Thanks @​WillTaylorDev! - Send exports with Worker Preview deployments

    wrangler preview dropped the exports block from deployment requests. Durable Objects reached through ctx.exports had no Preview namespace, and cache settings for each entrypoint were lost too.

  • Updated dependencies [71b6f10, ad23e6e, 6f3d7b5]:

v4.132.0

Compare Source

Minor Changes
  • #​14587 76c0ce6 Thanks @​MattieTK! - Categorise the positional path argument to wrangler deploy and wrangler versions upload in command telemetry

    Command telemetry now records a coarse category for the entry-point/assets positional (wrangler deploy <path>) under sanitizedArgs.path, so we can understand whether people pass a file, a directory, or a relational reference such as . or ../example. The possible values are file, directory, current-dir, parent-relative, and not-found, or null when no positional is provided. The raw path is never sent — only the category.

  • #​15597 a83d7ac Thanks @​skepticfx! - Configure application-wide logs for experimental Durable Object-managed Containers

    Set containers[].observability.enabled or containers[].observability.logs.enabled when using scheduling_policy: "durable_object". Normal deployments create missing applications and update explicitly configured log settings without a Container rollout. Omitted settings preserve the application configuration; root Worker observability is not inherited for this policy.

    Version uploads may initialize missing applications but preserve existing settings. Deploying or rolling back Worker versions also preserves existing application settings, and --containers-rollout=none skips their updates.

  • #​15597 a83d7ac Thanks @​skepticfx! - Support per-image build options for experimental Durable Object-managed Containers

    Set build_context and build_vars alongside dockerfile in a Container's named images entries. Context paths resolve relative to the Wrangler configuration file and default to the Dockerfile's directory. Build variables are passed as Docker build arguments. Entries using the same Dockerfile with different contexts or variables are built separately.

    {
      "containers": [
        {
          "class_name": "Sandbox",
          "scheduling_policy": "durable_object",
          "images": {
            "app": {
              "dockerfile": "./docker/Dockerfile",
              "build_context": ".",
              "build_vars": { "APP_ENV": "production" }
            }
          }
        }
      ]
    }
    
  • #​15638 fa79b26 Thanks @​G4brym! - Support AI Search bindings in Worker Previews

    wrangler preview now accepts ai_search and ai_search_namespaces entries in the previews block and includes them in Preview deployment bindings. This lets Workers that use AI Search instance or namespace bindings attach existing resources to Preview deployments, including preview-specific instance or namespace names.

    These bindings are non-inheritable: declare them explicitly under previews. They attach to existing AI Search resources; preview does not provision new isolated instances or namespaces.

  • #​15256 16d1310 Thanks @​theoephraim! - [private beta]: Add --secrets-file and --var flags to wrangler preview

    Like wrangler deploy and wrangler versions upload, wrangler preview now accepts a --secrets-file flag pointing to a JSON or .env format file, and --var KEY:VALUE pairs that are injected into the Preview deployment as plain text variables. CLI vars override same-named vars from the previews section of your config file, and secrets from the file take precedence over both:

    wrangler preview --secrets-file .env.preview --var API_URL:https://api.example.com

  • #​15453 ca71205 Thanks @​G4brym! - Remove the gated Web Search binding and Wrangler command

    The unreleased search binding and its experimental command have been removed from Wrangler, Miniflare, and configuration APIs.

  • #​15597 a83d7ac Thanks @​skepticfx! - Allow experimental Durable Object-managed Containers to link by name through exports

    Containers using scheduling_policy: "durable_object" can now specify name and link from exports.<Class>.container without repeating class_name. Deploy and version upload resolve that link for image preparation, Worker metadata, and Container application creation.

Patch Changes
  • #​14775 1be7b97 Thanks @​dario-piotrowicz! - Sync Local Explorer endpoint lists across agent hints

    The Local Explorer endpoint list is now consistent across the three places it appears: the AGENTS.md template in create-cloudflare, the runtime agent hint in wrangler dev, and the Vite plugin agent hint. All three now include the observability/clear endpoint, use the canonical /cdn-cgi/local/explorer path, and have cross-reference comments pointing to each other.

  • #​15409 b149147 Thanks @​tpmmorris! - Fix per-query overrides for wrangler ai-search search

    --score-threshold, --max-num-results, --filter, and --reranking are now sent using the AI Search request schema, so the service applies them to searches instead of ignoring them.

  • #​15633 7db596c Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260911.1 ^5.20260915.1
    workerd 1.20260911.1 1.20260915.1
  • #​14906 a0856da Thanks @​exKAZUu! - Surface the original error message, name and stack when the dev server reports an internal error

    Previously wrangler dev could exit with an empty ✘ [ERROR] log that gave no indication of what went wrong (e.g. Network connection lost., see #​14641). These errors now include their original message, name and stack, so the failure is actually diagnosable.

  • #​15179 cb0955f Thanks @​rioaguspermana! - Treat 502, 503, and 504 as gateway errors during asset upload retries

    Pages and Workers asset uploads now retry more patiently when the Cloudflare API responds with a 502, 503 or 504 gateway error, reducing concurrency and waiting longer between attempts instead of failing the deploy quickly.

  • #​15399 982b806 Thanks @​tpmmorris! - Improve over-limit run_worker_first errors when duplicate rules are present

    The error now reports distinct and duplicate-entry counts and lists duplicated rules, making it clear when removing redundant entries can bring the configuration within the limit.

    Too many `run_worker_first` rules were provided; 105 rules provided (99 distinct, 6 duplicate entries) exceeds max of 100. Note: duplicate entries count towards the route limit. Ensure that no duplicate rules are present in your `run_worker_first` configuration.
    
    The duplicated rules found are:
    - "/rule/0"
    - "/rule/1"
    - "/rule/2"
    - "/rule/3"
    - "/rule/4"
    ...and 1 more duplicated rule.
    
  • #​12369 ffabe74 Thanks @​43081j! - Replace execa with tinyexec for running subprocesses, shrinking the bundled Wrangler output.

  • #​15633 7db596c Thanks @​dependabot! - Preserve service-worker middleware error propagation with spec-compliant event dispatch

    Wrangler's synthetic service-worker events now propagate listener exceptions to middleware without changing the behavior of user-created EventTarget instances.

  • #​15400 e03822a Thanks @​james-elicx! - Reduce the size of Wrangler's published package

    Exclude test-only, build-only, and obsolete template files from the npm package while retaining all runtime templates.

  • #​15631 c4a6279 Thanks @​petebacondarwin! - Restore static asset upload concurrency after gateway errors

    Static asset uploads previously remained at concurrency one for the rest of the deployment after any 524 response, which could make large deployments exceed the upload session lifetime. Successful uploads now restore the session's original concurrency gradually while retaining gateway throttling. Requests that were already in flight when throttling began do not restore capacity, so a burst of stale successes cannot immediately undo backpressure.

  • Updated dependencies [7db596c, e35c4a1, d3565a5, ca71205, 1015cfb, 982b806, 641df47]:

v4.131.2

Compare Source

Patch Changes

v4.131.1

Compare Source

Patch Changes
  • #​15592 945aaa3 Thanks @​WillTaylorDev! - Add a provisioning delay note when custom domain Preview URLs change

    Wrangler now explains that DNS and TLS certificate provisioning may continue after a deploy adds a custom domain or enables its Preview URLs. Stable redeploys don't repeat the note.

    This assumes that a request which matches the stored custom domain state doesn't restart provisioning. The client infers this from the API changeset and current domain record because this repository can't verify the backend behavior.

  • #​15592 945aaa3 Thanks @​WillTaylorDev! - Clarify production status labels for custom domain routes

    Wrangler now prefixes explicit custom domain production states with production: so they match Preview labels. The updated labels appear in deployed trigger output and WRANGLER_OUTPUT_FILE_PATH.

  • #​15602 47d906f Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260910.1 ^5.20260911.1
    workerd 1.20260910.1 1.20260911.1
  • #​15592 945aaa3 Thanks @​WillTaylorDev! - Avoid replacement prompts for custom domains already on the Worker

    Wrangler now updates Preview settings without asking to replace a custom domain when that domain already belongs to the deployed Worker. It still asks before replacing domains attached to another Worker.

  • #​15592 945aaa3 Thanks @​WillTaylorDev! - Explain how to enable Preview URLs when a Preview deployment has none

    wrangler preview now shows URL shapes and configuration snippets for Workers.dev and custom domains. The custom domain snippet preserves every configured route, and the guidance distinguishes missing settings from disabled ones.

    This changes a private beta feature. The warning also makes clear that wrangler deploy publishes code from the current checkout.

  • Updated dependencies [47d906f, c2699bf]:

v4.131.0

Compare Source

Minor Changes
  • #​15480 36aed7f Thanks @​skepticfx! - Add Durable Object-managed Containers to top-level container configuration

    Wrangler now accepts scheduling_policy: "durable_object" in the top-level containers array and creates its namespace-backed application after the Worker upload resolves the Durable Object namespace ID. The namespace ID is also the application ID, so repeated deploys idempotently ensure the same application without name-based lookup, modification, or a Containers rollout.

    Durable Object-managed entries accept class_name, scheduling_policy, an optional name, and an optional named images map. Scheduler-only fields are rejected. Each image provides either a local dockerfile or a digest-pinned managed-registry image. Wrangler builds or resolves each image, waits while Cloudflare prepares it for the Containers runtime, and uploads the resulting references with the Worker version for access through ctx.container.images and env.EXPERIMENTAL_CLOUDFLARE_CONTAINER_IMAGES. Local development support for these entries is deferred to a follow-up.

    Existing scheduler-backed entries and Durable Object migrations continue to work unchanged.

    With --containers-rollout=none, existing Workers retain their deployed Container metadata and image binding even when local containers is omitted or empty; local scheduler edits are also ignored. The upload stops if the deployed versions cannot be recovered. Existing Workers for Platforms dispatch scripts reject this flag before upload because their API does not expose enough metadata to preserve Container associations safely. First deployments can still skip Container preparation and rollout. Without this flag, removing managed Containers, including by omitting containers entirely, clears the experimental image binding even with keep_vars.

    versions deploy validates the selected versions before changing traffic and creates their Durable Object-managed applications only after deployment succeeds. Both deploy and versions deploy report partial completion if application creation fails afterward, with instructions to retry the same command.

    EXPERIMENTAL_CLOUDFLARE_CONTAINER_IMAGES is a temporary, reserved Wrangler binding until native Container image metadata is available. Its class keys identify managed applications during versions deploy, including classes with empty image maps. User configuration cannot declare a binding with this name; existing versions that already use it are treated as Container configuration.

  • #​15493 493e635 Thanks @​GregBrimble! - Remove wrangler preview settings commands

    The private-beta wrangler preview settings and wrangler preview settings update commands are no longer available.

Patch Changes
  • #​15411 0b43395 Thanks @​xgame92! - Fail wrangler versions upload early when a Worker has a pending Durable Object migration

    Wrangler now directs users to run wrangler deploy to apply the migration instead of sending a version upload request that the API will reject.

  • #​15518 9d75006 Thanks @​taylorlee! - Detect named-only module Worker entrypoints correctly

    Wrangler now distinguishes named-only module Workers from legacy Service Workers that happen to have named exports. A default export identifies a module Worker; otherwise, legacy addEventListener registration identifies Service Worker format.

  • #​15581 b605aa6 Thanks @​MattieTK! - Correct Pages-to-Workers delegation analytics for forced and ineligible commands

    The legacy forced result counted every agent-driven Pages command using --force, including commands that could never have been delegated. Wrangler now emits eligible_forced only when --force prevents an otherwise eligible delegation, and records other agent commands as ineligible with a bounded reason and whether force was used.

  • #​15432 f45b596 Thanks @​razethion! - Prevent delayed internal errors from fetch-only remote bindings

    Fetch-only remote bindings such as D1 and R2 previously opened an unused WebSocket RPC session. RPC sessions are now created only when an RPC method is called.

  • #​15585 f69f95a Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260908.1 ^5.20260910.1
    workerd 1.20260908.1 1.20260910.1
  • #​15554 bff525d Thanks @​XiaoZ-0218! - Add the missing transferred_classes migration to the config schema

    DurableObjectMigration described new_classes, new_sqlite_classes, renamed_classes and deleted_classes, but not transferred_classes. normalizeAndValidateConfig has always validated that key, and the deploy path forwards it to the API along with the rest of the step, so Transfer migrations worked — but config-schema.json is generated from the type, so an editor resolving $schema reported a valid, documented migration as an unknown key.

    Adding the field to the type puts it in the generated schema. No runtime change.

  • #​15584 96688b3 Thanks @​Svector-anu! - Bump shell-quote to 1.9.0+ to pick up two disclosed advisories

    shell-quote@1.8.1 is affected by a ReDoS in parse() (CVE-2026-13311 / GHSA-395f-4hp3-45gv — an unauthenticated attacker who can feed a string into parse() can block the event loop for tens of seconds with plain space-separated input, no shell metacharacters required) and by an object-token escaping bug in quote() (CVE-2026-9277 / GHSA-w7jw-789q-3m8p), both fixed upstream in 1.9.0. Wrangler's parse() wrapper (src/utils/shell-quote.ts) is reachable from pages dev/init command-line parsing, so the ReDoS applies; the quote() call site only ever passes string arguments, so the object-token issue was not reachable here, but there is no reason to stay on a vulnerable range once a patch exists.

  • #​15563 ed5797a Thanks @​Bortlesboat! - Encode filenames in Pages HTML redirects

    Fix wrangler pages dev returning a 502 response when redirecting HTML paths containing Unicode characters. Keep reserved characters in filenames encoded in the redirect destination and preserve the request query string.

  • #​14889 128235a Thanks @​chinesepowered! - Fix wrangler types --strict-vars=false emitting invalid TypeScript for an empty array var

    A var whose value was an empty array produced ()[], which is a syntax error. Because this lands in the generated worker-configuration.d.ts, it did not just break that one line — the whole file failed to parse, so no binding types resolved at all. An empty array now generates unknown[].

  • #​15494 f8aea7e Thanks @​GregBrimble! - Use previews_base_config for Preview configuration

    Preview commands now read the Worker Previews Base configuration from the previews_base_config API field.

  • #​15569 24ef86b Thanks @​RealBhupesh! - Fix wrangler workflows instances describe crashing on dynamic retry delays

    The Workflows API serializes function retry delays as "[dynamic]". The describe command previously parsed that as a duration, produced an Invalid Date, and threw RangeError: Invalid time value before printing remaining steps. It now renders unknown (dynamic delay) and also tolerates attempts whose end timestamp is missing.

  • Updated dependencies [f45b596, f69f95a, a549e58, dbb3ff4, fea3cd0, 6bd7b6c, 15cd6e1, be1caec, dbc9506]:

v4.130.0

Compare Source

Minor Changes
  • #​14372 dbf6aad Thanks @​ichernetsky-cf! - Add containers[].observability support to wrangler deploy

    Wrangler now accepts container-specific observability settings via containers[].observability, including application-level targeting fields for Containers. Root observability continues to work as a fallback when a container does not define its own observability settings.

    wrangler deploy now preserves legacy configuration.observability for existing container apps that still use rollout-based observability, while using top-level application observability for new or already-migrated apps.

    Existing application diffs are now normalized even when stored resource limits cannot be mapped to a named instance type. API-only metadata and equivalent managed-registry image names no longer appear as edits or affect whether deployment changes require a rollout.

  • #​15004 e20df20 Thanks @​MattieTK! - Delegate agent Pages project creation with a production branch to Workers

    When run by an AI agent, wrangler pages project create --production-branch <name> is now eligible for delegation to a Workers static-assets deploy. The production branch names the target that a Workers deploy would publish to, so it does not need to disqualify a brand-new project from delegation.

    wrangler pages deploy --branch <name> remains on Pages because an interactive new-project flow separately prompts for its production branch. The deployment branch may therefore represent a preview and cannot safely be converted into a production Workers deployment.

  • #​15004 e20df20 Thanks @​MattieTK! - Widen agent Pages-to-Workers delegation to new projects on accounts that already use Pages

    When run by an AI agent, wrangler pages deploy and wrangler pages project create now delegate a brand-new static Pages project to a Workers static-assets deploy even when the account already has other Pages projects. The gate is now per-project rather than per-account: a command targeting a project that already exists stays on Pages, but a new project is delegated regardless of the account's other Pages projects.

    A project name restored from the Pages configuration cache is only used when the cache belongs to the currently authenticated account. An account-matching cached name remains on Pages even when the project is missing remotely, preserving the user's recorded Pages intent. After switching accounts, an otherwise unnamed deploy stays on Pages rather than treating a stale cached project name as a new project on the selected account.

Patch Changes
  • #​15560 edb3631 Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260907.1 ^5.20260908.1
    workerd 1.20260907.1 1.20260908.1
  • #​15557 63c7ff1 Thanks @​tomekancu! - Fix wrangler d1 execute --local being extremely slow with large SQL files or commands

    The local SQL splitter consumed quoted strings and comments character-by-character, re-checking the full accumulated string each time. This made splitting a large quoted value or comment quadratic, so seed files could take tens of seconds to run. The splitter now only inspects a bounded trailing window on each step, making splitting effectively linear. The remote path is unaffected as it imports the file server-side.

  • #​15542 a4e41df Thanks @​NAVEENKUMARKR777! - Fix wrangler dev running the custom build command twice on startup and on every config change

    Wrangler already runs the custom build.command once before starting wrangler dev, to resolve the Worker's entry point. When dev.watch wasn't explicitly disabled, BundlerController then unconditionally ran the same build command again the moment it started watching for changes, and repeated this on every subsequent config reload too.

    For fast build commands this just meant duplicate log output (e.g. a vite build visibly running twice at startup). For slower or stateful build commands, running two builds concurrently against the same output files could corrupt the result or fail outright (for example, non-deterministic wasm-opt failures have been reported for Rust builds).

    The initial watcher setup now only bundles the output the build command already produced, instead of re-running the command. Real file changes detected by the watcher still re-run the build command as before.

  • Updated dependencies [edb3631, bcebf08]:

v4.129.1

Compare Source

Patch Changes
  • #​15502 8bbcb9f Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260903.1 ^5.20260904.1
    workerd 1.20260903.1 1.20260904.1
  • #​15543 2b42d6f Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260904.1 ^5.20260907.1
    workerd 1.20260904.1 1.20260907.1
  • #​15323 ea5634e Thanks @​Sakshamm-Goyal! - Prevent Wrangler from exiting when a process capturing its output closes the pipe.

    Wrangler now ignores broken-pipe errors from stdout and stderr while preserving the existing failure behavior for other output errors.

  • #​14001 c0c6504 Thanks @​for-the-kidz! - Update bundle size warning thresholds to use uncompressed size instead of gzip size

    The compressed script size limits (3 MiB free / 10 MiB paid) have been removed server-side in favor of a single 64 MiB uncompressed limit. The bundle size reporter now compares the uncompressed bundle size against this 64 MiB limit for its color-coded warnings, instead of comparing gzip size against the old 3 MiB compressed limit.

  • #​15499 ffc7efd Thanks @​WillTaylorDev! - Honor Workers Builds name overrides in wrangler preview

    Preview commands now target the Worker name supplied by Workers Builds instead of the name in local Wrangler configuration. This prevents preview builds from failing when the two names differ.

  • #​15252 682cd44 Thanks @​GregoryCollett! - wrangler dev no longer exits when a request to your Worker fails transiently

    Previously, a transient network failure on a single request — most commonly a request arriving just as an idle internal connection was closed, after roughly five seconds without traffic — could take down the whole dev server with an empty ✘ [ERROR], leaving the port unbound until restarted. In CI test suites, one such failure caused every remaining test to fail with connection errors.

    wrangler dev now automatically retries the affected request if it is safe to repeat (GET and HEAD requests). If a request still fails, it fails individually — the error is logged with the request method and URL — and the dev server keeps serving.

  • Updated dependencies [8bbcb9f, 2b42d6f]:

v4.129.0

Compare Source

Minor Changes
  • #​15460 93d72a5 Thanks @​QnJ1c2kNCg! - Support gzip compression for JSON Pipelines sinks

    Pipelines is in open beta. wrangler pipelines sinks create and the interactive setup flow now pass the selected JSON compression to the Pipelines API. JSON sinks accept uncompressed or gzip, while Parquet retains its existing compression options and zstd default.

  • #​15358 d2d8eea Thanks @​pombosilva! - Add a --json flag to the wrangler workflows commands

    Every wrangler workflows command now accepts --json, which emits the raw API payload instead of the human-readable rendering. The formatted output remains the default, so existing usage is unaffected:

    wrangler workflows instances list my-workflow --json

    The JSON output carries raw values rather than a serialisation of the formatted view: ISO timestamps instead of locale-formatted dates, plain status strings instead of emojified labels, and no presentation-only derived fields.

Patch Changes
  • #​15469 d40a634 Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260831.1 ^5.20260902.1
    workerd 1.20260831.1 1.20260902.1
  • #​15481 7c1b2a6 Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260902.1 ^5.20260903.1
    workerd 1.20260902.1 1.20260903.1
  • #​15472 f6fb347 Thanks @​emily-shen! - Tolerate missing permissions during wrangler delete cleanup checks

    wrangler delete now warns and continues when it cannot inspect Worker dependencies or clean up legacy Workers Sites KV namespaces because of missing permissions. The Worker delete request itself still fails normally if the token cannot delete the Worker.

  • #​15472 f6fb347 Thanks @​emily-shen! - Tolerate missing resource permissions during resource provisioning

    When Wrangler cannot check whether a bound resource exists because the API returns a 403, it now skips automatic provisioning for that resource type and continues the deploy. The deploy may still fail later if the resource is missing.

  • #​15476 dc24057 Thanks @​christhorwarth! - Fix remote development with static assets for API tokens using granular Worker permissions

    Wrangler now creates Workers.dev preview sessions through the Worker-scoped endpoint and derives the preview hostname from the session response. This avoids requiring account-level Workers subdomain access.

  • Updated dependencies [00a9f2f, 1dba24a, d40a634, 7c1b2a6]:

v4.128.0

Compare Source

Minor Changes
  • #​15454 dbbb795 Thanks @​jamesopstad! - Move binding utilities into @cloudflare/workers-utils

    Binding conversion, printing, and local-development validation are now exported from @cloudflare/workers-utils so they can be shared by Wrangler, the Cloudflare Vite plugin, and other consumers.

    The corresponding exports have been removed from @cloudflare/deploy-helpers. Consumers should import them directly from @cloudflare/workers-utils instead.

    Wrangler's unstable_printBindings API now accepts the bindings and an options object instead of five positional parameters.

  • #​15353 87a7acf Thanks @​pombosilva! - Add --date-start and --date-end filters to wrangler workflows instances list

    You can now narrow an instance listing to a creation-time window:

    wrangler workflows instances list my-workflow --date-start 2026-01-01 --date-end 2026-01-31

    Either flag can be used independently. Both accept an ISO 8601 date or timestamp and are normalised to UTC before being sent, so a date-only value such as 2026-01-01 works as well as a full 2026-01-01T13:00:00Z. The bounds are inclusive and compose with the existing --status filter.

  • #​15379 ea28cc3 Thanks @​ibbykhazanchi! - Add query string redaction to Workers observability configuration

    Set observability.redact_query_string in wrangler.json or observability.redactQueryString in the experimental cloudflare.config.ts format to remove query strings from request URLs in logs and traces.

  • #​14915 707cb6f Thanks @​longlho! - Include exact raw and gzip-compressed Worker bundle sizes in structured deploy and version-upload output.

Patch Changes
  • #​15436 200780f Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260828.1 ^5.20260831.1
    workerd 1.20260828.1 1.20260831.1
  • #​15406 b3f2628 Thanks @​james-elicx! - Reduce the installed bundle sizes of Wrangler and Miniflare

    Wrangler now resolves bundled workspace dependencies from source during monorepo builds so unused exports can be removed. Miniflare, its shared CLI and container dependencies now use granular @cloudflare/workers-utils entry points instead of loading the package barrel, reducing the raw Wrangler and Miniflare artifacts by 6.16 MiB (31.4%) and 1.06 MiB (22.9%) respectively without changing runtime behavior or installed dependencies.

  • #​15398 1809c5e Thanks @​james-elicx! - Reduce Wrangler's published package size

    Stop including the unused build metafile in the npm package, reducing its unpacked size by approximately 3.1 MiB.

  • #​15382 b3fb2bf Thanks @​Om-singhaI! - Skip the skills install status lookup when telemetry is disabled

    Telemetry events include a currentAgentSkillsInstalled property, and computing it can query the GitHub API. The lookup used to start before the telemetry permission was checked, so users who opted out via WRANGLER_SEND_METRICS, DO_NOT_TRACK, or send_metrics in their Wrangler config still triggered network requests on behalf of telemetry. The dispatcher now checks the permission first and only performs the lookup when telemetry is enabled.

  • Updated dependencies [200780f, b3f2628, 87a7acf]:

v4.127.1

Compare Source

Patch Changes

v4.127.0

Compare Source

Minor Changes
  • #​15356 fe265f8 Thanks @​rubuy-74! - Add support for configuring a per-workflow max concurrency limit via workflows[].concurrency.limit in your Wrangler config.

    The limit is the maximum number of Workflow instances that can run concurrently. It is validated as a positive integer and persisted on deploy; the ceiling is enforced server-side. Concurrency is ignored in local development.

    {
      "workflows": [
        {
          "binding": "MY_WORKFLOW",
          "name": "my-workflow",
          "class_name": "MyWorkflow",
          "concurrency": { "limit": 10 }
        }
      ]
    }
    
Patch Changes
  • #​15367 412c79e Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260825.1 ^5.20260826.1
    workerd 1.20260825.1 1.20260826.1
  • #​15375 92874f6 Thanks @​WillTaylorDev! - Upload wrangler preview modules as multipart form data

    wrangler preview used to base64 the bundle, its modules, and any sourcemaps into a single JSON request body. Base64 inflates content by a third, so a Worker with a large sourcemap could exceed the API request size limit and fail to deploy.

    The preview deployment request is now multipart/form-data. The deployment settings travel in a metadata part and each module follows as its own part carrying raw bytes, matching how wrangler deploy already uploads a Worker.

  • Updated dependencies [412c79e]:

v4.126.0

Compare Source

Minor Changes
  • #​15332 d1cc3af Thanks @​pombosilva! - Add default_retention to Workflow bindings for configuring how long instances are retained

    Workflow instances are retained for an account-wide default period after they finish. You can now set a per-Workflow default in your Wrangler configuration, applied to instances that do not specify their own retention:

    {
      "workflows": [
        {
          "binding": "MY_WORKFLOW",
          "name": "my-workflow",
          "class_name": "MyWorkflow",
          "default_retention": {
            "success_retention": "3 days",
            "error_retention": "7 days"
          }
        }
      ]
    }
    

    Each side is optional and accepts either a duration string such as "3 days" or a whole number of milliseconds. Durations are interpreted by the Workflows API, which also caps them at your account's retention limit.

  • #​15064 693ca29 Thanks @​tpmmorris! - Include a chronological list of handler events in email test harness results, so programmatic local email tests can assert the order in which messages are received, forwarded, replied to, or rejected.

    const result = await server.getWorker().email({
      from: "sender@example.com",
      to: "inbox@example.com",
      raw: [
        "From: Sender <sender@example.com>",
        "To: Inbox <inbox@example.com>",
        "Message-ID: <test@example.com>",
        "Subject: Test email",
        "",
        "Hello from the test harness",
      ].join("\r\n"),
    });
    
    expect(result.events).toEqual([
      { type: "received", timestamp: expect.any(String) },
      {
        type: "forward",
        timestamp: expect.any(String),
        messageId: expect.any(String),
      },
      {
        type: "reply",
        timestamp: expect.any(String),
        messageId: expect.any(String),
      },
    ]);
    
  • #​15065 ad89456 Thanks @​mtlemilio! - Add experimental wrangler hyperdrive planetscale signature for provisioning Cloudflare-billed PlanetScale databases

    wrangler hyperdrive planetscale signature prints a signed authorization as JSON, proving to PlanetScale that Cloudflare will be billed for the database you are about to create:

    npx wrangler hyperdrive planetscale signature | \
      pscale database create <name> \
        --org <org> \
        --engine postgresql \
        --cloudflare-billing @&#8203;- \
        --format json
    

    pscale database create defaults to Vitess, so pass --engine postgresql for a Postgres database, and --format json is recommended when the output is consumed by an agent.

    This requires pscale v0.313.0 or newer. Wrangler authorizes the Cloudflare billing side only, so your PlanetScale credentials stay between you and pscale.

    The signature is a cryptographically signed token that authorizes creating a database billed to your Cloudflare account. Treat it as a credential and do not share it. Piping it, as above, is recommended over passing it as a command line argument.

    This command is experimental and its interface may change.

  • #​15134 c66d2d5 Thanks @​gpanders! - Enable FUSE-capable local container development

    Miniflare now automatically passes the Docker privileges needed for FUSE to local Durable Object containers when using local rootless Docker on Linux with /dev/fuse available, or a local Docker engine on macOS or through WSL where Linux containers run in a VM. This applies to Wrangler, the Cloudflare Vite plugin, and direct Miniflare use.

  • #​15326 9fcb1c9 Thanks @​jamesopstad! - Record the selected mode in the Build Output Specification top-level config.json

    The mode a build was produced in is now written to .cloudflare/output/v0/config.json as a mode field, alongside the account and compliance settings.

  • #​14966 a4c3458 Thanks @​yomna-shousha! - Add pull request metadata to wrangler preview deployments

    wrangler preview now detects the pull request associated with the current CI run (GitHub Actions, GitLab CI, CircleCI, and a generic PULL_REQUEST_URL/PR_URL/CHANGE_URL fallback) and attaches it, along with the repository URL, to the preview deployment as annotations (workers/pull_request_number, workers/pull_request_url, workers/repository_url).

    This is best effort: if no pull request can be detected, nothing changes. When a pull request is detected, its URL is now also shown in the wrangler preview command output.

  • #​15307 433fa98 Thanks @​for-the-kidz! - Add pull request title to wrangler preview deployment annotations

    wrangler preview now also detects the title of the pull/merge request associated with the current CI run (GitHub Actions and GitLab CI, plus a generic PULL_REQUEST_TITLE fallback) and attaches it to the preview deployment as the workers/pull_request_title annotation, alongside the existing pull request number/URL, repository URL, and commit SHA annotations.

    This is best effort: if no pull request title can be detected, nothing changes.

Patch Changes

v4.125.0

Compare Source

Minor Changes
  • #​14995 59872c4 Thanks @​ThomasRubini! - Add connect trigger for raw sockets

    You can now configure a Worker to receive raw socket connections during wrangler dev, delivered directly to the Worker's connect(socket, env, ctx) handler:

    {
      "connect": [{ "protocol": "tcp", "port": 5432 }]
    }
    

    Each entry opens a listening socket on 127.0.0.1 (or the given address) that forwards incoming connections straight to the Worker, bypassing the local dev HTTP entry point. This requires the experimental compatibility flag. Only "tcp" is supported at the moment.

    @cloudflare/config also supports declaring this trigger via triggers.connect(...), which lowers to the connect field above:

    import { defineWorker, triggers } from "@&#8203;cloudflare/config";
    
    export default defineWorker({
      triggers: [
        triggers.connect({ protocol: "tcp", port: 5432, address: "127.0.0.1" }),
      ],
    });
    
  • #​15172 c68f9cb Thanks @​WillTaylorDev! - Add container support to worker previews

    Worker previews now support containers through a new previews.containers configuration block. Container configuration doesn't inherit, so declare containers explicitly in the previews block to enable them for previews. This mirrors how previews.durable_objects works today. Wrangler names each preview container application {worker_name}_{preview_slug}_{class_name}, normalising and shortening the result to what the API accepts. Either change appends a short digest of the composed name, so two names that would otherwise land on one stay distinct. An entry cannot set its own name, because application names are unique to an account and a fixed name would collide between two previews of the same Worker. A Durable Object class is backed by at most one container application, so the validator rejects two entries that share a class_name. Wrangler skips container applications bound to Durable Object classes that another Worker implements through script_name, because the implementing Worker owns its own container application. A binding is not required: a Durable Object declared through migrations or exports and reached only over ctx.exports can still back a container. Every entry must set class_name. A previews.containers entry whose class_name matches no Durable Object class at all is rejected before the preview deployment is created, so a typo fails loudly instead of producing a preview with no container.

    Wrangler creates the container applications on wrangler preview. Deleting a preview tears them down server side, so wrangler preview delete doesn't remove them.

    Container build and deploy progress prints to stdout. wrangler preview --json suppresses wrangler's own output so it doesn't interleave with the payload, and warnings and errors still go to stderr. Docker's build output and the progress spinner write to stdout directly and bypass that suppression, so parse --json from a non interactive shell, where the spinner is skipped, and prefer a prebuilt image over a Dockerfile.

  • #​15174 649f667 Thanks @​WillTaylorDev! - [private beta]: Create the parent Worker automatically when wrangler preview targets one that doesn't exist yet

    Previews hang off a parent Worker, so running wrangler preview before the Worker had ever been deployed failed with a raw API error naming the Preview endpoint. Wrangler now offers to create an empty parent Worker and then carries on creating the Preview. The parent uses the same workers.dev and Preview URL settings that wrangler deploy would resolve, without applying routes or cron triggers. In non-interactive environments, Wrangler creates the Worker without asking.

  • #​14735 30c2d47 Thanks @​vaishnav-mk! - Add individual and batch Workflow instance deletion to the runtime and SDK.

    • WorkflowInstance.delete() deletes one instance. Self-deletion stops the current execution.
    • env.MY_WORKFLOW.deleteBatch(instanceIds) deletes up to 100 instances and returns { deleted, errors } per input position.
    • wrangler workflows instances delete <name> [id..] deletes instances remotely or with --local; IDs can also come from a JSON array passed with --filename, with a combined limit of 100.
Patch Changes
  • #​15260 5ae9d5b Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260815.1 ^5.20260816.1
    workerd 1.20260815.1 1.20260816.1
  • #​15264 4b52975 Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260816.1 ^5.20260819.1
    workerd 1.20260816.1 1.20260819.1
  • #​15277 ce9b151 Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260819.1 ^5.20260820.1
    workerd 1.20260819.1 1.20260820.1
  • #​15192 ef73a28 Thanks @​ondraulehla! - Fixes kv bulk put corrupting binary values written to local KV

    Values marked base64: true were stored incorrectly whenever they contained bytes that do not form valid UTF-8, which covers images, compressed data and most other binary payloads. A Worker reading such a key back under wrangler dev got a different, longer value than the one that was written: a 12 byte PNG header came back as 20 bytes.

    kv bulk put writes to local KV by default, so the plain command was the affected one. Remote writes were never affected, and neither were entries without base64 or values written with kv key put.

  • #​15284 39dcea6 Thanks @​emily-shen! - Move deploy output writing into shared deploy helpers

  • #​15130 99a1f49 Thanks @​emily-shen! - Remove unsupported remote configuration from Workflow bindings

    Workflow bindings no longer accept remote in configuration, as remote Workflow bindings have never actually been supported.

  • #​15278 f2437e6 Thanks @​Sosokker! - Fix the --temporary error on commands that authenticate more than one time

    wrangler d1 migrations apply --remote --temporary failed with this error: You're already authenticated with Cloudflare, so --temporary can't be used. The failure occurred with no login and with no CLOUDFLARE_API_TOKEN. This command authenticates one time for each statement that it runs. The first authentication makes a temporary preview account. The second authentication read the token of this new account as an earlier login.

    Wrangler now uses again the temporary account from the same command run. Commands that authenticate more than one time now work as wrangler deploy --temporary works. If real credentials are available, --temporary is still an error.

  • Updated dependencies [59872c4, 99a1f49, 5ae9d5b, 4b52975, ce9b151, 99a1f49, 99a1f49, 30c2d47]:

v4.124.0

Compare Source

Minor Changes
  • #​15026 6529f0c Thanks @​petebacondarwin! - Allow containers to be attached to a Durable Object from its exports entry

    A container can now be linked to its Durable Object from the export side, using a new container field that names an entry in the containers array. As a result containers[].class_name is now optional — a container that is referenced this way only needs a name:

    {
      "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_name direction 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.

    container is only valid on live durable-object exports (created and expecting-transfer) and requires storage: "sqlite". Wrangler now also reports an error when:

    • a container reference 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_name names a Durable Object whose storage is legacy-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.

Patch Changes
  • #​15211 bc5726b Thanks @​nithin42! - Honor access.dev when running Workers with @cloudflare/vitest-pool-workers, so ctx.access.getIdentity() returns the configured identity just as it does with wrangler dev.

  • #​14999 ba54f0d Thanks @​mittalpk! - Fix .env loading on Windows leaking stale, differently-cased duplicate keys

    On Windows, wrangler loads .env values through a case-insensitive Proxy wrapper so lookups like env.PATH and env.Path resolve to the same value, and this object is assigned directly to process.env. When a key was set again under a different casing (e.g. a value in .env.local overriding one from .env with different casing), the previous casing was never removed from the underlying object. env.PATH/env.Path still returned the correct, latest value, but anything that enumerates process.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 b7422b0 Thanks @​stareezy-1! - Normalize structural CRLF line endings before sending D1 commands to the remote query API

    wrangler d1 migrations apply --remote and wrangler d1 execute --remote --command failed with incomplete input: SQLITE_ERROR when the SQL contained CRLF line endings inside a compound statement such as a CREATE 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 186339c Thanks @​erwinzhang7! - Fixes D1 SQL statements not handling lowercase ends correctly

    wrangler d1 execute and wrangler d1 migrations apply split a SQL file into statements before running them. A BEGIN or CASE block closed with a lowercase end was 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 END were unaffected. Both cases now behave the same.

  • #​15231 4f922dc Thanks @​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 4d74b8d Thanks @​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 1f79ace Thanks @​jamesopstad! - Resolve --latest to the newest compatibility date supported by the installed runtime

    wrangler deploy --latest and wrangler versions upload --latest resolved the compatibility date to the current date, and wrangler pages download config did 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 installed workerd did not yet support left the project unable to run wrangler dev.

    These now resolve to the latest compatibility date supported by this version of Wrangler, which is the release date of the workerd it ships with.

  • #​15151 49f73de Thanks @​maximilliangrand! - Fix spurious Trailing comma jsonc(519) warnings for wrangler.jsonc in VS Code 1.131+

    Trailing commas in wrangler.jsonc files 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 7cee278 Thanks @​kdelay! - Respect CLOUDFLARE_ACCOUNT_ID in wrangler pages project list, create and delete

    These three commands could target a previously used account even when CLOUDFLARE_ACCOUNT_ID was set, failing with Authentication error [code: 10000] in setups with more than one account. They now use the account named by CLOUDFLARE_ACCOUNT_ID, matching the rest of wrangler pages. When the variable is unset, the previously used account is still selected, as before.

  • #​15153 265256a Thanks @​podonnell-dev! - Fix wrangler preview base-config commands showing an inherited script positional

  • #​15185 1f79ace Thanks @​jamesopstad! - Use a fixed default compatibility date rather than the current date

    When no compatibility date was set, Wrangler, C3 and the Vitest pool all defaulted to the current date. workerd only accepts a compatibility date up to 7 days beyond its own release, so whenever a workerd release 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 workerd version that ships with each release, which leaves a week of headroom and updates as workerd is upgraded. @cloudflare/vite-plugin previously inlined the date at which it was built. It now shares the same default.

  • #​15239 f431166 Thanks @​jamesopstad! - Prevent date-enabled Node.js compatibility from adding conflicting globals to generated runtime types

    Runtime type generation now treats Node.js compatibility enabled by a compatibility date the same way as an explicit nodejs_compat flag. Node.js globals continue to come from @types/node instead of being generated as any declarations that override those types.

  • #​15196 8fb2b87 Thanks @​skepticfx! - Use the FedRAMP High managed container registry when Wrangler targets the FedRAMP High compliance region

    Container builds, pushes, deployments, image commands, and local development now select the corresponding production or staging FedRAMP registry and API from either compliance_region or CLOUDFLARE_COMPLIANCE_REGION.

  • #​15082 75cf407 Thanks @​penalosa! - Enable the new configuration format in the cf-wrangler dev delegate

    Projects started through cf dev now load cloudflare.config.ts and optional wrangler.config.ts, matching the configuration used by the delegate's build path.

  • Updated dependencies [1277a72, 4f922dc, 4d74b8d, 2e0c962, 8777180]:

v4.123.0

Compare Source

Minor Changes
  • #​15113 b8fd112 Thanks @​BSFishy! - Add local dev simulation for Cloudflare Access ctx.access.getIdentity()

    You can now configure a mock Cloudflare Access identity in wrangler.json so that ctx.access.getIdentity() returns it during local development.

    // wrangler.json
    {
      "access": {
        "dev": {
          "aud": "my-app-aud-tag",
          "identity": {
            "email": "user@example.com",
            "name": "Test User"
          }
        }
      }
    }
    
  • #​15152 f0f2054 Thanks @​GregBrimble! - [private beta]: Updates the --ignore-defaults flag to --ignore-base-config on wrangler preview commands.

    --ignore-base-config now only takes effect on Preview creation, rather than on each deployment, since Preview base configuration is now copy-on-create rather than inherit-on-deploy.

  • #​14872 339509d Thanks @​dario-piotrowicz! - Add automatic update prompts for out-of-date Cloudflare agent skills

    When Cloudflare skills were previously installed by Wrangler and the upstream cloudflare/skills repository has newer content, Wrangler now offers to update them after eligible commands complete.

    To reduce prompt fatigue, the update check only runs once a month (30 days since the last install or update). Declining suppresses the prompt until the next upstream change.

    When declining an update, Wrangler offers the option to permanently disable future update prompts. This preference is stored globally in ~/.wrangler/agents-skills-install.jsonc. The WRANGLER_NO_SKILLS_UPDATE_PROMPTS=true environment variable can also be used to suppress prompts. The --install-skills flag remains available regardless of these settings.

Patch Changes

v4.122.0

Compare Source

Minor Changes
  • #​15123 d0c976c Thanks @​dependabot! - Detect Node.js compatibility from the compatibility date, now that nodejs_compat is enabled by default

    As of compatibility date 2026-08-04, workerd enables the nodejs_compat and nodejs_compat_v2 compatibility flags by default. Previously these tools only treated Node.js compatibility as enabled when one of those flags was listed explicitly, so a Worker on a compatibility date of 2026-08-04 or later without the flag would get Node.js APIs from the runtime but no Node.js polyfills from the bundler, and process.env could be substituted with an empty object at build time. They now resolve these flags the same way workerd does, and honour no_nodejs_compat to opt out.

    To keep Node.js compatibility switched off on a newer compatibility date, specify both no_nodejs_compat and no_nodejs_compat_v2, since each flag has its own default.

    @cloudflare/vitest-pool-workers needs nodejs_compat_v2 for its own test runner, so it continues to override a project that opts out of it. On a compatibility date that enables the flag anyway, it now drops the opt-out rather than adding the flag back, which workerd would reject — previously this stopped such a project from running any tests at all.

    wrangler types also no longer attributes its @types/node suggestion to "the nodejs_compat flag", which it can now make for Workers that do not set the flag at all.

Patch Changes
  • #​15123 d0c976c Thanks @​dependabot! - Update dependencies of "miniflare", "wrangler"

    The following dependency versions have been updated:

    Dependency From To
    @​cloudflare/workers-types ^5.20260804.1 ^5.20260811.1
    workerd 1.20260804.1 1.20260811.1
  • #​15148 0b82b15 Thanks @​jamesopstad! - Ignore a nodejs_compat compatibility flag that the compatibility date already enables

    workerd rejects a compatibility flag that its compatibility date enables by default, so a Worker configured with both a compatibility date of 2026-08-04 or later and nodejs_compat failed to start locally with "The compatibility flag nodejs_compat became the default as of 2026-08-04 so does not need to be specified anymore".

    The redundant nodejs_compat and nodejs_compat_v2 flags are now dropped when starting the runtime, which has no effect on the resulting Worker because the compatibility date enables both anyway. no_nodejs_compat and no_nodejs_compat_v2 still switch Node.js compatibility off, and a flag specified alongside its own opt-out is left alone so that workerd still reports those as contradictory.

  • #​15123 d0c976c Thanks @​dependabot! - Stop adding a redundant nodejs_compat flag to generated Wrangler configurations

    create-cloudflare and wrangler setup write today's date as the compatibility_date, and from 2026-08-04 that already enables nodejs_compat. Adding the flag as well made the generated project fail to start with "The compatibility flag nodejs_compat became the default as of 2026-08-04 so does not need to be specified anymore", so the flag is now only added for earlier compatibility dates.

    create-cloudflare also removes the flag when a template, or a framework's own scaffolder, already wrote it into a configuration that ends up using such a compatibility date, and still installs @types/node for these projects even though there is no longer a flag to detect them by.

    wrangler setup does the same for a wrangler.json(c) that is already in the project: it writes today's date over whatever date that configuration was written for, so a nodejs_compat it finds there is removed as part of writing the file.

  • #​15142 3b02915 Thanks @​penalosa! - Fix remote binding sessions reusing stale binding configurations

    Starting a new remote bindings session that reuses a Worker name no longer picks up the bindings from a previous session, which could cause Binding "..." not found errors.

  • Updated dependencies [d0c976c, d0c976c, 0b82b15, d0c976c, 90dd5e5]:

v4.121.0

Compare Source

Minor Changes
  • #​15079 15cad03 Thanks @​podonnell-dev! - Add Preview base config secret commands

    Wrangler now manages Worker Preview base config secrets with wrangler preview base-config secret put, delete, list, and bulk. These commands update the Worker's previews_base_config.env, keeping shared defaults scoped to all of that Worker's Previews. wrangler preview base-config secret list reads from the Worker's Preview base config and prints secret names with values masked. wrangler preview base-config secret bulk deletes a secret when its value is null, matching wrangler secret bulk.

  • #​15000 731b33a Thanks @​edmundhung! - Allow Wrangler projects to build a Worker once and reuse it in createTestHarness()

    Build the Worker once:

    wrangler deploy --dry-run --outdir ./worker-output
    

    Then reuse the emitted Worker during test harness startup and reset:

    const server = createTestHarness({
      workers: [
        {
          configPath: "./wrangler.jsonc",
          prebuiltWorkerDir: "./worker-output",
        },
      ],
    });
    
  • #​14737 e1b5b4b Thanks @​ttoino! - Add email.sending as an event subscription source for queues

    wrangler queues subscription create now accepts --source email.sending alongside two new flags, --zone-id and --domain, which identify the zone and the sending domain (zone apex or a verified subdomain) to subscribe to. Both flags are required for this source. The subscription's resource is displayed as the sending domain in wrangler queues subscription get.

  • #​15073 d669088 Thanks @​FlorentCollin! - Add US jurisdiction support to wrangler d1 create

    You can now create a D1 database in the US jurisdiction with wrangler d1 create <name> --jurisdiction us. The new jurisdiction is also listed in the command's help output.

  • #​15079 15cad03 Thanks @​podonnell-dev! - Use Preview deployment PATCH APIs for Preview secret commands

    Wrangler now updates Worker Preview secrets by patching the named Preview's latest deployment instead of patching the Worker's Previews settings. This keeps secret changes scoped to one Preview, avoids affecting production or other Previews, and creates a new Preview deployment that goes live at 100% immediately. wrangler preview secret list now reads from the named Preview's latest deployment and prints secret names with values masked. wrangler preview secret bulk now deletes a secret when its value is null, matching wrangler secret bulk.

  • #​14924 0aa8fa5 Thanks @​ariesclark! - Honor DO_NOT_TRACK=1 as a telemetry opt-out

    Wrangler now disables telemetry when DO_NOT_TRACK=1 is set, regardless of other telemetry settings.

Patch Changes
  • #​15081 026e058 Thanks @​podonnell-dev! - Compact wrangler preview deployment success output

    wrangler preview now prints a concise success summary with the Preview name, Preview URL, deployment ID, and Deployment URL instead of the previous box-art settings summary.

  • #​15132 5b1b930 Thanks @​dario-piotrowicz! - Fetch script metadata directly instead of listing all scripts

    When resolving Durable Object migrations, fetch the specific script's service metadata via /workers/services/{name} instead of listing all scripts in the account via /workers/scripts. This avoids downloading metadata for every Worker in the account just to find one script's migration tag.

  • #​15032 6e7d37d Thanks @​Sertug17! - Fix wrangler dev commands crashing with No such module "wrangler:modules-watch" when "no_bundle": true

    Running wrangler dev or wrangler pages dev with bundling disabled ("no_bundle": true in wrangler.json, or the --no-bundle flag) no longer crashes at startup with Uncaught Error: No such module "wrangler:modules-watch". Live reloading on file changes continues to work as before.

  • Updated dependencies [c7aede7]:

v4.120.1

Compare Source

Patch Changes

v4.120.0

Compare Source

Minor Changes
  • #​15008 35c87e9 Thanks @​skepticfx! - Adds the ability to find container instances by exact ID or name

    wrangler containers instances <application_id> --search <instance_id_or_name> now searches every page and returns exact matches in human-readable or JSON output. JSON returns a top-level array, including an empty array when there is no match, while human-readable output prints a no-match message. If multiple instances have the same exact name, every matching instance is returned.

  • #​15008 35c87e9 Thanks @​skepticfx! - Add explicit pagination to container instance JSON output

    Use wrangler containers instances <application_id> --json --per-page <size> to return one page with machine-readable result_info, then pass its next_page_token to --page-token to retrieve the next page. Plain --json remains backward-compatible: it requests the complete list and returns the existing top-level array.

Patch Changes
  • #​15013 8cf78c8 Thanks @​dario-piotrowicz! - Update undici from 7.28.0 to 7.29.0

  • #​15015 a60ff4d Thanks @​nickpatt! - Cut the per-request cost of local observability capture

    Every tail event was written to the trace store as its own Durable Object call, so a request paid two or three round-trips per span. On a module-heavy app under the Vite plugin that dominated dev request latency. Rows are now buffered and written in batches, taking a request from roughly thirty calls to three.

    Work in progress still shows up as it happens: the root span is written immediately, console logs and exceptions as they arrive, and a span's completion is written on the next event once 100ms has passed. An invocation that goes completely quiet writes nothing further until it ends, since the flush is driven by tail events rather than a timer.

    The Vite plugin's own router, asset and proxy workers are also no longer captured. Their traces were noise the Observability views already hid, and skipping them cuts the spans recorded per request — a side benefit being that a trace's root is now your Worker rather than __router-worker__.

  • Updated dependencies [b4f0c97, 8cf78c8, a60ff4d, 99eb50c]:

v4.119.0

Compare Source

Minor Changes
  • #​14952 20470fa Thanks @​nelsonjsduarte! - Add --parse-type flag to wrangler ai-search create

    wrangler ai-search create now accepts --parse-type to control how a website data source discovers URLs. sitemap (the default) reads XML sitemaps; discover follows links recursively.

    Previously the parse type could only be chosen through the interactive wizard, which was skipped whenever --source was supplied — so it was impossible to create a discover instance from a script.

    wrangler ai-search create my-instance \
      --type web-crawler \
      --source https://example.com \
      --parse-type discover
    

    The interactive wizard now offers Discover alongside Sitemap. --parse-type is only valid with --type web-crawler; passing it with --type builtin or --type r2 is rejected, since the API stores the value for those source types but never reads it. When the flag is omitted in non-interactive mode the field is left unset and the API default (sitemap) applies.

  • #​14941 266172b Thanks @​nickpatt! - Improve the Local Explorer's Observability views

    console.log messages now render the way the console would (JSON-encoded strings are unwrapped and multi-argument logs are joined), traces and events can be looked up by trace or span id from the search bar, and an event's "View trace" button jumps to the exact invocation that emitted it — even when a trace_id spans several invocations (e.g. a subrequest or self fetch).

  • #​14064 a9e5abb Thanks @​petebacondarwin! - Add support for OAuth 2.0 Device Authorization Grant to wrangler login

    Run wrangler login --device to authenticate without a local callback server. Useful in containers, remote SSH sessions, Codespaces, and any other environment where localhost:8976 is unreachable from your browser.

    The new flow:

    • prints the verification URL and user code to the terminal,
    • attempts to open the verification URL in your default browser automatically (suppressed via --browser=false),
    • and polls the token endpoint until you approve the request (with a 5-minute hard cap).

    The verification URL is supplied by the authorization server, so it is rejected unless it is an https URL on the same auth domain the device code was requested from — it is never printed or opened otherwise.

    --callback-host and --callback-port cannot be combined with --device, since this flow does not start a local callback server.

Patch Changes

Configuration

📅 Schedule: (in timezone Europe/Amsterdam)

  • Branch creation
    • "after 3am and before 7am every weekday,every weekend"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---|---|---| | [wrangler](https://github.com/cloudflare/workers-sdk) ([source](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler)) | [`4.118.0` → `4.142.0`](https://renovatebot.com/diffs/npm/wrangler/4.118.0/4.142.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/wrangler/4.142.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/wrangler/4.142.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/wrangler/4.118.0/4.142.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/wrangler/4.118.0/4.142.0?slim=true) | Merge Confidence badges are included where supported — low or neutral confidence warrants a manual impact check before merge. `Released` is the upstream publish time. `—` means this datasource reports no release timestamp — normal for ghcr.io, quay.io and private/proxy registries — so `minimumReleaseAge` cannot hold the update back and it is eligible as soon as checks pass. A real date means the soak is enforced: add this update type's `minimumReleaseAge` to `Released` to get the eligibility moment. --- ### Release Notes <details> <summary>cloudflare/workers-sdk (wrangler)</summary> ### [`v4.142.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41420) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.141.0...wrangler@4.142.0) ##### Minor Changes - [#&#8203;15856](https://github.com/cloudflare/workers-sdk/pull/15856) [`4c2993b`](https://github.com/cloudflare/workers-sdk/commit/4c2993b898c8df4ea6799897803c2c5ef18c5847) Thanks [@&#8203;Naapperas](https://github.com/Naapperas)! - Support Workflows declared in `exports` on `ctx.exports` in local development A Workflow declared in a Worker's `exports` is now available on `ctx.exports` in `wrangler dev`, the Vite plugin and the Vitest plugin, with the same API as a Workflow binding: ```ts const instance = await ctx.exports.MyWorkflow.create({ params: { name: "World" }, }); ``` `ctx.exports` and `workflows` bindings with the same Workflow `name` share their instances, including instances created before the Workflow was declared in `exports`. Two Workers can't export the same Workflow name, and a binding to an exported Workflow must refer to the Worker and class that export it. `getPlatformProxy()` ignores Workflows declared in `exports`, since it doesn't run the Worker's code. `wrangler workflows` commands run with `--local` also work with Workflows declared only in `exports`, without a `workflows` binding. In the Vitest plugin, `introspectWorkflow()` and `introspectWorkflowInstance()` still need a Workflow binding, and now explain how to add one when passed a Workflow from `ctx.exports`. Instances created through `ctx.exports` are introspected too. A `workflows` binding whose `script_name` is the Worker's own name now resolves to the Worker itself again. ##### Patch Changes - [#&#8203;15891](https://github.com/cloudflare/workers-sdk/pull/15891) [`8dc53ae`](https://github.com/cloudflare/workers-sdk/commit/8dc53aec0d1a4133cd8c599b814cac0da30b4bb8) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260925.1 | ^5.20260926.1 | | workerd | 1.20260925.1 | 1.20260926.1 | - Updated dependencies \[[`8dc53ae`](https://github.com/cloudflare/workers-sdk/commit/8dc53aec0d1a4133cd8c599b814cac0da30b4bb8), [`4c2993b`](https://github.com/cloudflare/workers-sdk/commit/4c2993b898c8df4ea6799897803c2c5ef18c5847)]: - <miniflare@5.20260926.0-alpha> ### [`v4.141.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41410) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.140.0...wrangler@4.141.0) ##### Minor Changes - [#&#8203;15658](https://github.com/cloudflare/workers-sdk/pull/15658) [`8280086`](https://github.com/cloudflare/workers-sdk/commit/8280086df5571607ab614fa09684c2d78fcdd58b) Thanks [@&#8203;jqmmes](https://github.com/jqmmes)! - Add Durable Objects code update strategies to Worker deployments Use `--durable-objects-code-update-mode immediate` with `wrangler deploy`, `wrangler versions deploy`, and `wrangler rollback` to update code without waiting for active instances to hibernate. Use `--durable-objects-code-update-mode deferred 30s` to set a maximum delay, or configure `durable_objects.code_update_strategy` with `mode` and `max_delay`. When unset, the strategy defaults to deferred with a 5-minute maximum delay; delays cannot exceed 24 hours and must use millisecond precision. - [#&#8203;15800](https://github.com/cloudflare/workers-sdk/pull/15800) [`bd56b98`](https://github.com/cloudflare/workers-sdk/commit/bd56b98716d9306a3464fc04c66090d2846a37f9) Thanks [@&#8203;Refaerds](https://github.com/Refaerds)! - Add Browser Run as an event source for Queue subscriptions You can now create Queue subscriptions with `--source browserRun`. ##### Patch Changes - [#&#8203;15864](https://github.com/cloudflare/workers-sdk/pull/15864) [`ee2b200`](https://github.com/cloudflare/workers-sdk/commit/ee2b200ff1e8edb5d5f2acb2bf45ffbdcb59f7c1) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260923.1 | ^5.20260925.1 | | workerd | 1.20260923.1 | 1.20260925.1 | - [#&#8203;15207](https://github.com/cloudflare/workers-sdk/pull/15207) [`805af2f`](https://github.com/cloudflare/workers-sdk/commit/805af2f0a5567c58f8259bc580883f1919039c60) Thanks [@&#8203;exKAZUu](https://github.com/exKAZUu)! - Show the stack and cause of failed proxied requests in `wrangler dev` debug logs When a request proxied to the local Worker fails, running with `--log-level debug` now shows the underlying error's stack and cause chain. - Updated dependencies \[[`ee2b200`](https://github.com/cloudflare/workers-sdk/commit/ee2b200ff1e8edb5d5f2acb2bf45ffbdcb59f7c1), [`c91279b`](https://github.com/cloudflare/workers-sdk/commit/c91279b497ae6195f911b17ee3da3b7af28c2f17)]: - <miniflare@5.20260925.0-alpha> ### [`v4.140.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41400) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.139.0...wrangler@4.140.0) ##### Minor Changes - [#&#8203;15822](https://github.com/cloudflare/workers-sdk/pull/15822) [`8f7916c`](https://github.com/cloudflare/workers-sdk/commit/8f7916cd72cd0f6a3bcef80abc8ad4509b13026a) Thanks [@&#8203;GregBrimble](https://github.com/GregBrimble)! - Support Containers in Worker Preview deployments with the Build Output. ##### Patch Changes - Updated dependencies \[]: - <miniflare@5.20260923.0-alpha> ### [`v4.139.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41390) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.138.0...wrangler@4.139.0) ##### Minor Changes - [#&#8203;15792](https://github.com/cloudflare/workers-sdk/pull/15792) [`479e1e8`](https://github.com/cloudflare/workers-sdk/commit/479e1e8eaf05764da7950c42c38cff2a98f00e3f) Thanks [@&#8203;flakey5](https://github.com/flakey5)! - Configure SSH for experimental Durable Object-managed Containers Set `containers[].ssh` and `containers[].authorized_keys` when using `scheduling_policy: "durable_object"`. These are application-wide settings that follow the same rules as the existing Durable Object-managed Container settings: normal deployments create missing applications and update explicitly configured values, while omitted settings preserve the existing application configuration. ```jsonc // wrangler.jsonc { "containers": [ { "name": "sandbox", "class_name": "Sandbox", "scheduling_policy": "durable_object", "ssh": { "enabled": true }, "authorized_keys": [ { "name": "laptop", "public_key": "ssh-ed25519 AAAA..." } ] } ] } ``` - [#&#8203;15648](https://github.com/cloudflare/workers-sdk/pull/15648) [`52c0e9f`](https://github.com/cloudflare/workers-sdk/commit/52c0e9f79d21b508466cd7508434fd8860be56f7) Thanks [@&#8203;tpmmorris](https://github.com/tpmmorris)! - Expose configured Cron Triggers to local development consumers Wrangler now passes the active environment's exact Cron Trigger expressions to Miniflare so Local Explorer can display them. Headless agent sessions also advertise the Local Explorer scheduled invocation API. - [#&#8203;15786](https://github.com/cloudflare/workers-sdk/pull/15786) [`bdda4c3`](https://github.com/cloudflare/workers-sdk/commit/bdda4c3b3c028d3d4dab5ea4c5af8040ed7ed1d8) Thanks [@&#8203;ThomasRubini](https://github.com/ThomasRubini)! - Support UDP connect handlers in local development The experimental `connect` configuration now accepts `protocol: "udp"`, with optional `idle_timeout_ms` and `max_pending_bytes` settings. UDP datagrams are delivered to the Worker's `connect()` handler using workerd's value-mode socket streams, and can be tested with `Miniflare#dispatchConnect({ protocol: "udp" })`. - [#&#8203;15779](https://github.com/cloudflare/workers-sdk/pull/15779) [`fc3cbaa`](https://github.com/cloudflare/workers-sdk/commit/fc3cbaa4150a3cf30502286452153806bf8800d2) Thanks [@&#8203;Naapperas](https://github.com/Naapperas)! - Support `workflow` entries in the `exports` configuration map A Worker can now declare the Workflows it defines in `exports`, keyed by the `WorkflowEntrypoint` class name: ```jsonc { "exports": { "MyWorkflow": { "type": "workflow", "name": "my-workflow", "limits": { "steps": 100 }, "schedules": "0 * * * *" } } } ``` A `workflow` export accepts the same settings as a `workflows` binding: `limits`, `concurrency`, `schedules`, and `default_retention`. `wrangler deploy` and `wrangler versions upload` send these entries to the upload API by name, and `wrangler deploy` and `wrangler triggers deploy` provision the Workflow with its settings, just as they do for `workflows` bindings owned by the Worker. A Workflow may be declared both as a binding and as an export, as long as both declarations use the same class and do not set the same setting to different values. A binding to another Worker's Workflow cannot share a name with an export. `@cloudflare/config` adds the matching `exports.workflow()` helper. Local development does not yet act on these entries. ##### Patch Changes - [#&#8203;15796](https://github.com/cloudflare/workers-sdk/pull/15796) [`be72815`](https://github.com/cloudflare/workers-sdk/commit/be728157f7b1f59f5878d09ca4f23b96f338f75d) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260921.1 | ^5.20260923.1 | | workerd | 1.20260921.1 | 1.20260923.1 | - [#&#8203;14847](https://github.com/cloudflare/workers-sdk/pull/14847) [`940c692`](https://github.com/cloudflare/workers-sdk/commit/940c6925b887faa4f43eccc957766385f6cc2d47) Thanks [@&#8203;TheSaiEaranti](https://github.com/TheSaiEaranti)! - Emulate the deterministic-ID uniqueness contract in the local Workflows binding The local Workflows binding now matches the documented production behavior for deterministic instance IDs: `create({ id })` with an ID that already exists throws `(instance.already_exists)` and retains the existing instance, and `createBatch()` skips IDs that already exist or repeat within the batch, excluding them from the result instead of creating duplicate executions. Previously both paths silently created duplicates, so code relying on deterministic IDs for idempotency (for example a Queue consumer creating one workflow per message) appeared to work locally while double-executing workflow bodies. - [#&#8203;15803](https://github.com/cloudflare/workers-sdk/pull/15803) [`cd60c9c`](https://github.com/cloudflare/workers-sdk/commit/cd60c9c946bb3bcb9f6c32d426c2d4ee2992e03a) Thanks [@&#8203;pmiguel](https://github.com/pmiguel)! - Show `--jurisdiction` in help for `wrangler kv namespace create` The option was supported but omitted from the command's help output. Users can now discover how to create KV namespaces in a specific jurisdiction. - [#&#8203;15838](https://github.com/cloudflare/workers-sdk/pull/15838) [`15799d4`](https://github.com/cloudflare/workers-sdk/commit/15799d4b61adc6317a506d700846ebaeeb558095) Thanks [@&#8203;oddharsh](https://github.com/oddharsh)! - Update `smol-toml` to 1.9.0 to fix slow parsing of very large TOML files Parse time for TOML config files now grows linearly with their size, instead of with its square: a 40,000-line file that took 259 ms to parse now takes 17 ms, while typical `wrangler.toml` files parse in the same time as before. This addresses the `GHSA-r4xh-jqrq-34v2` advisory against earlier versions of the parser. Some TOML syntax errors now point at the character that caused them. For example, a `wrangler.toml` containing `INVALID "FILE` is now reported as `illegal character in key` at the `"`, rather than `incomplete key-value` at the start of the line. - Updated dependencies \[[`52c0e9f`](https://github.com/cloudflare/workers-sdk/commit/52c0e9f79d21b508466cd7508434fd8860be56f7), [`44f5295`](https://github.com/cloudflare/workers-sdk/commit/44f52951a699f77a35fa5d3b0ba1d33c7e2e3a31), [`be72815`](https://github.com/cloudflare/workers-sdk/commit/be728157f7b1f59f5878d09ca4f23b96f338f75d), [`940c692`](https://github.com/cloudflare/workers-sdk/commit/940c6925b887faa4f43eccc957766385f6cc2d47), [`bdda4c3`](https://github.com/cloudflare/workers-sdk/commit/bdda4c3b3c028d3d4dab5ea4c5af8040ed7ed1d8), [`fc3cbaa`](https://github.com/cloudflare/workers-sdk/commit/fc3cbaa4150a3cf30502286452153806bf8800d2)]: - <miniflare@5.20260923.0-alpha> ### [`v4.138.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41380) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.137.0...wrangler@4.138.0) ##### Minor Changes - [#&#8203;15776](https://github.com/cloudflare/workers-sdk/pull/15776) [`b03f960`](https://github.com/cloudflare/workers-sdk/commit/b03f960f3631003cd11d798f7d2fa3591834b5b4) Thanks [@&#8203;edevil](https://github.com/edevil)! - Add event-code support to temporary Worker deployments Use `wrangler deploy --temporary --event-code <code>` to provision an account for an event. Wrangler requires explicit server acknowledgement before caching the account and keeps the event code out of its cache and telemetry. - [#&#8203;15817](https://github.com/cloudflare/workers-sdk/pull/15817) [`6e77c53`](https://github.com/cloudflare/workers-sdk/commit/6e77c53425044c8ae22b6cf796131aed2899413e) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Allow framework commands to produce Preview Build Output with the experimental config When `cf previews deploy` invokes a framework build command, Preview intent is now preserved. Function-based `cloudflare.config.ts` files receive `isPreview: true`, and generated Build Output is marked as a Preview build. ##### Patch Changes - [#&#8203;15806](https://github.com/cloudflare/workers-sdk/pull/15806) [`8fade73`](https://github.com/cloudflare/workers-sdk/commit/8fade73f63289d3e4b64004669bca7e06d19c0e3) Thanks [@&#8203;NuroDev](https://github.com/NuroDev)! - Standardize Zod validation error output Format validation errors with Zod's built-in `prettifyError()` helper so Miniflare, Wrangler, the Vite plugin, and the Vitest plugin show consistent messages and property paths. - Updated dependencies \[[`a71237a`](https://github.com/cloudflare/workers-sdk/commit/a71237a662d50d51caed454f0a47f4a29f9cd2b1), [`8fade73`](https://github.com/cloudflare/workers-sdk/commit/8fade73f63289d3e4b64004669bca7e06d19c0e3)]: - <miniflare@5.20260921.1-alpha> ### [`v4.137.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41370) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.136.3...wrangler@4.137.0) ##### Minor Changes - [#&#8203;15778](https://github.com/cloudflare/workers-sdk/pull/15778) [`cd7508c`](https://github.com/cloudflare/workers-sdk/commit/cd7508cccf2de1ea010320d6f3e70ec80e6e5e2e) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Generate types during development and supported builds with Vite's `experimental.newConfig` option or Wrangler's `--experimental-new-config` flag (and `--experimental-cf-build-output` for builds) When Wrangler's `--experimental-new-config` flag or Vite's `experimental.newConfig` option is enabled, inferred configuration and runtime declarations are now kept in `.cloudflare/types/index.d.ts`. Vite refreshes them during development and production builds. Wrangler refreshes them during development and when building with both `--experimental-new-config` and `--experimental-cf-build-output`. In the experimental `wrangler.config.ts` format, the `types` option is now top-level because it applies to both commands. ##### Patch Changes - [#&#8203;15765](https://github.com/cloudflare/workers-sdk/pull/15765) [`1bdb96d`](https://github.com/cloudflare/workers-sdk/commit/1bdb96da2fc0811fe24bb98b11d3921883c219f1) Thanks [@&#8203;th0m](https://github.com/th0m)! - Prepare the required egress sidecar for local Containers without configured images Wrangler dev and Vite dev/preview now pull the required sidecar for Durable Object-managed Containers that select their application image at start time. Previously, these Containers failed to start unless the sidecar image was already cached in Docker. - [#&#8203;15712](https://github.com/cloudflare/workers-sdk/pull/15712) [`f5605f5`](https://github.com/cloudflare/workers-sdk/commit/f5605f5cb75eab7ecb7413a9432529ac062ee052) Thanks [@&#8203;alsuren](https://github.com/alsuren)! - Match D1 SQL statement splitting to the local SQLite runtime Wrangler now uses SQLite's statement-completion state machine when splitting D1 SQL files. This keeps trigger, quoted identifier, comment, and keyword handling consistent with local execution. ### [`v4.136.3`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41363) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.136.2...wrangler@4.136.3) ##### Patch Changes - [#&#8203;15662](https://github.com/cloudflare/workers-sdk/pull/15662) [`59267fc`](https://github.com/cloudflare/workers-sdk/commit/59267fc79d1f7925a15369ca0125290df2404bfb) Thanks [@&#8203;oddharsh](https://github.com/oddharsh)! - Update `smol-toml` to 1.8.0 This updates the bundled TOML parser that reads `wrangler.toml` to a version that addresses two advisories against 1.5.2: `GHSA-7w5x-hrqm-74c2` (a value followed by a comment with no trailing newline, such as `a=[1 #`, put the parser in an infinite loop) and `GHSA-v3rj-xjv7-4jmq` (thousands of consecutive comment lines overflowed the stack). On the old version, `wrangler deploy` against a `wrangler.toml` ending in `a=[1 #` never returned; it now fails with `Invalid TOML document: cannot find end of structure`. - [#&#8203;15760](https://github.com/cloudflare/workers-sdk/pull/15760) [`6906bf0`](https://github.com/cloudflare/workers-sdk/commit/6906bf06d9eb1045605c71c345d37e7c300a5bbc) Thanks [@&#8203;yomna-shousha](https://github.com/yomna-shousha)! - Warn when `wrangler preview` returns only non-custom-domain URLs even though custom-domain Preview URLs are configured. - [#&#8203;15761](https://github.com/cloudflare/workers-sdk/pull/15761) [`354ebdb`](https://github.com/cloudflare/workers-sdk/commit/354ebdb61180ef67cebd34276a3a1935e5151d13) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Fix Preview output artifacts to always include the resolved parent Worker name Preview artifacts now use Wrangler's resolved Worker name instead of relying on the Preview API response to include it. - Updated dependencies \[]: - <miniflare@5.20260921.0-alpha> ### [`v4.136.2`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41362) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.136.1...wrangler@4.136.2) ##### Patch Changes - [#&#8203;15762](https://github.com/cloudflare/workers-sdk/pull/15762) [`ad20547`](https://github.com/cloudflare/workers-sdk/commit/ad205472db4b66c1a14d0a2360093587a877e863) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Fix `wrangler types` generating runtime headers with trailing whitespace Runtime type headers without compatibility flags now end at the compatibility date, keeping generated types reproducible when tools remove trailing whitespace. - [#&#8203;15703](https://github.com/cloudflare/workers-sdk/pull/15703) [`02c1d83`](https://github.com/cloudflare/workers-sdk/commit/02c1d83417e1f8f63af720a4de731ea4fe74f10d) Thanks [@&#8203;KianNH](https://github.com/KianNH)! - Improve Container image listing and deletion List all image pages using read-only credentials, validate tags before deletion, and report successful deletion when the garbage-collection request fails. - [#&#8203;15700](https://github.com/cloudflare/workers-sdk/pull/15700) [`275184d`](https://github.com/cloudflare/workers-sdk/commit/275184d38b936c7ebed60d282fc33f002b4ca7b1) Thanks [@&#8203;KianNH](https://github.com/KianNH)! - Fix Container SSH connection setup and shutdown Prevent SSH connections from stalling during setup and ensure proxy processes exit when sessions close. - [#&#8203;15759](https://github.com/cloudflare/workers-sdk/pull/15759) [`bd59eca`](https://github.com/cloudflare/workers-sdk/commit/bd59ecae8aaac2820efaa6f60be129a1dd94cd05) Thanks [@&#8203;petebacondarwin](https://github.com/petebacondarwin)! - Show valid `sha256`-prefixed tags in Container image listings Container image listings now distinguish valid OCI tags such as `sha256-release` from synthetic digest entries such as `sha256:<digest>`. - Updated dependencies \[]: - <miniflare@5.20260921.0-alpha> ### [`v4.136.1`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41361) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.136.0...wrangler@4.136.1) ##### Patch Changes - [#&#8203;15744](https://github.com/cloudflare/workers-sdk/pull/15744) [`0ed4c54`](https://github.com/cloudflare/workers-sdk/commit/0ed4c54cce958e937addac517f5aa9819ebe0379) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Improve `wrangler preview` onboarding guidance Wrangler now displays placeholder replacement guidance directly beneath the suggested Preview configuration instead of as a separate warning. JSON output continues to include the guidance in its structured onboarding messages. - [#&#8203;15678](https://github.com/cloudflare/workers-sdk/pull/15678) [`703922d`](https://github.com/cloudflare/workers-sdk/commit/703922dbcaaeef3d2c17d4d4450cc2dd2a713f0e) Thanks [@&#8203;christhorwarth](https://github.com/christhorwarth)! - Read workers.dev URLs from the Worker resource during deployment Wrangler no longer requires account-level subdomain permission to display Worker and version-preview URLs. It now uses the Worker-scoped URL fields while preserving account-level registration for accounts without a workers.dev subdomain. - Updated dependencies \[[`14d946d`](https://github.com/cloudflare/workers-sdk/commit/14d946d5b5573d856f3b2ddaa0e75c3aa5fb7bfa)]: - [@&#8203;cloudflare/unenv-preset](https://github.com/cloudflare/unenv-preset)@&#8203;2.16.2 ### [`v4.136.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41360) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.135.0...wrangler@4.136.0) ##### Minor Changes - [#&#8203;15713](https://github.com/cloudflare/workers-sdk/pull/15713) [`3c75cad`](https://github.com/cloudflare/workers-sdk/commit/3c75cad95ce8dc80973d4aba33a59a406f791e63) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Identify experimental Build Output resource configs by filename and location The root remains `config.json`, Worker configs are now `worker.config.json`, and Container configs are now `container.config.json`. Resource configs no longer contain top-level `type` discriminators, while settings and build context are stored together in the root config. - [#&#8203;15713](https://github.com/cloudflare/workers-sdk/pull/15713) [`3c75cad`](https://github.com/cloudflare/workers-sdk/commit/3c75cad95ce8dc80973d4aba33a59a406f791e63) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Define experimental Cloudflare configuration with a single default export Experimental `cloudflare.config.ts` files now define settings and resources together in a default-exported `defineConfig()` call. Add a Worker under `worker`, add Containers to the `containers` array, or omit both to provide settings only. ```ts import * as entrypoint from "./src/index.ts" with { type: "cf-worker" }; export default defineConfig({ accountId: "...", complianceRegion: "public", worker: { name: "my-worker", compatibilityDate: "2026-09-18", entrypoint, }, }); ``` - [#&#8203;15720](https://github.com/cloudflare/workers-sdk/pull/15720) [`35668d7`](https://github.com/cloudflare/workers-sdk/commit/35668d7226f63b0a9e262ae1b187186409be8804) Thanks [@&#8203;alexkli](https://github.com/alexkli)! - Add experimental `--zone` and `--zone-id` flags to `wrangler deploy` and `wrangler triggers deploy` to attach a zone to routes passed via `--route` Routes passed on the command line were always sent to the Cloudflare API as bare patterns. Zones with an SSL for SaaS entitlement reject such routes with error 10082 ("When using wildcard host ssl for saas entitlement you must specify the zone per route using zone\_id or zone\_name"), and until now the only way to set a zone was in the config file, which `--route` overrides. The new flags are experimental and must be enabled with `--experimental-route-zones` (alias `--x-route-zones`). Pass a single zone to apply it to all routes, or one zone per route in the same order as the `--route` flags: `wrangler deploy --x-route-zones --route "app.example.com/*" --route "api.example.com/*" --zone example.com` `wrangler deploy --x-route-zones --route "a.example.com/*" --zone example.com --route "b.example.net/*" --zone example.net` `--zone` sets `zone_name` and `--zone-id` sets `zone_id` on each route. The two flags cannot be combined, and passing more than one zone requires exactly one per `--route`. Routes without zone flags behave exactly as before. - [#&#8203;15699](https://github.com/cloudflare/workers-sdk/pull/15699) [`45b3b81`](https://github.com/cloudflare/workers-sdk/commit/45b3b810809ee01cefbd53bea3a5ebc50bdb1c6c) Thanks [@&#8203;skepticfx](https://github.com/skepticfx)! - Remove the experimental Container image environment binding Durable Object-managed Containers now use `ctx.container.images` without Wrangler generating `env.EXPERIMENTAL_CLOUDFLARE_CONTAINER_IMAGES`. Update code using the experimental environment binding to read `ctx.container.images` and regenerate your Worker types. Version deployments identify managed applications from native named images, and `--containers-rollout=none` preserves native Container metadata. Containers without named images must first be provisioned with `wrangler deploy`; `versions upload` verifies that their applications already exist. The old binding is no longer read or reserved, including on previously uploaded versions. `keep_vars` retains existing variables as usual; redeploy without it to remove an existing experimental binding. - [#&#8203;15702](https://github.com/cloudflare/workers-sdk/pull/15702) [`8235e6a`](https://github.com/cloudflare/workers-sdk/commit/8235e6a7e03d4910f1de78d67324a11974c393a0) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Return structured configuration errors from `wrangler preview --json` When a Worker is missing its Preview configuration, JSON mode now returns an `error`, a `suggested_config` patch, and any associated onboarding `messages` without interactive output or terminal formatting. This changes the private-beta Preview command to make automated onboarding reliable. - [#&#8203;15577](https://github.com/cloudflare/workers-sdk/pull/15577) [`731a2ee`](https://github.com/cloudflare/workers-sdk/commit/731a2ee747d3904564ea45188dbf848d62bcc6e8) Thanks [@&#8203;sdnts](https://github.com/sdnts)! - Add support for jurisdictions to Queues subcommands ##### Patch Changes - [#&#8203;15711](https://github.com/cloudflare/workers-sdk/pull/15711) [`91e2f86`](https://github.com/cloudflare/workers-sdk/commit/91e2f86d4c53339b8083d7622dd356f1f6d62e3f) Thanks [@&#8203;ghostwriternr](https://github.com/ghostwriternr)! - Allow local Container images without exposed ports Wrangler and the Cloudflare Vite plugin no longer reject images that omit Docker `EXPOSE` metadata. Local Containers can run command-only workloads or serve traffic through workerd without declaring an unused image port. - [#&#8203;15740](https://github.com/cloudflare/workers-sdk/pull/15740) [`c5913a6`](https://github.com/cloudflare/workers-sdk/commit/c5913a61e155cebf597c8081e445b64343bf2484) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260918.1 | ^5.20260921.1 | | workerd | 1.20260918.1 | 1.20260921.1 | - [#&#8203;15471](https://github.com/cloudflare/workers-sdk/pull/15471) [`0751490`](https://github.com/cloudflare/workers-sdk/commit/0751490b357fc85022dbc9ff5e6642c0f33a2f0a) Thanks [@&#8203;edmundhung](https://github.com/edmundhung)! - Fix cf builds for static projects that serve assets from the project root The experimental Build Output path now omits the reserved `.cloudflare` directory when the project root is used for static assets. This prevents recursive output copying in Wrangler while preserving the existing behaviour for other asset directories. - [#&#8203;15440](https://github.com/cloudflare/workers-sdk/pull/15440) [`43b1f85`](https://github.com/cloudflare/workers-sdk/commit/43b1f85fe26d4b1568f6d7aacc7ffba2b408419b) Thanks [@&#8203;HuzaifaAbdulRehman](https://github.com/HuzaifaAbdulRehman)! - Rebase absolute non-JavaScript module specifiers when `preserve_file_names` is enabled With `preserve_file_names` set, a non-JS module imported by an absolute path kept that path as its module name. The build machine's filesystem layout ended up inside the deployed Worker, and the module was never written to `--outdir`. A local dry run reported success while the upload failed server-side with error code `10021`. Tooling that rewrites externals to absolute paths hits this, which is how it was found in `@opennextjs/cloudflare` with WASM imports. Absolute specifiers are now rebased to `./<basename>`, which is what the hashed branch of the same code already does minus the hash prefix. Relative specifiers keep the behaviour they had. - Updated dependencies \[[`c5913a6`](https://github.com/cloudflare/workers-sdk/commit/c5913a61e155cebf597c8081e445b64343bf2484), [`3c75cad`](https://github.com/cloudflare/workers-sdk/commit/3c75cad95ce8dc80973d4aba33a59a406f791e63)]: - <miniflare@5.20260921.0-alpha> ### [`v4.135.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41350) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.134.0...wrangler@4.135.0) ##### Minor Changes - [#&#8203;15609](https://github.com/cloudflare/workers-sdk/pull/15609) [`1f070c8`](https://github.com/cloudflare/workers-sdk/commit/1f070c8a5a0b12247071551ed58d19444a427036) Thanks [@&#8203;emily-shen](https://github.com/emily-shen)! - Build Containers when emitting experimental Build Output Wrangler and the Cloudflare Vite plugin now build Dockerfile-backed Container images when experimental Build Output is enabled. Container configs are emitted under `.cloudflare/output/v0/containers` with local image references, while existing registry references pass through unchanged. - [#&#8203;15329](https://github.com/cloudflare/workers-sdk/pull/15329) [`c4c9b75`](https://github.com/cloudflare/workers-sdk/commit/c4c9b75c54a095dc4b7ac82e44330f5650a2e4ac) Thanks [@&#8203;akshitsinha](https://github.com/akshitsinha)! - Evaluate Flagship flags locally during development Flagship bindings now use the local Miniflare store by default in Wrangler and the Vite plugin, keeping development offline and isolated from production flags. Set `remote: true` on a binding to continue using its remote app. Use `wrangler flagship flags pull <APP_ID>` to seed the store from a remote app. Flag management commands also accept `--local` to read and update the local store directly. - [#&#8203;15701](https://github.com/cloudflare/workers-sdk/pull/15701) [`643e5cc`](https://github.com/cloudflare/workers-sdk/commit/643e5ccb9e2ad7d85966af241e001465c0e1b1c6) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - Pass Preview intent to `defineWorker` and upload its resolved configuration Preview builds now evaluate programmatic Worker configuration with `ctx.isPreview` set to `true` and record that intent in Build Output. The shared Preview uploader deploys the resolved bindings and settings while preserving configured Preview base values when it creates a Preview. ##### Patch Changes - [#&#8203;15705](https://github.com/cloudflare/workers-sdk/pull/15705) [`a0485d5`](https://github.com/cloudflare/workers-sdk/commit/a0485d5a5e2293b16e77d1302a470537281c2622) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260917.1 | ^5.20260918.1 | | workerd | 1.20260917.1 | 1.20260918.1 | - [#&#8203;15587](https://github.com/cloudflare/workers-sdk/pull/15587) [`629ddef`](https://github.com/cloudflare/workers-sdk/commit/629ddef4adb201d808b4b998668261a212632ffe) Thanks [@&#8203;Kuldeeep18](https://github.com/Kuldeeep18)! - Fix duration calculation for running workflow instances, steps, and attempts in `wrangler workflows instances describe` `wrangler workflows instances describe` previously distorted the elapsed duration of in-progress instances, steps, and attempts across non-UTC timezones by stripping `" GMT"` from `toUTCString()`, causing `new Date(...)` to parse the timestamp in the local client timezone. The duration is now correctly computed against the current time. - Updated dependencies \[[`a0485d5`](https://github.com/cloudflare/workers-sdk/commit/a0485d5a5e2293b16e77d1302a470537281c2622)]: - <miniflare@5.20260918.0-alpha> ### [`v4.134.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41340) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.133.0...wrangler@4.134.0) ##### Minor Changes - [#&#8203;15684](https://github.com/cloudflare/workers-sdk/pull/15684) [`6874aa9`](https://github.com/cloudflare/workers-sdk/commit/6874aa978144469927831de59834e8cdc47a5114) Thanks [@&#8203;Ankcorn](https://github.com/Ankcorn)! - Add support for configuring real-time Issues with `observability.issues.enabled` Wrangler now validates and uploads the Issues setting alongside the existing logs and traces observability options. The experimental configuration format supports the equivalent `observability.issues.enabled` option. - [#&#8203;15681](https://github.com/cloudflare/workers-sdk/pull/15681) [`d96b319`](https://github.com/cloudflare/workers-sdk/commit/d96b3193bfb7371da5a28fe36e6b56fb1c6108b0) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Mark `wrangler preview` commands as open beta Wrangler now labels Preview commands as open beta in help output and command warnings, matching the feature's public availability. - [#&#8203;15673](https://github.com/cloudflare/workers-sdk/pull/15673) [`2b39fc2`](https://github.com/cloudflare/workers-sdk/commit/2b39fc2c79f7919b0af21603e278dce030c48870) Thanks [@&#8203;ghostwriternr](https://github.com/ghostwriternr)! - Support explicit named Container image selection in Wrangler local development Wrangler builds or pulls named images configured through Wrangler JSON or TOML and exposes their local tags through `ctx.container.images`. Pass one of those references to `ctx.container.start({ image })` to select the image. This extends the experimental Durable Object-managed Containers interface. Named images are opt-in and do not become the Container's default image. A Container without a default image must supply an image or full Container snapshot when starting. ##### Patch Changes - [#&#8203;15689](https://github.com/cloudflare/workers-sdk/pull/15689) [`876eea1`](https://github.com/cloudflare/workers-sdk/commit/876eea1c9a8a6d5856ccf05399eece93d8acfed8) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260916.1 | ^5.20260917.1 | | workerd | 1.20260916.1 | 1.20260917.1 | - Updated dependencies \[[`2298cf1`](https://github.com/cloudflare/workers-sdk/commit/2298cf1697692efb55ea75b67fe25ec6f841dbef), [`876eea1`](https://github.com/cloudflare/workers-sdk/commit/876eea1c9a8a6d5856ccf05399eece93d8acfed8)]: - <miniflare@5.20260917.0-alpha> ### [`v4.133.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41330) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.132.0...wrangler@4.133.0) ##### Minor Changes - [#&#8203;15600](https://github.com/cloudflare/workers-sdk/pull/15600) [`bac0c6a`](https://github.com/cloudflare/workers-sdk/commit/bac0c6a4f0dcf34008a0f67f4a97d068311b57dc) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Add placement configuration for Previews You can now configure `placement` in the `previews` block. Preview-specific placement overrides the top-level placement configuration for Preview Defaults and deployments. - [#&#8203;15600](https://github.com/cloudflare/workers-sdk/pull/15600) [`bac0c6a`](https://github.com/cloudflare/workers-sdk/commit/bac0c6a4f0dcf34008a0f67f4a97d068311b57dc) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Improve onboarding guidance for Previews (when `previews` block is missing from configuration file) When a local `previews` block is absent, Wrangler writes the Preview Base configuration to the local config file. When no Preview Base configuration exists, Wrangler prints a placeholder configuration derived from production bindings and warns against reusing production binding configuration. ##### Patch Changes - [#&#8203;15483](https://github.com/cloudflare/workers-sdk/pull/15483) [`71b6f10`](https://github.com/cloudflare/workers-sdk/commit/71b6f102f258e14e2b1dc23e9643cc74685d35cb) Thanks [@&#8203;tpmmorris](https://github.com/tpmmorris)! - Align Local Explorer Workflow instance status requests with production Local Explorer and Wrangler local mode now use the production-compatible `status` request field for pausing, resuming, restarting, and terminating Workflow instances. Direct Local Explorer API consumers must replace the previous `action` field with `status`. Successful Local Explorer status updates now return the production-compatible instance `status` and response `timestamp` instead of the local-only `result.success` acknowledgement. - [#&#8203;15665](https://github.com/cloudflare/workers-sdk/pull/15665) [`ad23e6e`](https://github.com/cloudflare/workers-sdk/commit/ad23e6e42dc81c9dc894248e787ed6c0abbe9028) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260915.1 | ^5.20260916.1 | | workerd | 1.20260915.1 | 1.20260916.1 | - [#&#8203;15655](https://github.com/cloudflare/workers-sdk/pull/15655) [`be2437a`](https://github.com/cloudflare/workers-sdk/commit/be2437a8b32215dc404266c930db148fc3feb17b) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - Send exports with Worker Preview deployments `wrangler preview` dropped the `exports` block from deployment requests. Durable Objects reached through `ctx.exports` had no Preview namespace, and cache settings for each entrypoint were lost too. - Updated dependencies \[[`71b6f10`](https://github.com/cloudflare/workers-sdk/commit/71b6f102f258e14e2b1dc23e9643cc74685d35cb), [`ad23e6e`](https://github.com/cloudflare/workers-sdk/commit/ad23e6e42dc81c9dc894248e787ed6c0abbe9028), [`6f3d7b5`](https://github.com/cloudflare/workers-sdk/commit/6f3d7b58b1f6cd036aca3e5946807bba37776065)]: - <miniflare@5.20260916.0-alpha> ### [`v4.132.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41320) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.131.2...wrangler@4.132.0) ##### Minor Changes - [#&#8203;14587](https://github.com/cloudflare/workers-sdk/pull/14587) [`76c0ce6`](https://github.com/cloudflare/workers-sdk/commit/76c0ce6cb35c741de4564787a45a8b3fe8246c1f) Thanks [@&#8203;MattieTK](https://github.com/MattieTK)! - Categorise the positional path argument to `wrangler deploy` and `wrangler versions upload` in command telemetry Command telemetry now records a coarse category for the entry-point/assets positional (`wrangler deploy <path>`) under `sanitizedArgs.path`, so we can understand whether people pass a file, a directory, or a relational reference such as `.` or `../example`. The possible values are `file`, `directory`, `current-dir`, `parent-relative`, and `not-found`, or `null` when no positional is provided. The raw path is never sent — only the category. - [#&#8203;15597](https://github.com/cloudflare/workers-sdk/pull/15597) [`a83d7ac`](https://github.com/cloudflare/workers-sdk/commit/a83d7ac4d4d52811e11b61753aa60c10ca5c8c78) Thanks [@&#8203;skepticfx](https://github.com/skepticfx)! - Configure application-wide logs for experimental Durable Object-managed Containers Set `containers[].observability.enabled` or `containers[].observability.logs.enabled` when using `scheduling_policy: "durable_object"`. Normal deployments create missing applications and update explicitly configured log settings without a Container rollout. Omitted settings preserve the application configuration; root Worker observability is not inherited for this policy. Version uploads may initialize missing applications but preserve existing settings. Deploying or rolling back Worker versions also preserves existing application settings, and `--containers-rollout=none` skips their updates. - [#&#8203;15597](https://github.com/cloudflare/workers-sdk/pull/15597) [`a83d7ac`](https://github.com/cloudflare/workers-sdk/commit/a83d7ac4d4d52811e11b61753aa60c10ca5c8c78) Thanks [@&#8203;skepticfx](https://github.com/skepticfx)! - Support per-image build options for experimental Durable Object-managed Containers Set `build_context` and `build_vars` alongside `dockerfile` in a Container's named `images` entries. Context paths resolve relative to the Wrangler configuration file and default to the Dockerfile's directory. Build variables are passed as Docker build arguments. Entries using the same Dockerfile with different contexts or variables are built separately. ```jsonc { "containers": [ { "class_name": "Sandbox", "scheduling_policy": "durable_object", "images": { "app": { "dockerfile": "./docker/Dockerfile", "build_context": ".", "build_vars": { "APP_ENV": "production" } } } } ] } ``` - [#&#8203;15638](https://github.com/cloudflare/workers-sdk/pull/15638) [`fa79b26`](https://github.com/cloudflare/workers-sdk/commit/fa79b26ef442303797013c70078c7acdd2c79247) Thanks [@&#8203;G4brym](https://github.com/G4brym)! - Support AI Search bindings in Worker Previews `wrangler preview` now accepts `ai_search` and `ai_search_namespaces` entries in the `previews` block and includes them in Preview deployment bindings. This lets Workers that use AI Search instance or namespace bindings attach existing resources to Preview deployments, including preview-specific instance or namespace names. These bindings are non-inheritable: declare them explicitly under `previews`. They attach to existing AI Search resources; preview does not provision new isolated instances or namespaces. - [#&#8203;15256](https://github.com/cloudflare/workers-sdk/pull/15256) [`16d1310`](https://github.com/cloudflare/workers-sdk/commit/16d1310a2a598f9a71878ba3746c8cf02e24386b) Thanks [@&#8203;theoephraim](https://github.com/theoephraim)! - \[private beta]: Add `--secrets-file` and `--var` flags to `wrangler preview` Like `wrangler deploy` and `wrangler versions upload`, `wrangler preview` now accepts a `--secrets-file` flag pointing to a JSON or .env format file, and `--var KEY:VALUE` pairs that are injected into the Preview deployment as plain text variables. CLI vars override same-named vars from the `previews` section of your config file, and secrets from the file take precedence over both: `wrangler preview --secrets-file .env.preview --var API_URL:https://api.example.com` - [#&#8203;15453](https://github.com/cloudflare/workers-sdk/pull/15453) [`ca71205`](https://github.com/cloudflare/workers-sdk/commit/ca71205bb45d9182e6c748e7097baed67739a891) Thanks [@&#8203;G4brym](https://github.com/G4brym)! - Remove the gated Web Search binding and Wrangler command The unreleased search binding and its experimental command have been removed from Wrangler, Miniflare, and configuration APIs. - [#&#8203;15597](https://github.com/cloudflare/workers-sdk/pull/15597) [`a83d7ac`](https://github.com/cloudflare/workers-sdk/commit/a83d7ac4d4d52811e11b61753aa60c10ca5c8c78) Thanks [@&#8203;skepticfx](https://github.com/skepticfx)! - Allow experimental Durable Object-managed Containers to link by name through exports Containers using `scheduling_policy: "durable_object"` can now specify `name` and link from `exports.<Class>.container` without repeating `class_name`. Deploy and version upload resolve that link for image preparation, Worker metadata, and Container application creation. ##### Patch Changes - [#&#8203;14775](https://github.com/cloudflare/workers-sdk/pull/14775) [`1be7b97`](https://github.com/cloudflare/workers-sdk/commit/1be7b97035241c91edf78b4c1f0a79f3b276ff18) Thanks [@&#8203;dario-piotrowicz](https://github.com/dario-piotrowicz)! - Sync Local Explorer endpoint lists across agent hints The Local Explorer endpoint list is now consistent across the three places it appears: the AGENTS.md template in `create-cloudflare`, the runtime agent hint in `wrangler dev`, and the Vite plugin agent hint. All three now include the `observability/clear` endpoint, use the canonical `/cdn-cgi/local/explorer` path, and have cross-reference comments pointing to each other. - [#&#8203;15409](https://github.com/cloudflare/workers-sdk/pull/15409) [`b149147`](https://github.com/cloudflare/workers-sdk/commit/b149147a1746d30fd8a868dbef7a4aac463444f1) Thanks [@&#8203;tpmmorris](https://github.com/tpmmorris)! - Fix per-query overrides for `wrangler ai-search search` `--score-threshold`, `--max-num-results`, `--filter`, and `--reranking` are now sent using the AI Search request schema, so the service applies them to searches instead of ignoring them. - [#&#8203;15633](https://github.com/cloudflare/workers-sdk/pull/15633) [`7db596c`](https://github.com/cloudflare/workers-sdk/commit/7db596c153ae0cda7e30aa351955b1781902435f) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260911.1 | ^5.20260915.1 | | workerd | 1.20260911.1 | 1.20260915.1 | - [#&#8203;14906](https://github.com/cloudflare/workers-sdk/pull/14906) [`a0856da`](https://github.com/cloudflare/workers-sdk/commit/a0856da679b025cb076dd94f7300b47a2a3a1bc0) Thanks [@&#8203;exKAZUu](https://github.com/exKAZUu)! - Surface the original error message, name and stack when the dev server reports an internal error Previously `wrangler dev` could exit with an empty `✘ [ERROR]` log that gave no indication of what went wrong (e.g. `Network connection lost.`, see [#&#8203;14641](https://github.com/cloudflare/workers-sdk/issues/14641)). These errors now include their original message, name and stack, so the failure is actually diagnosable. - [#&#8203;15179](https://github.com/cloudflare/workers-sdk/pull/15179) [`cb0955f`](https://github.com/cloudflare/workers-sdk/commit/cb0955f274102afb30b8502193edf66c0d3cb4d6) Thanks [@&#8203;rioaguspermana](https://github.com/rioaguspermana)! - Treat 502, 503, and 504 as gateway errors during asset upload retries Pages and Workers asset uploads now retry more patiently when the Cloudflare API responds with a 502, 503 or 504 gateway error, reducing concurrency and waiting longer between attempts instead of failing the deploy quickly. - [#&#8203;15399](https://github.com/cloudflare/workers-sdk/pull/15399) [`982b806`](https://github.com/cloudflare/workers-sdk/commit/982b8060d99d9bb303ef7b7f15bf6c8b1f83c72a) Thanks [@&#8203;tpmmorris](https://github.com/tpmmorris)! - Improve over-limit `run_worker_first` errors when duplicate rules are present The error now reports distinct and duplicate-entry counts and lists duplicated rules, making it clear when removing redundant entries can bring the configuration within the limit. ``` Too many `run_worker_first` rules were provided; 105 rules provided (99 distinct, 6 duplicate entries) exceeds max of 100. Note: duplicate entries count towards the route limit. Ensure that no duplicate rules are present in your `run_worker_first` configuration. The duplicated rules found are: - "/rule/0" - "/rule/1" - "/rule/2" - "/rule/3" - "/rule/4" ...and 1 more duplicated rule. ``` - [#&#8203;12369](https://github.com/cloudflare/workers-sdk/pull/12369) [`ffabe74`](https://github.com/cloudflare/workers-sdk/commit/ffabe7489ad09f80b19a98e698c4590bba7b8452) Thanks [@&#8203;43081j](https://github.com/43081j)! - Replace `execa` with `tinyexec` for running subprocesses, shrinking the bundled Wrangler output. - [#&#8203;15633](https://github.com/cloudflare/workers-sdk/pull/15633) [`7db596c`](https://github.com/cloudflare/workers-sdk/commit/7db596c153ae0cda7e30aa351955b1781902435f) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Preserve service-worker middleware error propagation with spec-compliant event dispatch Wrangler's synthetic service-worker events now propagate listener exceptions to middleware without changing the behavior of user-created `EventTarget` instances. - [#&#8203;15400](https://github.com/cloudflare/workers-sdk/pull/15400) [`e03822a`](https://github.com/cloudflare/workers-sdk/commit/e03822a3bc54a411b5795f77acbe603a010a9100) Thanks [@&#8203;james-elicx](https://github.com/james-elicx)! - Reduce the size of Wrangler's published package Exclude test-only, build-only, and obsolete template files from the npm package while retaining all runtime templates. - [#&#8203;15631](https://github.com/cloudflare/workers-sdk/pull/15631) [`c4a6279`](https://github.com/cloudflare/workers-sdk/commit/c4a627945775646bde6e0164e6deaee516150e89) Thanks [@&#8203;petebacondarwin](https://github.com/petebacondarwin)! - Restore static asset upload concurrency after gateway errors Static asset uploads previously remained at concurrency one for the rest of the deployment after any 524 response, which could make large deployments exceed the upload session lifetime. Successful uploads now restore the session's original concurrency gradually while retaining gateway throttling. Requests that were already in flight when throttling began do not restore capacity, so a burst of stale successes cannot immediately undo backpressure. - Updated dependencies \[[`7db596c`](https://github.com/cloudflare/workers-sdk/commit/7db596c153ae0cda7e30aa351955b1781902435f), [`e35c4a1`](https://github.com/cloudflare/workers-sdk/commit/e35c4a154ea16a96b47cb2e68a4930c1d833e81d), [`d3565a5`](https://github.com/cloudflare/workers-sdk/commit/d3565a5326d879fbebba72b16c0f14ba2a4fba99), [`ca71205`](https://github.com/cloudflare/workers-sdk/commit/ca71205bb45d9182e6c748e7097baed67739a891), [`1015cfb`](https://github.com/cloudflare/workers-sdk/commit/1015cfb2a780d57b13d137324c83af53d3a3a8a2), [`982b806`](https://github.com/cloudflare/workers-sdk/commit/982b8060d99d9bb303ef7b7f15bf6c8b1f83c72a), [`641df47`](https://github.com/cloudflare/workers-sdk/commit/641df4774f19313ffecf53cf7443ac3dd79abb31)]: - <miniflare@5.20260915.0-alpha> ### [`v4.131.2`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41312) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.131.1...wrangler@4.131.2) ##### Patch Changes - Updated dependencies \[[`8997652`](https://github.com/cloudflare/workers-sdk/commit/8997652577fdbe97e39fb29bebd6777d3f82d3a3)]: - <miniflare@5.20260911.1-alpha> ### [`v4.131.1`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41311) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.131.0...wrangler@4.131.1) ##### Patch Changes - [#&#8203;15592](https://github.com/cloudflare/workers-sdk/pull/15592) [`945aaa3`](https://github.com/cloudflare/workers-sdk/commit/945aaa32e0c38116e501f8509884cb1cc8f1d51b) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - Add a provisioning delay note when custom domain Preview URLs change Wrangler now explains that DNS and TLS certificate provisioning may continue after a deploy adds a custom domain or enables its Preview URLs. Stable redeploys don't repeat the note. This assumes that a request which matches the stored custom domain state doesn't restart provisioning. The client infers this from the API changeset and current domain record because this repository can't verify the backend behavior. - [#&#8203;15592](https://github.com/cloudflare/workers-sdk/pull/15592) [`945aaa3`](https://github.com/cloudflare/workers-sdk/commit/945aaa32e0c38116e501f8509884cb1cc8f1d51b) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - Clarify production status labels for custom domain routes Wrangler now prefixes explicit custom domain production states with `production:` so they match Preview labels. The updated labels appear in deployed trigger output and `WRANGLER_OUTPUT_FILE_PATH`. - [#&#8203;15602](https://github.com/cloudflare/workers-sdk/pull/15602) [`47d906f`](https://github.com/cloudflare/workers-sdk/commit/47d906f52d109509f61b1c801c1b08ecad583c0d) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260910.1 | ^5.20260911.1 | | workerd | 1.20260910.1 | 1.20260911.1 | - [#&#8203;15592](https://github.com/cloudflare/workers-sdk/pull/15592) [`945aaa3`](https://github.com/cloudflare/workers-sdk/commit/945aaa32e0c38116e501f8509884cb1cc8f1d51b) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - Avoid replacement prompts for custom domains already on the Worker Wrangler now updates Preview settings without asking to replace a custom domain when that domain already belongs to the deployed Worker. It still asks before replacing domains attached to another Worker. - [#&#8203;15592](https://github.com/cloudflare/workers-sdk/pull/15592) [`945aaa3`](https://github.com/cloudflare/workers-sdk/commit/945aaa32e0c38116e501f8509884cb1cc8f1d51b) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - Explain how to enable Preview URLs when a Preview deployment has none `wrangler preview` now shows URL shapes and configuration snippets for Workers.dev and custom domains. The custom domain snippet preserves every configured route, and the guidance distinguishes missing settings from disabled ones. This changes a private beta feature. The warning also makes clear that `wrangler deploy` publishes code from the current checkout. - Updated dependencies \[[`47d906f`](https://github.com/cloudflare/workers-sdk/commit/47d906f52d109509f61b1c801c1b08ecad583c0d), [`c2699bf`](https://github.com/cloudflare/workers-sdk/commit/c2699bf625134a2425d7142c72c4f31c4b6f8eab)]: - <miniflare@5.20260911.0-alpha> ### [`v4.131.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41310) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.130.0...wrangler@4.131.0) ##### Minor Changes - [#&#8203;15480](https://github.com/cloudflare/workers-sdk/pull/15480) [`36aed7f`](https://github.com/cloudflare/workers-sdk/commit/36aed7f0f2db5056af9df917cf6c22a2be950b1e) Thanks [@&#8203;skepticfx](https://github.com/skepticfx)! - Add Durable Object-managed Containers to top-level container configuration Wrangler now accepts `scheduling_policy: "durable_object"` in the top-level `containers` array and creates its namespace-backed application after the Worker upload resolves the Durable Object namespace ID. The namespace ID is also the application ID, so repeated deploys idempotently ensure the same application without name-based lookup, modification, or a Containers rollout. Durable Object-managed entries accept `class_name`, `scheduling_policy`, an optional `name`, and an optional named `images` map. Scheduler-only fields are rejected. Each image provides either a local `dockerfile` or a digest-pinned managed-registry `image`. Wrangler builds or resolves each image, waits while Cloudflare prepares it for the Containers runtime, and uploads the resulting references with the Worker version for access through `ctx.container.images` and `env.EXPERIMENTAL_CLOUDFLARE_CONTAINER_IMAGES`. Local development support for these entries is deferred to a follow-up. Existing scheduler-backed entries and Durable Object migrations continue to work unchanged. With `--containers-rollout=none`, existing Workers retain their deployed Container metadata and image binding even when local `containers` is omitted or empty; local scheduler edits are also ignored. The upload stops if the deployed versions cannot be recovered. Existing Workers for Platforms dispatch scripts reject this flag before upload because their API does not expose enough metadata to preserve Container associations safely. First deployments can still skip Container preparation and rollout. Without this flag, removing managed Containers, including by omitting `containers` entirely, clears the experimental image binding even with `keep_vars`. `versions deploy` validates the selected versions before changing traffic and creates their Durable Object-managed applications only after deployment succeeds. Both `deploy` and `versions deploy` report partial completion if application creation fails afterward, with instructions to retry the same command. `EXPERIMENTAL_CLOUDFLARE_CONTAINER_IMAGES` is a temporary, reserved Wrangler binding until native Container image metadata is available. Its class keys identify managed applications during `versions deploy`, including classes with empty image maps. User configuration cannot declare a binding with this name; existing versions that already use it are treated as Container configuration. - [#&#8203;15493](https://github.com/cloudflare/workers-sdk/pull/15493) [`493e635`](https://github.com/cloudflare/workers-sdk/commit/493e63548f75f8f1d9847f5576835e2e1f1682a5) Thanks [@&#8203;GregBrimble](https://github.com/GregBrimble)! - Remove `wrangler preview settings` commands The private-beta `wrangler preview settings` and `wrangler preview settings update` commands are no longer available. ##### Patch Changes - [#&#8203;15411](https://github.com/cloudflare/workers-sdk/pull/15411) [`0b43395`](https://github.com/cloudflare/workers-sdk/commit/0b433956a805d7aa86b39ebffc2c2d476a40cc89) Thanks [@&#8203;xgame92](https://github.com/xgame92)! - Fail `wrangler versions upload` early when a Worker has a pending Durable Object migration Wrangler now directs users to run `wrangler deploy` to apply the migration instead of sending a version upload request that the API will reject. - [#&#8203;15518](https://github.com/cloudflare/workers-sdk/pull/15518) [`9d75006`](https://github.com/cloudflare/workers-sdk/commit/9d75006728cb1f6a7df6b30cd7f80cc5194d5ad5) Thanks [@&#8203;taylorlee](https://github.com/taylorlee)! - Detect named-only module Worker entrypoints correctly Wrangler now distinguishes named-only module Workers from legacy Service Workers that happen to have named exports. A default export identifies a module Worker; otherwise, legacy `addEventListener` registration identifies Service Worker format. - [#&#8203;15581](https://github.com/cloudflare/workers-sdk/pull/15581) [`b605aa6`](https://github.com/cloudflare/workers-sdk/commit/b605aa60b4c9ed2546a0fd1a6ebc677c15422bc0) Thanks [@&#8203;MattieTK](https://github.com/MattieTK)! - Correct Pages-to-Workers delegation analytics for forced and ineligible commands The legacy `forced` result counted every agent-driven Pages command using `--force`, including commands that could never have been delegated. Wrangler now emits `eligible_forced` only when `--force` prevents an otherwise eligible delegation, and records other agent commands as `ineligible` with a bounded reason and whether force was used. - [#&#8203;15432](https://github.com/cloudflare/workers-sdk/pull/15432) [`f45b596`](https://github.com/cloudflare/workers-sdk/commit/f45b5968bac153d6f436f8408968573aecb44a94) Thanks [@&#8203;razethion](https://github.com/razethion)! - Prevent delayed internal errors from fetch-only remote bindings Fetch-only remote bindings such as D1 and R2 previously opened an unused WebSocket RPC session. RPC sessions are now created only when an RPC method is called. - [#&#8203;15585](https://github.com/cloudflare/workers-sdk/pull/15585) [`f69f95a`](https://github.com/cloudflare/workers-sdk/commit/f69f95aa2da329dcfa9888cfeb204cdda634d979) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260908.1 | ^5.20260910.1 | | workerd | 1.20260908.1 | 1.20260910.1 | - [#&#8203;15554](https://github.com/cloudflare/workers-sdk/pull/15554) [`bff525d`](https://github.com/cloudflare/workers-sdk/commit/bff525d66dd3785481148353d782dd33c3a644ed) Thanks [@&#8203;XiaoZ-0218](https://github.com/XiaoZ-0218)! - Add the missing `transferred_classes` migration to the config schema `DurableObjectMigration` described `new_classes`, `new_sqlite_classes`, `renamed_classes` and `deleted_classes`, but not `transferred_classes`. `normalizeAndValidateConfig` has always validated that key, and the deploy path forwards it to the API along with the rest of the step, so Transfer migrations worked — but `config-schema.json` is generated from the type, so an editor resolving `$schema` reported a valid, documented migration as an unknown key. Adding the field to the type puts it in the generated schema. No runtime change. - [#&#8203;15584](https://github.com/cloudflare/workers-sdk/pull/15584) [`96688b3`](https://github.com/cloudflare/workers-sdk/commit/96688b3ccada3b56ad6cc42e1cbd63f4c268db1a) Thanks [@&#8203;Svector-anu](https://github.com/Svector-anu)! - Bump `shell-quote` to 1.9.0+ to pick up two disclosed advisories `shell-quote@1.8.1` is affected by a ReDoS in `parse()` (CVE-2026-13311 / GHSA-395f-4hp3-45gv — an unauthenticated attacker who can feed a string into `parse()` can block the event loop for tens of seconds with plain space-separated input, no shell metacharacters required) and by an object-token escaping bug in `quote()` (CVE-2026-9277 / GHSA-w7jw-789q-3m8p), both fixed upstream in `1.9.0`. Wrangler's `parse()` wrapper (`src/utils/shell-quote.ts`) is reachable from `pages dev`/`init` command-line parsing, so the ReDoS applies; the `quote()` call site only ever passes string arguments, so the object-token issue was not reachable here, but there is no reason to stay on a vulnerable range once a patch exists. - [#&#8203;15563](https://github.com/cloudflare/workers-sdk/pull/15563) [`ed5797a`](https://github.com/cloudflare/workers-sdk/commit/ed5797a17d837c381ebb63f50ea3fdc155df88fe) Thanks [@&#8203;Bortlesboat](https://github.com/Bortlesboat)! - Encode filenames in Pages HTML redirects Fix `wrangler pages dev` returning a 502 response when redirecting HTML paths containing Unicode characters. Keep reserved characters in filenames encoded in the redirect destination and preserve the request query string. - [#&#8203;14889](https://github.com/cloudflare/workers-sdk/pull/14889) [`128235a`](https://github.com/cloudflare/workers-sdk/commit/128235a8c08ca40d93b96d408297d21cbdcc9eb6) Thanks [@&#8203;chinesepowered](https://github.com/chinesepowered)! - Fix `wrangler types --strict-vars=false` emitting invalid TypeScript for an empty array var A var whose value was an empty array produced `()[]`, which is a syntax error. Because this lands in the generated `worker-configuration.d.ts`, it did not just break that one line — the whole file failed to parse, so no binding types resolved at all. An empty array now generates `unknown[]`. - [#&#8203;15494](https://github.com/cloudflare/workers-sdk/pull/15494) [`f8aea7e`](https://github.com/cloudflare/workers-sdk/commit/f8aea7e325357fc490c8f37dc2f750fe35dfd59e) Thanks [@&#8203;GregBrimble](https://github.com/GregBrimble)! - Use `previews_base_config` for Preview configuration Preview commands now read the Worker Previews Base configuration from the `previews_base_config` API field. - [#&#8203;15569](https://github.com/cloudflare/workers-sdk/pull/15569) [`24ef86b`](https://github.com/cloudflare/workers-sdk/commit/24ef86ba87da44cda2ae4cc42b5cb57dc5ff6669) Thanks [@&#8203;RealBhupesh](https://github.com/RealBhupesh)! - Fix `wrangler workflows instances describe` crashing on dynamic retry delays The Workflows API serializes function retry delays as `"[dynamic]"`. The describe command previously parsed that as a duration, produced an Invalid Date, and threw `RangeError: Invalid time value` before printing remaining steps. It now renders `unknown (dynamic delay)` and also tolerates attempts whose `end` timestamp is missing. - Updated dependencies \[[`f45b596`](https://github.com/cloudflare/workers-sdk/commit/f45b5968bac153d6f436f8408968573aecb44a94), [`f69f95a`](https://github.com/cloudflare/workers-sdk/commit/f69f95aa2da329dcfa9888cfeb204cdda634d979), [`a549e58`](https://github.com/cloudflare/workers-sdk/commit/a549e58af707e84d6aeddaadc6566103ae236dbb), [`dbb3ff4`](https://github.com/cloudflare/workers-sdk/commit/dbb3ff4ebe7579be76f42591957c429f26da319b), [`fea3cd0`](https://github.com/cloudflare/workers-sdk/commit/fea3cd0f2ef5af6c8f2b50c794a89b8ef03ca82b), [`6bd7b6c`](https://github.com/cloudflare/workers-sdk/commit/6bd7b6cae44d441e415130991e3f181694bd3b6d), [`15cd6e1`](https://github.com/cloudflare/workers-sdk/commit/15cd6e16129af3dad09d53d6cd03f963f9203970), [`be1caec`](https://github.com/cloudflare/workers-sdk/commit/be1caeca44ccd9660a81420805fb0958ca422589), [`dbc9506`](https://github.com/cloudflare/workers-sdk/commit/dbc9506e48d99237be701685d08582966f62f59f)]: - <miniflare@5.20260910.0-alpha> ### [`v4.130.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41300) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.129.1...wrangler@4.130.0) ##### Minor Changes - [#&#8203;14372](https://github.com/cloudflare/workers-sdk/pull/14372) [`dbf6aad`](https://github.com/cloudflare/workers-sdk/commit/dbf6aad7b85fad3a2848191804bf627c591b5821) Thanks [@&#8203;ichernetsky-cf](https://github.com/ichernetsky-cf)! - Add `containers[].observability` support to `wrangler deploy` Wrangler now accepts container-specific observability settings via `containers[].observability`, including application-level targeting fields for Containers. Root `observability` continues to work as a fallback when a container does not define its own observability settings. `wrangler deploy` now preserves legacy `configuration.observability` for existing container apps that still use rollout-based observability, while using top-level application observability for new or already-migrated apps. Existing application diffs are now normalized even when stored resource limits cannot be mapped to a named instance type. API-only metadata and equivalent managed-registry image names no longer appear as edits or affect whether deployment changes require a rollout. - [#&#8203;15004](https://github.com/cloudflare/workers-sdk/pull/15004) [`e20df20`](https://github.com/cloudflare/workers-sdk/commit/e20df2042a73fc6d861f07113efc5804b4c0a119) Thanks [@&#8203;MattieTK](https://github.com/MattieTK)! - Delegate agent Pages project creation with a production branch to Workers When run by an AI agent, `wrangler pages project create --production-branch <name>` is now eligible for delegation to a Workers static-assets deploy. The production branch names the target that a Workers deploy would publish to, so it does not need to disqualify a brand-new project from delegation. `wrangler pages deploy --branch <name>` remains on Pages because an interactive new-project flow separately prompts for its production branch. The deployment branch may therefore represent a preview and cannot safely be converted into a production Workers deployment. - [#&#8203;15004](https://github.com/cloudflare/workers-sdk/pull/15004) [`e20df20`](https://github.com/cloudflare/workers-sdk/commit/e20df2042a73fc6d861f07113efc5804b4c0a119) Thanks [@&#8203;MattieTK](https://github.com/MattieTK)! - Widen agent Pages-to-Workers delegation to new projects on accounts that already use Pages When run by an AI agent, `wrangler pages deploy` and `wrangler pages project create` now delegate a brand-new static Pages project to a Workers static-assets deploy even when the account already has other Pages projects. The gate is now per-project rather than per-account: a command targeting a project that already exists stays on Pages, but a new project is delegated regardless of the account's other Pages projects. A project name restored from the Pages configuration cache is only used when the cache belongs to the currently authenticated account. An account-matching cached name remains on Pages even when the project is missing remotely, preserving the user's recorded Pages intent. After switching accounts, an otherwise unnamed deploy stays on Pages rather than treating a stale cached project name as a new project on the selected account. ##### Patch Changes - [#&#8203;15560](https://github.com/cloudflare/workers-sdk/pull/15560) [`edb3631`](https://github.com/cloudflare/workers-sdk/commit/edb3631666677b51d58000d23ed693d83da9ff48) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260907.1 | ^5.20260908.1 | | workerd | 1.20260907.1 | 1.20260908.1 | - [#&#8203;15557](https://github.com/cloudflare/workers-sdk/pull/15557) [`63c7ff1`](https://github.com/cloudflare/workers-sdk/commit/63c7ff17b3ac5ca0b977297456fe3bcbe71e90f4) Thanks [@&#8203;tomekancu](https://github.com/tomekancu)! - Fix `wrangler d1 execute --local` being extremely slow with large SQL files or commands The local SQL splitter consumed quoted strings and comments character-by-character, re-checking the full accumulated string each time. This made splitting a large quoted value or comment quadratic, so seed files could take tens of seconds to run. The splitter now only inspects a bounded trailing window on each step, making splitting effectively linear. The remote path is unaffected as it imports the file server-side. - [#&#8203;15542](https://github.com/cloudflare/workers-sdk/pull/15542) [`a4e41df`](https://github.com/cloudflare/workers-sdk/commit/a4e41df43cc93686bf57a16b1de0a4b06860f2b9) Thanks [@&#8203;NAVEENKUMARKR777](https://github.com/NAVEENKUMARKR777)! - Fix `wrangler dev` running the custom build command twice on startup and on every config change Wrangler already runs the custom `build.command` once before starting `wrangler dev`, to resolve the Worker's entry point. When `dev.watch` wasn't explicitly disabled, `BundlerController` then unconditionally ran the same build command again the moment it started watching for changes, and repeated this on every subsequent config reload too. For fast build commands this just meant duplicate log output (e.g. a `vite build` visibly running twice at startup). For slower or stateful build commands, running two builds concurrently against the same output files could corrupt the result or fail outright (for example, non-deterministic `wasm-opt` failures have been reported for Rust builds). The initial watcher setup now only bundles the output the build command already produced, instead of re-running the command. Real file changes detected by the watcher still re-run the build command as before. - Updated dependencies \[[`edb3631`](https://github.com/cloudflare/workers-sdk/commit/edb3631666677b51d58000d23ed693d83da9ff48), [`bcebf08`](https://github.com/cloudflare/workers-sdk/commit/bcebf080bc65759fe43cffff10b3f708693941a8)]: - <miniflare@5.20260908.0-alpha> ### [`v4.129.1`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41291) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.129.0...wrangler@4.129.1) ##### Patch Changes - [#&#8203;15502](https://github.com/cloudflare/workers-sdk/pull/15502) [`8bbcb9f`](https://github.com/cloudflare/workers-sdk/commit/8bbcb9f08bcfaa291c7d28b6884fc88c1264bb84) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260903.1 | ^5.20260904.1 | | workerd | 1.20260903.1 | 1.20260904.1 | - [#&#8203;15543](https://github.com/cloudflare/workers-sdk/pull/15543) [`2b42d6f`](https://github.com/cloudflare/workers-sdk/commit/2b42d6f2b971fa54de0648e8e9bea03cbf6f702a) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260904.1 | ^5.20260907.1 | | workerd | 1.20260904.1 | 1.20260907.1 | - [#&#8203;15323](https://github.com/cloudflare/workers-sdk/pull/15323) [`ea5634e`](https://github.com/cloudflare/workers-sdk/commit/ea5634ee165ae54fbb07dcbd77b50a44b40c71d6) Thanks [@&#8203;Sakshamm-Goyal](https://github.com/Sakshamm-Goyal)! - Prevent Wrangler from exiting when a process capturing its output closes the pipe. Wrangler now ignores broken-pipe errors from stdout and stderr while preserving the existing failure behavior for other output errors. - [#&#8203;14001](https://github.com/cloudflare/workers-sdk/pull/14001) [`c0c6504`](https://github.com/cloudflare/workers-sdk/commit/c0c650424c983c02de8ed008d3de0eb90cdc2396) Thanks [@&#8203;for-the-kidz](https://github.com/for-the-kidz)! - Update bundle size warning thresholds to use uncompressed size instead of gzip size The compressed script size limits (3 MiB free / 10 MiB paid) have been removed server-side in favor of a single 64 MiB uncompressed limit. The bundle size reporter now compares the uncompressed bundle size against this 64 MiB limit for its color-coded warnings, instead of comparing gzip size against the old 3 MiB compressed limit. - [#&#8203;15499](https://github.com/cloudflare/workers-sdk/pull/15499) [`ffc7efd`](https://github.com/cloudflare/workers-sdk/commit/ffc7efdc93b09a6345ecb7073ed56731d439e6fc) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - Honor Workers Builds name overrides in `wrangler preview` Preview commands now target the Worker name supplied by Workers Builds instead of the name in local Wrangler configuration. This prevents preview builds from failing when the two names differ. - [#&#8203;15252](https://github.com/cloudflare/workers-sdk/pull/15252) [`682cd44`](https://github.com/cloudflare/workers-sdk/commit/682cd44fcd18940e143b2c63bb7ebf17f3254531) Thanks [@&#8203;GregoryCollett](https://github.com/GregoryCollett)! - `wrangler dev` no longer exits when a request to your Worker fails transiently Previously, a transient network failure on a single request — most commonly a request arriving just as an idle internal connection was closed, after roughly five seconds without traffic — could take down the whole dev server with an empty `✘ [ERROR]`, leaving the port unbound until restarted. In CI test suites, one such failure caused every remaining test to fail with connection errors. `wrangler dev` now automatically retries the affected request if it is safe to repeat (GET and HEAD requests). If a request still fails, it fails individually — the error is logged with the request method and URL — and the dev server keeps serving. - Updated dependencies \[[`8bbcb9f`](https://github.com/cloudflare/workers-sdk/commit/8bbcb9f08bcfaa291c7d28b6884fc88c1264bb84), [`2b42d6f`](https://github.com/cloudflare/workers-sdk/commit/2b42d6f2b971fa54de0648e8e9bea03cbf6f702a)]: - <miniflare@5.20260907.0-alpha> ### [`v4.129.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41290) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.128.0...wrangler@4.129.0) ##### Minor Changes - [#&#8203;15460](https://github.com/cloudflare/workers-sdk/pull/15460) [`93d72a5`](https://github.com/cloudflare/workers-sdk/commit/93d72a5772cce74d9f5657d6989efe89cc10dfbb) Thanks [@&#8203;QnJ1c2kNCg](https://github.com/QnJ1c2kNCg)! - Support gzip compression for JSON Pipelines sinks Pipelines is in open beta. `wrangler pipelines sinks create` and the interactive setup flow now pass the selected JSON compression to the Pipelines API. JSON sinks accept `uncompressed` or `gzip`, while Parquet retains its existing compression options and `zstd` default. - [#&#8203;15358](https://github.com/cloudflare/workers-sdk/pull/15358) [`d2d8eea`](https://github.com/cloudflare/workers-sdk/commit/d2d8eeaa4c49479c05b351471f870abab7d2c032) Thanks [@&#8203;pombosilva](https://github.com/pombosilva)! - Add a `--json` flag to the `wrangler workflows` commands Every `wrangler workflows` command now accepts `--json`, which emits the raw API payload instead of the human-readable rendering. The formatted output remains the default, so existing usage is unaffected: `wrangler workflows instances list my-workflow --json` The JSON output carries raw values rather than a serialisation of the formatted view: ISO timestamps instead of locale-formatted dates, plain status strings instead of emojified labels, and no presentation-only derived fields. ##### Patch Changes - [#&#8203;15469](https://github.com/cloudflare/workers-sdk/pull/15469) [`d40a634`](https://github.com/cloudflare/workers-sdk/commit/d40a634f970971bbcba01a8ac201fd3526b3e5fe) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260831.1 | ^5.20260902.1 | | workerd | 1.20260831.1 | 1.20260902.1 | - [#&#8203;15481](https://github.com/cloudflare/workers-sdk/pull/15481) [`7c1b2a6`](https://github.com/cloudflare/workers-sdk/commit/7c1b2a600a02a8978d97786af4c7098216c31c4d) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260902.1 | ^5.20260903.1 | | workerd | 1.20260902.1 | 1.20260903.1 | - [#&#8203;15472](https://github.com/cloudflare/workers-sdk/pull/15472) [`f6fb347`](https://github.com/cloudflare/workers-sdk/commit/f6fb347e0cbaa20479468bffa336fe371b7f24cb) Thanks [@&#8203;emily-shen](https://github.com/emily-shen)! - Tolerate missing permissions during `wrangler delete` cleanup checks `wrangler delete` now warns and continues when it cannot inspect Worker dependencies or clean up legacy Workers Sites KV namespaces because of missing permissions. The Worker delete request itself still fails normally if the token cannot delete the Worker. - [#&#8203;15472](https://github.com/cloudflare/workers-sdk/pull/15472) [`f6fb347`](https://github.com/cloudflare/workers-sdk/commit/f6fb347e0cbaa20479468bffa336fe371b7f24cb) Thanks [@&#8203;emily-shen](https://github.com/emily-shen)! - Tolerate missing resource permissions during resource provisioning When Wrangler cannot check whether a bound resource exists because the API returns a 403, it now skips automatic provisioning for that resource type and continues the deploy. The deploy may still fail later if the resource is missing. - [#&#8203;15476](https://github.com/cloudflare/workers-sdk/pull/15476) [`dc24057`](https://github.com/cloudflare/workers-sdk/commit/dc24057e13580a3cd3e3b917b8659ad5c1e85e50) Thanks [@&#8203;christhorwarth](https://github.com/christhorwarth)! - Fix remote development with static assets for API tokens using granular Worker permissions Wrangler now creates Workers.dev preview sessions through the Worker-scoped endpoint and derives the preview hostname from the session response. This avoids requiring account-level Workers subdomain access. - Updated dependencies \[[`00a9f2f`](https://github.com/cloudflare/workers-sdk/commit/00a9f2f87bb1319ed96b41fe5d9be5503445d2c0), [`1dba24a`](https://github.com/cloudflare/workers-sdk/commit/1dba24a1ecf770a98b36c218cb77e26c7701be49), [`d40a634`](https://github.com/cloudflare/workers-sdk/commit/d40a634f970971bbcba01a8ac201fd3526b3e5fe), [`7c1b2a6`](https://github.com/cloudflare/workers-sdk/commit/7c1b2a600a02a8978d97786af4c7098216c31c4d)]: - <miniflare@5.20260903.0-alpha> ### [`v4.128.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41280) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.127.1...wrangler@4.128.0) ##### Minor Changes - [#&#8203;15454](https://github.com/cloudflare/workers-sdk/pull/15454) [`dbbb795`](https://github.com/cloudflare/workers-sdk/commit/dbbb795c47ff663857b605b484c63730e1e3ff45) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Move binding utilities into `@cloudflare/workers-utils` Binding conversion, printing, and local-development validation are now exported from `@cloudflare/workers-utils` so they can be shared by Wrangler, the Cloudflare Vite plugin, and other consumers. The corresponding exports have been removed from `@cloudflare/deploy-helpers`. Consumers should import them directly from `@cloudflare/workers-utils` instead. Wrangler's `unstable_printBindings` API now accepts the bindings and an options object instead of five positional parameters. - [#&#8203;15353](https://github.com/cloudflare/workers-sdk/pull/15353) [`87a7acf`](https://github.com/cloudflare/workers-sdk/commit/87a7acf197629f5bf16bb38a2e411dc6c21339e0) Thanks [@&#8203;pombosilva](https://github.com/pombosilva)! - Add `--date-start` and `--date-end` filters to `wrangler workflows instances list` You can now narrow an instance listing to a creation-time window: `wrangler workflows instances list my-workflow --date-start 2026-01-01 --date-end 2026-01-31` Either flag can be used independently. Both accept an ISO 8601 date or timestamp and are normalised to UTC before being sent, so a date-only value such as `2026-01-01` works as well as a full `2026-01-01T13:00:00Z`. The bounds are inclusive and compose with the existing `--status` filter. - [#&#8203;15379](https://github.com/cloudflare/workers-sdk/pull/15379) [`ea28cc3`](https://github.com/cloudflare/workers-sdk/commit/ea28cc33e5d39031e9bf512e17f3a57cccbd3f46) Thanks [@&#8203;ibbykhazanchi](https://github.com/ibbykhazanchi)! - Add query string redaction to Workers observability configuration Set `observability.redact_query_string` in `wrangler.json` or `observability.redactQueryString` in the experimental `cloudflare.config.ts` format to remove query strings from request URLs in logs and traces. - [#&#8203;14915](https://github.com/cloudflare/workers-sdk/pull/14915) [`707cb6f`](https://github.com/cloudflare/workers-sdk/commit/707cb6f22bd8685bce7d1dfa0b53853057200eee) Thanks [@&#8203;longlho](https://github.com/longlho)! - Include exact raw and gzip-compressed Worker bundle sizes in structured `deploy` and `version-upload` output. ##### Patch Changes - [#&#8203;15436](https://github.com/cloudflare/workers-sdk/pull/15436) [`200780f`](https://github.com/cloudflare/workers-sdk/commit/200780faa81ab5e58bc656e2d21a20fdd3a4b725) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260828.1 | ^5.20260831.1 | | workerd | 1.20260828.1 | 1.20260831.1 | - [#&#8203;15406](https://github.com/cloudflare/workers-sdk/pull/15406) [`b3f2628`](https://github.com/cloudflare/workers-sdk/commit/b3f26289a735279e463fb4802d4a4481cfaaac71) Thanks [@&#8203;james-elicx](https://github.com/james-elicx)! - Reduce the installed bundle sizes of Wrangler and Miniflare Wrangler now resolves bundled workspace dependencies from source during monorepo builds so unused exports can be removed. Miniflare, its shared CLI and container dependencies now use granular `@cloudflare/workers-utils` entry points instead of loading the package barrel, reducing the raw Wrangler and Miniflare artifacts by 6.16 MiB (31.4%) and 1.06 MiB (22.9%) respectively without changing runtime behavior or installed dependencies. - [#&#8203;15398](https://github.com/cloudflare/workers-sdk/pull/15398) [`1809c5e`](https://github.com/cloudflare/workers-sdk/commit/1809c5edadfd4a93e6733dab77ca67305c8d6c97) Thanks [@&#8203;james-elicx](https://github.com/james-elicx)! - Reduce Wrangler's published package size Stop including the unused build metafile in the npm package, reducing its unpacked size by approximately 3.1 MiB. - [#&#8203;15382](https://github.com/cloudflare/workers-sdk/pull/15382) [`b3fb2bf`](https://github.com/cloudflare/workers-sdk/commit/b3fb2bf0d9e43b126738a63ba168ba1e2807e7e8) Thanks [@&#8203;Om-singhaI](https://github.com/Om-singhaI)! - Skip the skills install status lookup when telemetry is disabled Telemetry events include a `currentAgentSkillsInstalled` property, and computing it can query the GitHub API. The lookup used to start before the telemetry permission was checked, so users who opted out via `WRANGLER_SEND_METRICS`, `DO_NOT_TRACK`, or `send_metrics` in their Wrangler config still triggered network requests on behalf of telemetry. The dispatcher now checks the permission first and only performs the lookup when telemetry is enabled. - Updated dependencies \[[`200780f`](https://github.com/cloudflare/workers-sdk/commit/200780faa81ab5e58bc656e2d21a20fdd3a4b725), [`b3f2628`](https://github.com/cloudflare/workers-sdk/commit/b3f26289a735279e463fb4802d4a4481cfaaac71), [`87a7acf`](https://github.com/cloudflare/workers-sdk/commit/87a7acf197629f5bf16bb38a2e411dc6c21339e0)]: - <miniflare@5.20260831.0-alpha> ### [`v4.127.1`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41271) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.127.0...wrangler@4.127.1) ##### Patch Changes - [#&#8203;15383](https://github.com/cloudflare/workers-sdk/pull/15383) [`eb01850`](https://github.com/cloudflare/workers-sdk/commit/eb018505fdd8f721d57da64cd3704e4af5cb7753) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260826.1 | ^5.20260827.1 | | workerd | 1.20260826.1 | 1.20260827.1 | - [#&#8203;15393](https://github.com/cloudflare/workers-sdk/pull/15393) [`e1df91a`](https://github.com/cloudflare/workers-sdk/commit/e1df91a2135c97806152760930fcab0211417bda) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260827.1 | ^5.20260828.1 | | workerd | 1.20260827.1 | 1.20260828.1 | - Updated dependencies \[[`eb01850`](https://github.com/cloudflare/workers-sdk/commit/eb018505fdd8f721d57da64cd3704e4af5cb7753), [`e1df91a`](https://github.com/cloudflare/workers-sdk/commit/e1df91a2135c97806152760930fcab0211417bda), [`b23de74`](https://github.com/cloudflare/workers-sdk/commit/b23de747f6a4e7c19655da3adb10a5da49b8e368), [`015550a`](https://github.com/cloudflare/workers-sdk/commit/015550ac6763430db2132dbc1f412e820ea9f234), [`015550a`](https://github.com/cloudflare/workers-sdk/commit/015550ac6763430db2132dbc1f412e820ea9f234), [`015550a`](https://github.com/cloudflare/workers-sdk/commit/015550ac6763430db2132dbc1f412e820ea9f234), [`3650d29`](https://github.com/cloudflare/workers-sdk/commit/3650d29f1cfcd6db103c25d22819e8fe41d592f3), [`b23de74`](https://github.com/cloudflare/workers-sdk/commit/b23de747f6a4e7c19655da3adb10a5da49b8e368)]: - <miniflare@5.20260828.0-alpha> ### [`v4.127.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41270) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.126.0...wrangler@4.127.0) ##### Minor Changes - [#&#8203;15356](https://github.com/cloudflare/workers-sdk/pull/15356) [`fe265f8`](https://github.com/cloudflare/workers-sdk/commit/fe265f87347ce253ed9ef00302f4cd2cdcb2bb19) Thanks [@&#8203;rubuy-74](https://github.com/rubuy-74)! - Add support for configuring a per-workflow max concurrency limit via `workflows[].concurrency.limit` in your Wrangler config. The limit is the maximum number of Workflow instances that can run concurrently. It is validated as a positive integer and persisted on deploy; the ceiling is enforced server-side. Concurrency is ignored in local development. ```jsonc { "workflows": [ { "binding": "MY_WORKFLOW", "name": "my-workflow", "class_name": "MyWorkflow", "concurrency": { "limit": 10 } } ] } ``` ##### Patch Changes - [#&#8203;15367](https://github.com/cloudflare/workers-sdk/pull/15367) [`412c79e`](https://github.com/cloudflare/workers-sdk/commit/412c79e2735176727bdb2ab108fe581d4c7961d0) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260825.1 | ^5.20260826.1 | | workerd | 1.20260825.1 | 1.20260826.1 | - [#&#8203;15375](https://github.com/cloudflare/workers-sdk/pull/15375) [`92874f6`](https://github.com/cloudflare/workers-sdk/commit/92874f639a197ee62ee6cd2fc508a87acb3ceb00) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - Upload `wrangler preview` modules as multipart form data `wrangler preview` used to base64 the bundle, its modules, and any sourcemaps into a single JSON request body. Base64 inflates content by a third, so a Worker with a large sourcemap could exceed the API request size limit and fail to deploy. The preview deployment request is now `multipart/form-data`. The deployment settings travel in a `metadata` part and each module follows as its own part carrying raw bytes, matching how `wrangler deploy` already uploads a Worker. - Updated dependencies \[[`412c79e`](https://github.com/cloudflare/workers-sdk/commit/412c79e2735176727bdb2ab108fe581d4c7961d0)]: - <miniflare@5.20260826.0-alpha> ### [`v4.126.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41260) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.125.0...wrangler@4.126.0) ##### Minor Changes - [#&#8203;15332](https://github.com/cloudflare/workers-sdk/pull/15332) [`d1cc3af`](https://github.com/cloudflare/workers-sdk/commit/d1cc3af5c485030387aa04a533f256924df1ac64) Thanks [@&#8203;pombosilva](https://github.com/pombosilva)! - Add `default_retention` to Workflow bindings for configuring how long instances are retained Workflow instances are retained for an account-wide default period after they finish. You can now set a per-Workflow default in your Wrangler configuration, applied to instances that do not specify their own retention: ```jsonc { "workflows": [ { "binding": "MY_WORKFLOW", "name": "my-workflow", "class_name": "MyWorkflow", "default_retention": { "success_retention": "3 days", "error_retention": "7 days" } } ] } ``` Each side is optional and accepts either a duration string such as `"3 days"` or a whole number of milliseconds. Durations are interpreted by the Workflows API, which also caps them at your account's retention limit. - [#&#8203;15064](https://github.com/cloudflare/workers-sdk/pull/15064) [`693ca29`](https://github.com/cloudflare/workers-sdk/commit/693ca294baf6419a0c42f267ad28146cd5f43646) Thanks [@&#8203;tpmmorris](https://github.com/tpmmorris)! - Include a chronological list of handler events in email test harness results, so programmatic local email tests can assert the order in which messages are received, forwarded, replied to, or rejected. ```ts const result = await server.getWorker().email({ from: "sender@example.com", to: "inbox@example.com", raw: [ "From: Sender <sender@example.com>", "To: Inbox <inbox@example.com>", "Message-ID: <test@example.com>", "Subject: Test email", "", "Hello from the test harness", ].join("\r\n"), }); expect(result.events).toEqual([ { type: "received", timestamp: expect.any(String) }, { type: "forward", timestamp: expect.any(String), messageId: expect.any(String), }, { type: "reply", timestamp: expect.any(String), messageId: expect.any(String), }, ]); ``` - [#&#8203;15065](https://github.com/cloudflare/workers-sdk/pull/15065) [`ad89456`](https://github.com/cloudflare/workers-sdk/commit/ad894562ce2a0cb5f4a2d540210956e02810a022) Thanks [@&#8203;mtlemilio](https://github.com/mtlemilio)! - Add experimental `wrangler hyperdrive planetscale signature` for provisioning Cloudflare-billed PlanetScale databases `wrangler hyperdrive planetscale signature` prints a signed authorization as JSON, proving to PlanetScale that Cloudflare will be billed for the database you are about to create: ```sh npx wrangler hyperdrive planetscale signature | \ pscale database create <name> \ --org <org> \ --engine postgresql \ --cloudflare-billing @&#8203;- \ --format json ``` `pscale database create` defaults to Vitess, so pass `--engine postgresql` for a Postgres database, and `--format json` is recommended when the output is consumed by an agent. This requires `pscale` v0.313.0 or newer. Wrangler authorizes the Cloudflare billing side only, so your PlanetScale credentials stay between you and `pscale`. The signature is a cryptographically signed token that authorizes creating a database billed to your Cloudflare account. Treat it as a credential and do not share it. Piping it, as above, is recommended over passing it as a command line argument. This command is experimental and its interface may change. - [#&#8203;15134](https://github.com/cloudflare/workers-sdk/pull/15134) [`c66d2d5`](https://github.com/cloudflare/workers-sdk/commit/c66d2d5303393381632d1ec474b8e7622dafe30a) Thanks [@&#8203;gpanders](https://github.com/gpanders)! - Enable FUSE-capable local container development Miniflare now automatically passes the Docker privileges needed for FUSE to local Durable Object containers when using local rootless Docker on Linux with `/dev/fuse` available, or a local Docker engine on macOS or through WSL where Linux containers run in a VM. This applies to Wrangler, the Cloudflare Vite plugin, and direct Miniflare use. - [#&#8203;15326](https://github.com/cloudflare/workers-sdk/pull/15326) [`9fcb1c9`](https://github.com/cloudflare/workers-sdk/commit/9fcb1c9c0a8a0edee04675c4446cd88b34c85b8a) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Record the selected mode in the Build Output Specification top-level `config.json` The mode a build was produced in is now written to `.cloudflare/output/v0/config.json` as a `mode` field, alongside the account and compliance settings. - [#&#8203;14966](https://github.com/cloudflare/workers-sdk/pull/14966) [`a4c3458`](https://github.com/cloudflare/workers-sdk/commit/a4c3458cec77afa31e01d671d6b22ecfcf2c0107) Thanks [@&#8203;yomna-shousha](https://github.com/yomna-shousha)! - Add pull request metadata to `wrangler preview` deployments `wrangler preview` now detects the pull request associated with the current CI run (GitHub Actions, GitLab CI, CircleCI, and a generic `PULL_REQUEST_URL`/`PR_URL`/`CHANGE_URL` fallback) and attaches it, along with the repository URL, to the preview deployment as annotations (`workers/pull_request_number`, `workers/pull_request_url`, `workers/repository_url`). This is best effort: if no pull request can be detected, nothing changes. When a pull request is detected, its URL is now also shown in the `wrangler preview` command output. - [#&#8203;15307](https://github.com/cloudflare/workers-sdk/pull/15307) [`433fa98`](https://github.com/cloudflare/workers-sdk/commit/433fa9846cd0e5c8bf034453b9ec1b834ed90273) Thanks [@&#8203;for-the-kidz](https://github.com/for-the-kidz)! - Add pull request title to `wrangler preview` deployment annotations `wrangler preview` now also detects the title of the pull/merge request associated with the current CI run (GitHub Actions and GitLab CI, plus a generic `PULL_REQUEST_TITLE` fallback) and attaches it to the preview deployment as the `workers/pull_request_title` annotation, alongside the existing pull request number/URL, repository URL, and commit SHA annotations. This is best effort: if no pull request title can be detected, nothing changes. ##### Patch Changes - [#&#8203;15294](https://github.com/cloudflare/workers-sdk/pull/15294) [`4a67a28`](https://github.com/cloudflare/workers-sdk/commit/4a67a2827862a1e09ec341df1930d0a9f88b6fa1) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260820.1 | ^5.20260821.1 | | workerd | 1.20260820.1 | 1.20260821.1 | - [#&#8203;15328](https://github.com/cloudflare/workers-sdk/pull/15328) [`2d78137`](https://github.com/cloudflare/workers-sdk/commit/2d7813781e935b171ace346ce322738f1c4048a3) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260821.1 | ^5.20260823.1 | | workerd | 1.20260821.1 | 1.20260824.1 | - [#&#8203;15346](https://github.com/cloudflare/workers-sdk/pull/15346) [`04e8564`](https://github.com/cloudflare/workers-sdk/commit/04e856464dfaf094e9b622c9bbf92d871b98f9ff) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260823.1 | ^5.20260825.1 | | workerd | 1.20260824.1 | 1.20260825.1 | - [#&#8203;15246](https://github.com/cloudflare/workers-sdk/pull/15246) [`daefb3c`](https://github.com/cloudflare/workers-sdk/commit/daefb3cc0f0b884b8ce82b22ed9b67a9c43919be) Thanks [@&#8203;edmundhung](https://github.com/edmundhung)! - Prepare autoconfig for multiple configuration targets Add target-specific configuration output and command detection while preserving Wrangler's existing setup and deployment behavior. - [#&#8203;15320](https://github.com/cloudflare/workers-sdk/pull/15320) [`c809851`](https://github.com/cloudflare/workers-sdk/commit/c809851f38f0fe4805e876b6c8bfcd6556f49afb) Thanks [@&#8203;Om-singhaI](https://github.com/Om-singhaI)! - Fix `wrangler login --use-keyring` incorrectly reporting that `secret-tool` is missing on Linux Libsecret's `secret-tool` does not support `--version`; it prints usage and exits 2, which Wrangler previously interpreted as unavailable. Wrangler now reports it missing only when launching the executable fails. - [#&#8203;15336](https://github.com/cloudflare/workers-sdk/pull/15336) [`22182da`](https://github.com/cloudflare/workers-sdk/commit/22182daf4de3f5eed77e87a92eed7cde9937e077) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - `[private beta]`: Explain unavailable Preview URLs after `wrangler preview` deployments When a Preview deployment has no active URLs, Wrangler now explains how to enable Preview Deployments on workers.dev or a custom domain. - [#&#8203;15296](https://github.com/cloudflare/workers-sdk/pull/15296) [`d589d30`](https://github.com/cloudflare/workers-sdk/commit/d589d30b567595eacfea50e8810fe67a59b56825) Thanks [@&#8203;MattieTK](https://github.com/MattieTK)! - Stop automatically offering to install Cloudflare skills for new users Wrangler will no longer prompt new users to install Cloudflare skills after commands complete. It will continue to offer updates to skills that Wrangler previously installed. - Updated dependencies \[[`aa54b49`](https://github.com/cloudflare/workers-sdk/commit/aa54b491a42c83d410983197b84088dc5319564c), [`4a67a28`](https://github.com/cloudflare/workers-sdk/commit/4a67a2827862a1e09ec341df1930d0a9f88b6fa1), [`2d78137`](https://github.com/cloudflare/workers-sdk/commit/2d7813781e935b171ace346ce322738f1c4048a3), [`04e8564`](https://github.com/cloudflare/workers-sdk/commit/04e856464dfaf094e9b622c9bbf92d871b98f9ff), [`693ca29`](https://github.com/cloudflare/workers-sdk/commit/693ca294baf6419a0c42f267ad28146cd5f43646), [`693ca29`](https://github.com/cloudflare/workers-sdk/commit/693ca294baf6419a0c42f267ad28146cd5f43646), [`693ca29`](https://github.com/cloudflare/workers-sdk/commit/693ca294baf6419a0c42f267ad28146cd5f43646), [`37ed753`](https://github.com/cloudflare/workers-sdk/commit/37ed753470232676a8f8ba4a424d4f73ac58dc5b), [`f76b68e`](https://github.com/cloudflare/workers-sdk/commit/f76b68efd1f1a148b6d96340f3711d3aed52323a), [`c66d2d5`](https://github.com/cloudflare/workers-sdk/commit/c66d2d5303393381632d1ec474b8e7622dafe30a), [`693ca29`](https://github.com/cloudflare/workers-sdk/commit/693ca294baf6419a0c42f267ad28146cd5f43646), [`74de3ab`](https://github.com/cloudflare/workers-sdk/commit/74de3ab56f0dfabfc09da368f3d19eaf82093d10), [`0cb8690`](https://github.com/cloudflare/workers-sdk/commit/0cb86908903b87a742d1786ac8aa5aa9dce6c575), [`dd5148d`](https://github.com/cloudflare/workers-sdk/commit/dd5148d7da11665ad3f3338de338380ccea979cc), [`82d11fc`](https://github.com/cloudflare/workers-sdk/commit/82d11fca0c826ef54000e5fbe1dc87db73a5ef9c)]: - <miniflare@5.20260825.0-alpha> ### [`v4.125.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41250) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.124.0...wrangler@4.125.0) ##### Minor Changes - [#&#8203;14995](https://github.com/cloudflare/workers-sdk/pull/14995) [`59872c4`](https://github.com/cloudflare/workers-sdk/commit/59872c41d4417d9b8c2efddb4b35662453efcaae) Thanks [@&#8203;ThomasRubini](https://github.com/ThomasRubini)! - Add `connect` trigger for raw sockets You can now configure a Worker to receive raw socket connections during `wrangler dev`, delivered directly to the Worker's `connect(socket, env, ctx)` handler: ```jsonc { "connect": [{ "protocol": "tcp", "port": 5432 }] } ``` Each entry opens a listening socket on `127.0.0.1` (or the given `address`) that forwards incoming connections straight to the Worker, bypassing the local dev HTTP entry point. This requires the `experimental` compatibility flag. Only `"tcp"` is supported at the moment. `@cloudflare/config` also supports declaring this trigger via `triggers.connect(...)`, which lowers to the `connect` field above: ```ts import { defineWorker, triggers } from "@&#8203;cloudflare/config"; export default defineWorker({ triggers: [ triggers.connect({ protocol: "tcp", port: 5432, address: "127.0.0.1" }), ], }); ``` - [#&#8203;15172](https://github.com/cloudflare/workers-sdk/pull/15172) [`c68f9cb`](https://github.com/cloudflare/workers-sdk/commit/c68f9cb866a2eae4416d20f584f733527189f18a) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - Add container support to worker previews Worker previews now support containers through a new `previews.containers` configuration block. Container configuration doesn't inherit, so declare containers explicitly in the `previews` block to enable them for previews. This mirrors how `previews.durable_objects` works today. Wrangler names each preview container application `{worker_name}_{preview_slug}_{class_name}`, normalising and shortening the result to what the API accepts. Either change appends a short digest of the composed name, so two names that would otherwise land on one stay distinct. An entry cannot set its own `name`, because application names are unique to an account and a fixed name would collide between two previews of the same Worker. A Durable Object class is backed by at most one container application, so the validator rejects two entries that share a `class_name`. Wrangler skips container applications bound to Durable Object classes that another Worker implements through `script_name`, because the implementing Worker owns its own container application. A binding is not required: a Durable Object declared through `migrations` or `exports` and reached only over `ctx.exports` can still back a container. Every entry must set `class_name`. A `previews.containers` entry whose `class_name` matches no Durable Object class at all is rejected before the preview deployment is created, so a typo fails loudly instead of producing a preview with no container. Wrangler creates the container applications on `wrangler preview`. Deleting a preview tears them down server side, so `wrangler preview delete` doesn't remove them. Container build and deploy progress prints to stdout. `wrangler preview --json` suppresses wrangler's own output so it doesn't interleave with the payload, and warnings and errors still go to stderr. Docker's build output and the progress spinner write to stdout directly and bypass that suppression, so parse `--json` from a non interactive shell, where the spinner is skipped, and prefer a prebuilt `image` over a Dockerfile. - [#&#8203;15174](https://github.com/cloudflare/workers-sdk/pull/15174) [`649f667`](https://github.com/cloudflare/workers-sdk/commit/649f667bd871061da945881ce953ef8f81caea1a) Thanks [@&#8203;WillTaylorDev](https://github.com/WillTaylorDev)! - \[private beta]: Create the parent Worker automatically when `wrangler preview` targets one that doesn't exist yet Previews hang off a parent Worker, so running `wrangler preview` before the Worker had ever been deployed failed with a raw API error naming the Preview endpoint. Wrangler now offers to create an empty parent Worker and then carries on creating the Preview. The parent uses the same workers.dev and Preview URL settings that `wrangler deploy` would resolve, without applying routes or cron triggers. In non-interactive environments, Wrangler creates the Worker without asking. - [#&#8203;14735](https://github.com/cloudflare/workers-sdk/pull/14735) [`30c2d47`](https://github.com/cloudflare/workers-sdk/commit/30c2d47965c51350aca6b2c70db8fc6496bdaa17) Thanks [@&#8203;vaishnav-mk](https://github.com/vaishnav-mk)! - Add individual and batch Workflow instance deletion to the runtime and SDK. - `WorkflowInstance.delete()` deletes one instance. Self-deletion stops the current execution. - `env.MY_WORKFLOW.deleteBatch(instanceIds)` deletes up to 100 instances and returns `{ deleted, errors }` per input position. - `wrangler workflows instances delete <name> [id..]` deletes instances remotely or with `--local`; IDs can also come from a JSON array passed with `--filename`, with a combined limit of 100. ##### Patch Changes - [#&#8203;15260](https://github.com/cloudflare/workers-sdk/pull/15260) [`5ae9d5b`](https://github.com/cloudflare/workers-sdk/commit/5ae9d5b205fea31516559f7ad89a21eda671af2f) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260815.1 | ^5.20260816.1 | | workerd | 1.20260815.1 | 1.20260816.1 | - [#&#8203;15264](https://github.com/cloudflare/workers-sdk/pull/15264) [`4b52975`](https://github.com/cloudflare/workers-sdk/commit/4b52975aac295c8483d6b4001d0b50945293265a) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260816.1 | ^5.20260819.1 | | workerd | 1.20260816.1 | 1.20260819.1 | - [#&#8203;15277](https://github.com/cloudflare/workers-sdk/pull/15277) [`ce9b151`](https://github.com/cloudflare/workers-sdk/commit/ce9b1510abf5c1152aedc94456f4d7ffe9402248) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260819.1 | ^5.20260820.1 | | workerd | 1.20260819.1 | 1.20260820.1 | - [#&#8203;15192](https://github.com/cloudflare/workers-sdk/pull/15192) [`ef73a28`](https://github.com/cloudflare/workers-sdk/commit/ef73a28c1e7a208d730c6de64566bc96f683ca7b) Thanks [@&#8203;ondraulehla](https://github.com/ondraulehla)! - Fixes `kv bulk put` corrupting binary values written to local KV Values marked `base64: true` were stored incorrectly whenever they contained bytes that do not form valid UTF-8, which covers images, compressed data and most other binary payloads. A Worker reading such a key back under `wrangler dev` got a different, longer value than the one that was written: a 12 byte PNG header came back as 20 bytes. `kv bulk put` writes to local KV by default, so the plain command was the affected one. Remote writes were never affected, and neither were entries without `base64` or values written with `kv key put`. - [#&#8203;15284](https://github.com/cloudflare/workers-sdk/pull/15284) [`39dcea6`](https://github.com/cloudflare/workers-sdk/commit/39dcea6c9362e2d651e3108fa769dbbc32db5a7b) Thanks [@&#8203;emily-shen](https://github.com/emily-shen)! - Move deploy output writing into shared deploy helpers - [#&#8203;15130](https://github.com/cloudflare/workers-sdk/pull/15130) [`99a1f49`](https://github.com/cloudflare/workers-sdk/commit/99a1f49d7c037a25d4a19a3fe3054337e7201864) Thanks [@&#8203;emily-shen](https://github.com/emily-shen)! - Remove unsupported `remote` configuration from Workflow bindings Workflow bindings no longer accept `remote` in configuration, as remote Workflow bindings have never actually been supported. - [#&#8203;15278](https://github.com/cloudflare/workers-sdk/pull/15278) [`f2437e6`](https://github.com/cloudflare/workers-sdk/commit/f2437e606fc69891009285831d94b49bf44f6aff) Thanks [@&#8203;Sosokker](https://github.com/Sosokker)! - Fix the `--temporary` error on commands that authenticate more than one time `wrangler d1 migrations apply --remote --temporary` failed with this error: `You're already authenticated with Cloudflare, so --temporary can't be used`. The failure occurred with no login and with no `CLOUDFLARE_API_TOKEN`. This command authenticates one time for each statement that it runs. The first authentication makes a temporary preview account. The second authentication read the token of this new account as an earlier login. Wrangler now uses again the temporary account from the same command run. Commands that authenticate more than one time now work as `wrangler deploy --temporary` works. If real credentials are available, `--temporary` is still an error. - Updated dependencies \[[`59872c4`](https://github.com/cloudflare/workers-sdk/commit/59872c41d4417d9b8c2efddb4b35662453efcaae), [`99a1f49`](https://github.com/cloudflare/workers-sdk/commit/99a1f49d7c037a25d4a19a3fe3054337e7201864), [`5ae9d5b`](https://github.com/cloudflare/workers-sdk/commit/5ae9d5b205fea31516559f7ad89a21eda671af2f), [`4b52975`](https://github.com/cloudflare/workers-sdk/commit/4b52975aac295c8483d6b4001d0b50945293265a), [`ce9b151`](https://github.com/cloudflare/workers-sdk/commit/ce9b1510abf5c1152aedc94456f4d7ffe9402248), [`99a1f49`](https://github.com/cloudflare/workers-sdk/commit/99a1f49d7c037a25d4a19a3fe3054337e7201864), [`99a1f49`](https://github.com/cloudflare/workers-sdk/commit/99a1f49d7c037a25d4a19a3fe3054337e7201864), [`30c2d47`](https://github.com/cloudflare/workers-sdk/commit/30c2d47965c51350aca6b2c70db8fc6496bdaa17)]: - <miniflare@5.20260820.0-alpha> ### [`v4.124.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41240) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.123.0...wrangler@4.124.0) ##### Minor Changes - [#&#8203;15026](https://github.com/cloudflare/workers-sdk/pull/15026) [`6529f0c`](https://github.com/cloudflare/workers-sdk/commit/6529f0ca5ecda93f67efbaa72a7f9a9f8fd814bf) Thanks [@&#8203;petebacondarwin](https://github.com/petebacondarwin)! - Allow containers to be attached to a Durable Object from its `exports` entry A container can now be linked to its Durable Object from the export side, using a new `container` field that names an entry in the `containers` array. As a result `containers[].class_name` is now optional — a container that is referenced this way only needs a `name`: ```jsonc { "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_name` direction 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. `container` is only valid on live `durable-object` exports (`created` and `expecting-transfer`) and requires `storage: "sqlite"`. Wrangler now also reports an error when: - a `container` reference 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_name` names a Durable Object whose `storage` is `legacy-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. ##### Patch Changes - [#&#8203;15211](https://github.com/cloudflare/workers-sdk/pull/15211) [`bc5726b`](https://github.com/cloudflare/workers-sdk/commit/bc5726bd0b88856f6781c62b4cb3c9c47b84eb07) Thanks [@&#8203;nithin42](https://github.com/nithin42)! - Honor `access.dev` when running Workers with `@cloudflare/vitest-pool-workers`, so `ctx.access.getIdentity()` returns the configured identity just as it does with `wrangler dev`. - [#&#8203;14999](https://github.com/cloudflare/workers-sdk/pull/14999) [`ba54f0d`](https://github.com/cloudflare/workers-sdk/commit/ba54f0d39d1ba7eb5545d8bf9ba43624cfa211f9) Thanks [@&#8203;mittalpk](https://github.com/mittalpk)! - Fix `.env` loading on Windows leaking stale, differently-cased duplicate keys On Windows, `wrangler` loads `.env` values through a case-insensitive `Proxy` wrapper so lookups like `env.PATH` and `env.Path` resolve to the same value, and this object is assigned directly to `process.env`. When a key was set again under a different casing (e.g. a value in `.env.local` overriding one from `.env` with different casing), the previous casing was never removed from the underlying object. `env.PATH`/`env.Path` still returned the correct, latest value, but anything that enumerates `process.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. - [#&#8203;15044](https://github.com/cloudflare/workers-sdk/pull/15044) [`b7422b0`](https://github.com/cloudflare/workers-sdk/commit/b7422b0a8a2e74bba068a1924992dcfeff0bd126) Thanks [@&#8203;stareezy-1](https://github.com/stareezy-1)! - Normalize structural CRLF line endings before sending D1 commands to the remote query API `wrangler d1 migrations apply --remote` and `wrangler d1 execute --remote --command` failed with `incomplete input: SQLITE_ERROR` when the SQL contained CRLF line endings inside a compound statement such as a `CREATE 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. - [#&#8203;15046](https://github.com/cloudflare/workers-sdk/pull/15046) [`186339c`](https://github.com/cloudflare/workers-sdk/commit/186339cf854cf3522614fb686ec66e6682c569b8) Thanks [@&#8203;erwinzhang7](https://github.com/erwinzhang7)! - Fixes D1 SQL statements not handling lowercase `end`s correctly `wrangler d1 execute` and `wrangler d1 migrations apply` split a SQL file into statements before running them. A `BEGIN` or `CASE` block closed with a lowercase `end` was 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: ```sql 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 `END` were unaffected. Both cases now behave the same. - [#&#8203;15231](https://github.com/cloudflare/workers-sdk/pull/15231) [`4f922dc`](https://github.com/cloudflare/workers-sdk/commit/4f922dc19941db31394357f7e146af320ae1f3d9) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260811.1 | ^5.20260814.1 | | workerd | 1.20260811.1 | 1.20260814.1 | - [#&#8203;15248](https://github.com/cloudflare/workers-sdk/pull/15248) [`4d74b8d`](https://github.com/cloudflare/workers-sdk/commit/4d74b8d8fd5c034c012fa13973ee20bedbc844c7) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260814.1 | ^5.20260815.1 | | workerd | 1.20260814.1 | 1.20260815.1 | - [#&#8203;15185](https://github.com/cloudflare/workers-sdk/pull/15185) [`1f79ace`](https://github.com/cloudflare/workers-sdk/commit/1f79ace67a81633e34dae47a666468fcdaf93f41) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Resolve `--latest` to the newest compatibility date supported by the installed runtime `wrangler deploy --latest` and `wrangler versions upload --latest` resolved the compatibility date to the current date, and `wrangler pages download config` did 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 installed `workerd` did not yet support left the project unable to run `wrangler dev`. These now resolve to the latest compatibility date supported by this version of Wrangler, which is the release date of the `workerd` it ships with. - [#&#8203;15151](https://github.com/cloudflare/workers-sdk/pull/15151) [`49f73de`](https://github.com/cloudflare/workers-sdk/commit/49f73de207124171b3f8e9ffb182facb48727388) Thanks [@&#8203;maximilliangrand](https://github.com/maximilliangrand)! - Fix spurious `Trailing comma jsonc(519)` warnings for `wrangler.jsonc` in VS Code 1.131+ Trailing commas in `wrangler.jsonc` files 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. - [#&#8203;14983](https://github.com/cloudflare/workers-sdk/pull/14983) [`7cee278`](https://github.com/cloudflare/workers-sdk/commit/7cee2784a937c86db6a88455c6efe8e8660ae69c) Thanks [@&#8203;kdelay](https://github.com/kdelay)! - Respect `CLOUDFLARE_ACCOUNT_ID` in `wrangler pages project list`, `create` and `delete` These three commands could target a previously used account even when `CLOUDFLARE_ACCOUNT_ID` was set, failing with `Authentication error [code: 10000]` in setups with more than one account. They now use the account named by `CLOUDFLARE_ACCOUNT_ID`, matching the rest of `wrangler pages`. When the variable is unset, the previously used account is still selected, as before. - [#&#8203;15153](https://github.com/cloudflare/workers-sdk/pull/15153) [`265256a`](https://github.com/cloudflare/workers-sdk/commit/265256a5619fbf82e12473f7bb7c7944bdd368b4) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Fix `wrangler preview base-config` commands showing an inherited `script` positional - [#&#8203;15185](https://github.com/cloudflare/workers-sdk/pull/15185) [`1f79ace`](https://github.com/cloudflare/workers-sdk/commit/1f79ace67a81633e34dae47a666468fcdaf93f41) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Use a fixed default compatibility date rather than the current date When no compatibility date was set, Wrangler, C3 and the Vitest pool all defaulted to the current date. `workerd` only accepts a compatibility date up to 7 days beyond its own release, so whenever a `workerd` release 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 `workerd` version that ships with each release, which leaves a week of headroom and updates as `workerd` is upgraded. `@cloudflare/vite-plugin` previously inlined the date at which it was built. It now shares the same default. - [#&#8203;15239](https://github.com/cloudflare/workers-sdk/pull/15239) [`f431166`](https://github.com/cloudflare/workers-sdk/commit/f43116682a2a08d47383be1125fd6f0b4ae3a0cc) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Prevent date-enabled Node.js compatibility from adding conflicting globals to generated runtime types Runtime type generation now treats Node.js compatibility enabled by a compatibility date the same way as an explicit `nodejs_compat` flag. Node.js globals continue to come from `@types/node` instead of being generated as `any` declarations that override those types. - [#&#8203;15196](https://github.com/cloudflare/workers-sdk/pull/15196) [`8fb2b87`](https://github.com/cloudflare/workers-sdk/commit/8fb2b8760b9ba23d1584156d25c02ca2db8d2d80) Thanks [@&#8203;skepticfx](https://github.com/skepticfx)! - Use the FedRAMP High managed container registry when Wrangler targets the FedRAMP High compliance region Container builds, pushes, deployments, image commands, and local development now select the corresponding production or staging FedRAMP registry and API from either `compliance_region` or `CLOUDFLARE_COMPLIANCE_REGION`. - [#&#8203;15082](https://github.com/cloudflare/workers-sdk/pull/15082) [`75cf407`](https://github.com/cloudflare/workers-sdk/commit/75cf407fc0d7fa6f4d4d9848a9221e7b16930497) Thanks [@&#8203;penalosa](https://github.com/penalosa)! - Enable the new configuration format in the `cf-wrangler` dev delegate Projects started through `cf dev` now load `cloudflare.config.ts` and optional `wrangler.config.ts`, matching the configuration used by the delegate's build path. - Updated dependencies \[[`1277a72`](https://github.com/cloudflare/workers-sdk/commit/1277a72e0d01325c37a05c0e8f5111a45100af77), [`4f922dc`](https://github.com/cloudflare/workers-sdk/commit/4f922dc19941db31394357f7e146af320ae1f3d9), [`4d74b8d`](https://github.com/cloudflare/workers-sdk/commit/4d74b8d8fd5c034c012fa13973ee20bedbc844c7), [`2e0c962`](https://github.com/cloudflare/workers-sdk/commit/2e0c962da0c57bdc79b5edcaa64c7b725c1524f0), [`8777180`](https://github.com/cloudflare/workers-sdk/commit/8777180b8239d9df435acee465d02682477e93ea)]: - <miniflare@5.20260815.0-alpha> ### [`v4.123.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41230) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.122.0...wrangler@4.123.0) ##### Minor Changes - [#&#8203;15113](https://github.com/cloudflare/workers-sdk/pull/15113) [`b8fd112`](https://github.com/cloudflare/workers-sdk/commit/b8fd112136abf4ff17c3d456eaa7b22880bcaf6a) Thanks [@&#8203;BSFishy](https://github.com/BSFishy)! - Add local dev simulation for Cloudflare Access `ctx.access.getIdentity()` You can now configure a mock Cloudflare Access identity in `wrangler.json` so that `ctx.access.getIdentity()` returns it during local development. ```jsonc // wrangler.json { "access": { "dev": { "aud": "my-app-aud-tag", "identity": { "email": "user@example.com", "name": "Test User" } } } } ``` - [#&#8203;15152](https://github.com/cloudflare/workers-sdk/pull/15152) [`f0f2054`](https://github.com/cloudflare/workers-sdk/commit/f0f2054a48f5b7536268e8be432148943ba73557) Thanks [@&#8203;GregBrimble](https://github.com/GregBrimble)! - \[private beta]: Updates the `--ignore-defaults` flag to `--ignore-base-config` on `wrangler preview` commands. `--ignore-base-config` now only takes effect on Preview creation, rather than on each deployment, since Preview base configuration is now copy-on-create rather than inherit-on-deploy. - [#&#8203;14872](https://github.com/cloudflare/workers-sdk/pull/14872) [`339509d`](https://github.com/cloudflare/workers-sdk/commit/339509dbe142901a140866ace4fb81e3dab299ba) Thanks [@&#8203;dario-piotrowicz](https://github.com/dario-piotrowicz)! - Add automatic update prompts for out-of-date Cloudflare agent skills When Cloudflare skills were previously installed by Wrangler and the upstream `cloudflare/skills` repository has newer content, Wrangler now offers to update them after eligible commands complete. To reduce prompt fatigue, the update check only runs once a month (30 days since the last install or update). Declining suppresses the prompt until the next upstream change. When declining an update, Wrangler offers the option to permanently disable future update prompts. This preference is stored globally in `~/.wrangler/agents-skills-install.jsonc`. The `WRANGLER_NO_SKILLS_UPDATE_PROMPTS=true` environment variable can also be used to suppress prompts. The `--install-skills` flag remains available regardless of these settings. ##### Patch Changes - Updated dependencies \[[`b8fd112`](https://github.com/cloudflare/workers-sdk/commit/b8fd112136abf4ff17c3d456eaa7b22880bcaf6a)]: - <miniflare@5.20260811.1-alpha> ### [`v4.122.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41220) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.121.0...wrangler@4.122.0) ##### Minor Changes - [#&#8203;15123](https://github.com/cloudflare/workers-sdk/pull/15123) [`d0c976c`](https://github.com/cloudflare/workers-sdk/commit/d0c976c04ad890fcef56305ded11f1405e89273e) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Detect Node.js compatibility from the compatibility date, now that `nodejs_compat` is enabled by default As of compatibility date `2026-08-04`, workerd enables the `nodejs_compat` and `nodejs_compat_v2` compatibility flags by default. Previously these tools only treated Node.js compatibility as enabled when one of those flags was listed explicitly, so a Worker on a compatibility date of `2026-08-04` or later without the flag would get Node.js APIs from the runtime but no Node.js polyfills from the bundler, and `process.env` could be substituted with an empty object at build time. They now resolve these flags the same way workerd does, and honour `no_nodejs_compat` to opt out. To keep Node.js compatibility switched off on a newer compatibility date, specify both `no_nodejs_compat` and `no_nodejs_compat_v2`, since each flag has its own default. `@cloudflare/vitest-pool-workers` needs `nodejs_compat_v2` for its own test runner, so it continues to override a project that opts out of it. On a compatibility date that enables the flag anyway, it now drops the opt-out rather than adding the flag back, which workerd would reject — previously this stopped such a project from running any tests at all. `wrangler types` also no longer attributes its `@types/node` suggestion to "the `nodejs_compat` flag", which it can now make for Workers that do not set the flag at all. ##### Patch Changes - [#&#8203;15123](https://github.com/cloudflare/workers-sdk/pull/15123) [`d0c976c`](https://github.com/cloudflare/workers-sdk/commit/d0c976c04ad890fcef56305ded11f1405e89273e) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260804.1 | ^5.20260811.1 | | workerd | 1.20260804.1 | 1.20260811.1 | - [#&#8203;15148](https://github.com/cloudflare/workers-sdk/pull/15148) [`0b82b15`](https://github.com/cloudflare/workers-sdk/commit/0b82b1574b3327681a0091716ed274c8f0544a48) Thanks [@&#8203;jamesopstad](https://github.com/jamesopstad)! - Ignore a `nodejs_compat` compatibility flag that the compatibility date already enables workerd rejects a compatibility flag that its compatibility date enables by default, so a Worker configured with both a compatibility date of `2026-08-04` or later **and** `nodejs_compat` failed to start locally with "The compatibility flag nodejs\_compat became the default as of 2026-08-04 so does not need to be specified anymore". The redundant `nodejs_compat` and `nodejs_compat_v2` flags are now dropped when starting the runtime, which has no effect on the resulting Worker because the compatibility date enables both anyway. `no_nodejs_compat` and `no_nodejs_compat_v2` still switch Node.js compatibility off, and a flag specified alongside its own opt-out is left alone so that workerd still reports those as contradictory. - [#&#8203;15123](https://github.com/cloudflare/workers-sdk/pull/15123) [`d0c976c`](https://github.com/cloudflare/workers-sdk/commit/d0c976c04ad890fcef56305ded11f1405e89273e) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Stop adding a redundant `nodejs_compat` flag to generated Wrangler configurations `create-cloudflare` and `wrangler setup` write today's date as the `compatibility_date`, and from `2026-08-04` that already enables `nodejs_compat`. Adding the flag as well made the generated project fail to start with "The compatibility flag nodejs\_compat became the default as of 2026-08-04 so does not need to be specified anymore", so the flag is now only added for earlier compatibility dates. `create-cloudflare` also removes the flag when a template, or a framework's own scaffolder, already wrote it into a configuration that ends up using such a compatibility date, and still installs `@types/node` for these projects even though there is no longer a flag to detect them by. `wrangler setup` does the same for a `wrangler.json(c)` that is already in the project: it writes today's date over whatever date that configuration was written for, so a `nodejs_compat` it finds there is removed as part of writing the file. - [#&#8203;15142](https://github.com/cloudflare/workers-sdk/pull/15142) [`3b02915`](https://github.com/cloudflare/workers-sdk/commit/3b029154fae5b69d6f32e61dea22171412b4269f) Thanks [@&#8203;penalosa](https://github.com/penalosa)! - Fix remote binding sessions reusing stale binding configurations Starting a new remote bindings session that reuses a Worker name no longer picks up the bindings from a previous session, which could cause `Binding "..." not found` errors. - Updated dependencies \[[`d0c976c`](https://github.com/cloudflare/workers-sdk/commit/d0c976c04ad890fcef56305ded11f1405e89273e), [`d0c976c`](https://github.com/cloudflare/workers-sdk/commit/d0c976c04ad890fcef56305ded11f1405e89273e), [`0b82b15`](https://github.com/cloudflare/workers-sdk/commit/0b82b1574b3327681a0091716ed274c8f0544a48), [`d0c976c`](https://github.com/cloudflare/workers-sdk/commit/d0c976c04ad890fcef56305ded11f1405e89273e), [`90dd5e5`](https://github.com/cloudflare/workers-sdk/commit/90dd5e597e3eeeb2ec17636386b75fea770cedc9)]: - <miniflare@5.20260811.0-alpha> ### [`v4.121.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41210) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.120.1...wrangler@4.121.0) ##### Minor Changes - [#&#8203;15079](https://github.com/cloudflare/workers-sdk/pull/15079) [`15cad03`](https://github.com/cloudflare/workers-sdk/commit/15cad038313b9dd0ecdc23888e595440a33e845b) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Add Preview base config secret commands Wrangler now manages Worker Preview base config secrets with `wrangler preview base-config secret put`, `delete`, `list`, and `bulk`. These commands update the Worker's `previews_base_config.env`, keeping shared defaults scoped to all of that Worker's Previews. `wrangler preview base-config secret list` reads from the Worker's Preview base config and prints secret names with values masked. `wrangler preview base-config secret bulk` deletes a secret when its value is `null`, matching `wrangler secret bulk`. - [#&#8203;15000](https://github.com/cloudflare/workers-sdk/pull/15000) [`731b33a`](https://github.com/cloudflare/workers-sdk/commit/731b33a9059cbdc1e115ad3d6ed66fc1f38ce0e4) Thanks [@&#8203;edmundhung](https://github.com/edmundhung)! - Allow Wrangler projects to build a Worker once and reuse it in `createTestHarness()` Build the Worker once: ```sh wrangler deploy --dry-run --outdir ./worker-output ``` Then reuse the emitted Worker during test harness startup and reset: ```ts const server = createTestHarness({ workers: [ { configPath: "./wrangler.jsonc", prebuiltWorkerDir: "./worker-output", }, ], }); ``` - [#&#8203;14737](https://github.com/cloudflare/workers-sdk/pull/14737) [`e1b5b4b`](https://github.com/cloudflare/workers-sdk/commit/e1b5b4bd5b72df396d6d9a27aa0f290dfa11a06c) Thanks [@&#8203;ttoino](https://github.com/ttoino)! - Add `email.sending` as an event subscription source for queues `wrangler queues subscription create` now accepts `--source email.sending` alongside two new flags, `--zone-id` and `--domain`, which identify the zone and the sending domain (zone apex or a verified subdomain) to subscribe to. Both flags are required for this source. The subscription's resource is displayed as the sending domain in `wrangler queues subscription get`. - [#&#8203;15073](https://github.com/cloudflare/workers-sdk/pull/15073) [`d669088`](https://github.com/cloudflare/workers-sdk/commit/d6690886c3b65d59b09b4c01c1505d2e51ac0e07) Thanks [@&#8203;FlorentCollin](https://github.com/FlorentCollin)! - Add US jurisdiction support to `wrangler d1 create` You can now create a D1 database in the US jurisdiction with `wrangler d1 create <name> --jurisdiction us`. The new jurisdiction is also listed in the command's help output. - [#&#8203;15079](https://github.com/cloudflare/workers-sdk/pull/15079) [`15cad03`](https://github.com/cloudflare/workers-sdk/commit/15cad038313b9dd0ecdc23888e595440a33e845b) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Use Preview deployment PATCH APIs for Preview secret commands Wrangler now updates Worker Preview secrets by patching the named Preview's latest deployment instead of patching the Worker's Previews settings. This keeps secret changes scoped to one Preview, avoids affecting production or other Previews, and creates a new Preview deployment that goes live at 100% immediately. `wrangler preview secret list` now reads from the named Preview's latest deployment and prints secret names with values masked. `wrangler preview secret bulk` now deletes a secret when its value is `null`, matching `wrangler secret bulk`. - [#&#8203;14924](https://github.com/cloudflare/workers-sdk/pull/14924) [`0aa8fa5`](https://github.com/cloudflare/workers-sdk/commit/0aa8fa5e12bc64facb4e9fece321a762269d0357) Thanks [@&#8203;ariesclark](https://github.com/ariesclark)! - Honor `DO_NOT_TRACK=1` as a telemetry opt-out Wrangler now disables telemetry when `DO_NOT_TRACK=1` is set, regardless of other telemetry settings. ##### Patch Changes - [#&#8203;15081](https://github.com/cloudflare/workers-sdk/pull/15081) [`026e058`](https://github.com/cloudflare/workers-sdk/commit/026e058ff694a77d3d214611bef7c3e41d1fe082) Thanks [@&#8203;podonnell-dev](https://github.com/podonnell-dev)! - Compact `wrangler preview` deployment success output `wrangler preview` now prints a concise success summary with the Preview name, Preview URL, deployment ID, and Deployment URL instead of the previous box-art settings summary. - [#&#8203;15132](https://github.com/cloudflare/workers-sdk/pull/15132) [`5b1b930`](https://github.com/cloudflare/workers-sdk/commit/5b1b93025f7d71c1b4b99abd90d2dc579c149ae5) Thanks [@&#8203;dario-piotrowicz](https://github.com/dario-piotrowicz)! - Fetch script metadata directly instead of listing all scripts When resolving Durable Object migrations, fetch the specific script's service metadata via `/workers/services/{name}` instead of listing all scripts in the account via `/workers/scripts`. This avoids downloading metadata for every Worker in the account just to find one script's migration tag. - [#&#8203;15032](https://github.com/cloudflare/workers-sdk/pull/15032) [`6e7d37d`](https://github.com/cloudflare/workers-sdk/commit/6e7d37dc3ed2a44aea83ecc6992cca858a7b957b) Thanks [@&#8203;Sertug17](https://github.com/Sertug17)! - Fix `wrangler dev` commands crashing with `No such module "wrangler:modules-watch"` when `"no_bundle": true` Running `wrangler dev` or `wrangler pages dev` with bundling disabled (`"no_bundle": true` in `wrangler.json`, or the `--no-bundle` flag) no longer crashes at startup with `Uncaught Error: No such module "wrangler:modules-watch"`. Live reloading on file changes continues to work as before. - Updated dependencies \[[`c7aede7`](https://github.com/cloudflare/workers-sdk/commit/c7aede764b601d1b73aa208f6a6ff63f646f4136)]: - <miniflare@5.20260804.1-alpha> ### [`v4.120.1`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41201) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.120.0...wrangler@4.120.1) ##### Patch Changes - [#&#8203;15072](https://github.com/cloudflare/workers-sdk/pull/15072) [`6dbd192`](https://github.com/cloudflare/workers-sdk/commit/6dbd192f1f3e4899789cd327231ba838c90bb0d5) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260801.1 | ^5.20260804.1 | | workerd | 1.20260801.1 | 1.20260804.1 | - [#&#8203;14994](https://github.com/cloudflare/workers-sdk/pull/14994) [`2194f88`](https://github.com/cloudflare/workers-sdk/commit/2194f888e53a987ee12c75f1f58f5af287e3c8a3) Thanks [@&#8203;emily-shen](https://github.com/emily-shen)! - Update local development for Miniflare's config-based options Wrangler now converts the Miniflare options it creates for local development to Miniflare's config-based `workers` shape. Users should not expect to notice any changes. - Updated dependencies \[[`6dbd192`](https://github.com/cloudflare/workers-sdk/commit/6dbd192f1f3e4899789cd327231ba838c90bb0d5), [`2194f88`](https://github.com/cloudflare/workers-sdk/commit/2194f888e53a987ee12c75f1f58f5af287e3c8a3), [`2194f88`](https://github.com/cloudflare/workers-sdk/commit/2194f888e53a987ee12c75f1f58f5af287e3c8a3), [`2194f88`](https://github.com/cloudflare/workers-sdk/commit/2194f888e53a987ee12c75f1f58f5af287e3c8a3), [`2194f88`](https://github.com/cloudflare/workers-sdk/commit/2194f888e53a987ee12c75f1f58f5af287e3c8a3), [`2194f88`](https://github.com/cloudflare/workers-sdk/commit/2194f888e53a987ee12c75f1f58f5af287e3c8a3), [`2194f88`](https://github.com/cloudflare/workers-sdk/commit/2194f888e53a987ee12c75f1f58f5af287e3c8a3)]: - <miniflare@5.20260804.0-alpha> ### [`v4.120.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41200) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.119.0...wrangler@4.120.0) ##### Minor Changes - [#&#8203;15008](https://github.com/cloudflare/workers-sdk/pull/15008) [`35c87e9`](https://github.com/cloudflare/workers-sdk/commit/35c87e97199fb4548d4d9aaac024c3e07be5734e) Thanks [@&#8203;skepticfx](https://github.com/skepticfx)! - Adds the ability to find container instances by exact ID or name `wrangler containers instances <application_id> --search <instance_id_or_name>` now searches every page and returns exact matches in human-readable or JSON output. JSON returns a top-level array, including an empty array when there is no match, while human-readable output prints a no-match message. If multiple instances have the same exact name, every matching instance is returned. - [#&#8203;15008](https://github.com/cloudflare/workers-sdk/pull/15008) [`35c87e9`](https://github.com/cloudflare/workers-sdk/commit/35c87e97199fb4548d4d9aaac024c3e07be5734e) Thanks [@&#8203;skepticfx](https://github.com/skepticfx)! - Add explicit pagination to container instance JSON output Use `wrangler containers instances <application_id> --json --per-page <size>` to return one page with machine-readable `result_info`, then pass its `next_page_token` to `--page-token` to retrieve the next page. Plain `--json` remains backward-compatible: it requests the complete list and returns the existing top-level array. ##### Patch Changes - [#&#8203;15013](https://github.com/cloudflare/workers-sdk/pull/15013) [`8cf78c8`](https://github.com/cloudflare/workers-sdk/commit/8cf78c83cb4c64be8b458d7bd618b47e7c6e7d25) Thanks [@&#8203;dario-piotrowicz](https://github.com/dario-piotrowicz)! - Update undici from 7.28.0 to 7.29.0 - [#&#8203;15015](https://github.com/cloudflare/workers-sdk/pull/15015) [`a60ff4d`](https://github.com/cloudflare/workers-sdk/commit/a60ff4dea0bbae8775726d9cf885655b56460a30) Thanks [@&#8203;nickpatt](https://github.com/nickpatt)! - Cut the per-request cost of local observability capture Every tail event was written to the trace store as its own Durable Object call, so a request paid two or three round-trips per span. On a module-heavy app under the Vite plugin that dominated dev request latency. Rows are now buffered and written in batches, taking a request from roughly thirty calls to three. Work in progress still shows up as it happens: the root span is written immediately, console logs and exceptions as they arrive, and a span's completion is written on the next event once 100ms has passed. An invocation that goes completely quiet writes nothing further until it ends, since the flush is driven by tail events rather than a timer. The Vite plugin's own router, asset and proxy workers are also no longer captured. Their traces were noise the Observability views already hid, and skipping them cuts the spans recorded per request — a side benefit being that a trace's root is now your Worker rather than `__router-worker__`. - Updated dependencies \[[`b4f0c97`](https://github.com/cloudflare/workers-sdk/commit/b4f0c9760bcab1e04cf1a9c8859feed8b4fc6487), [`8cf78c8`](https://github.com/cloudflare/workers-sdk/commit/8cf78c83cb4c64be8b458d7bd618b47e7c6e7d25), [`a60ff4d`](https://github.com/cloudflare/workers-sdk/commit/a60ff4dea0bbae8775726d9cf885655b56460a30), [`99eb50c`](https://github.com/cloudflare/workers-sdk/commit/99eb50ce1d3420a50ae0e95958bf49d65874706e)]: - <miniflare@5.20260801.1-alpha> ### [`v4.119.0`](https://github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#41190) [Compare Source](https://github.com/cloudflare/workers-sdk/compare/wrangler@4.118.0...wrangler@4.119.0) ##### Minor Changes - [#&#8203;14952](https://github.com/cloudflare/workers-sdk/pull/14952) [`20470fa`](https://github.com/cloudflare/workers-sdk/commit/20470fa8b09761c50b5c2c1d6a5f2652b61bd271) Thanks [@&#8203;nelsonjsduarte](https://github.com/nelsonjsduarte)! - Add `--parse-type` flag to `wrangler ai-search create` `wrangler ai-search create` now accepts `--parse-type` to control how a website data source discovers URLs. `sitemap` (the default) reads XML sitemaps; `discover` follows links recursively. Previously the parse type could only be chosen through the interactive wizard, which was skipped whenever `--source` was supplied — so it was impossible to create a `discover` instance from a script. ```sh wrangler ai-search create my-instance \ --type web-crawler \ --source https://example.com \ --parse-type discover ``` The interactive wizard now offers `Discover` alongside `Sitemap`. `--parse-type` is only valid with `--type web-crawler`; passing it with `--type builtin` or `--type r2` is rejected, since the API stores the value for those source types but never reads it. When the flag is omitted in non-interactive mode the field is left unset and the API default (`sitemap`) applies. - [#&#8203;14941](https://github.com/cloudflare/workers-sdk/pull/14941) [`266172b`](https://github.com/cloudflare/workers-sdk/commit/266172b98c27770e6d48d3fd42790e2125115e5e) Thanks [@&#8203;nickpatt](https://github.com/nickpatt)! - Improve the Local Explorer's Observability views `console.log` messages now render the way the console would (JSON-encoded strings are unwrapped and multi-argument logs are joined), traces and events can be looked up by trace or span id from the search bar, and an event's "View trace" button jumps to the exact invocation that emitted it — even when a trace\_id spans several invocations (e.g. a subrequest or self fetch). - [#&#8203;14064](https://github.com/cloudflare/workers-sdk/pull/14064) [`a9e5abb`](https://github.com/cloudflare/workers-sdk/commit/a9e5abb8c0c2e7895b0bb09c6c8e8ffd3dbc3bc0) Thanks [@&#8203;petebacondarwin](https://github.com/petebacondarwin)! - Add support for OAuth 2.0 Device Authorization Grant to `wrangler login` Run `wrangler login --device` to authenticate without a local callback server. Useful in containers, remote SSH sessions, Codespaces, and any other environment where `localhost:8976` is unreachable from your browser. The new flow: - prints the verification URL and user code to the terminal, - attempts to open the verification URL in your default browser automatically (suppressed via `--browser=false`), - and polls the token endpoint until you approve the request (with a 5-minute hard cap). The verification URL is supplied by the authorization server, so it is rejected unless it is an `https` URL on the same auth domain the device code was requested from — it is never printed or opened otherwise. `--callback-host` and `--callback-port` cannot be combined with `--device`, since this flow does not start a local callback server. ##### Patch Changes - [#&#8203;14984](https://github.com/cloudflare/workers-sdk/pull/14984) [`9c74538`](https://github.com/cloudflare/workers-sdk/commit/9c7453837e3293787c0cb1778520f630aea7e5ca) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260730.1 | ^5.20260731.1 | | workerd | 1.20260730.1 | 1.20260731.1 | - [#&#8203;15012](https://github.com/cloudflare/workers-sdk/pull/15012) [`0d33cb8`](https://github.com/cloudflare/workers-sdk/commit/0d33cb8dfb1d6289cb180f16e0e60cd7073a1b1b) Thanks [@&#8203;dependabot](https://github.com/apps/dependabot)! - Update dependencies of "miniflare", "wrangler" The following dependency versions have been updated: | Dependency | From | To | | ------------------------------------------------------------------------ | ------------- | ------------- | | [@&#8203;cloudflare/workers-types](https://github.com/cloudflare/workers-types) | ^5.20260731.1 | ^5.20260801.1 | | workerd | 1.20260731.1 | 1.20260801.1 | - Updated dependencies \[[`9c74538`](https://github.com/cloudflare/workers-sdk/commit/9c7453837e3293787c0cb1778520f630aea7e5ca), [`0d33cb8`](https://github.com/cloudflare/workers-sdk/commit/0d33cb8dfb1d6289cb180f16e0e60cd7073a1b1b), [`a88d169`](https://github.com/cloudflare/workers-sdk/commit/a88d1691d57bf44616ad15556a51b7f8ca17375c), [`a88d169`](https://github.com/cloudflare/workers-sdk/commit/a88d1691d57bf44616ad15556a51b7f8ca17375c), [`daf65f2`](https://github.com/cloudflare/workers-sdk/commit/daf65f28cecf35e251dc6e476d5bbd82972d68de)]: - <miniflare@5.20260801.0-alpha> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Amsterdam) - Branch creation - "after 3am and before 7am every weekday,every weekend" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzEuMyIsInVwZGF0ZWRJblZlciI6IjQzLjI3MS4zIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcG1lbnQiLCJsYWJlbHMiOlsiYXV0b21lcmdlIiwiZGVwZW5kZW5jaWVzIiwibmVlZHMtbWFudWFsLXJldmlldyIsInJlbm92YXRlIiwidHlwZS9taW5vciJdfQ==-->
fix(deps): update dependency wrangler ( 4.118.0 ➔ 4.137.0 )
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Container Parity (push) Failing after 35s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 20s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 18s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 45s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m12s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
8989903b20
Author
Member

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: pnpm-lock.yaml
? Verifying lockfile against supply-chain policies (861 entries)...
Progress: resolved 1, reused 0, downloaded 0, added 0

   ╭─────────────────────────────────────────╮
   │                                         │
   │   Update available! 11.11.0 → 12.6.0.   │
   │   Changelog: https://pnpm.io/v/12.6.0   │
   │    To update, run: pnpm add -g pnpm     │
   │                                         │
   ╰─────────────────────────────────────────╯

Progress: resolved 19, reused 0, downloaded 0, added 0
Progress: resolved 20, reused 0, downloaded 0, added 0
Progress: resolved 21, reused 0, downloaded 0, added 0
Progress: resolved 22, reused 0, downloaded 0, added 0
✓ Lockfile passes supply-chain policies (861 entries in 5.1s)
Progress: resolved 23, reused 0, downloaded 0, added 0
Progress: resolved 141, reused 0, downloaded 0, added 0
Progress: resolved 238, reused 0, downloaded 0, added 0
Progress: resolved 446, reused 0, downloaded 0, added 0
Progress: resolved 622, reused 0, downloaded 0, added 0
Progress: resolved 834, reused 0, downloaded 0, added 0
[ERR_PNPM_NO_MATURE_MATCHING_VERSION] 2 versions do not meet the minimumReleaseAge constraint:
  miniflare@5.20260926.0-alpha was published at 2026-09-27T13:55:15.396Z, within the minimumReleaseAge cutoff (2026-09-26T14:59:29.458Z)
  wrangler@4.142.0 was published at 2026-09-27T14:01:42.990Z, within the minimumReleaseAge cutoff (2026-09-26T14:59:29.458Z)

### ⚠️ Artifact update problem Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is. ♻ Renovate will retry this branch, including artifacts, only when one of the following happens: - any of the package files in this branch needs updating, or - the branch becomes conflicted, or - you click the rebase/retry checkbox if found above, or - you rename this PR's title to start with "rebase!" to trigger it manually The artifact failure details are included below: ##### File name: pnpm-lock.yaml ``` ? Verifying lockfile against supply-chain policies (861 entries)... Progress: resolved 1, reused 0, downloaded 0, added 0 ╭─────────────────────────────────────────╮ │ │ │ Update available! 11.11.0 → 12.6.0. │ │ Changelog: https://pnpm.io/v/12.6.0 │ │ To update, run: pnpm add -g pnpm │ │ │ ╰─────────────────────────────────────────╯ Progress: resolved 19, reused 0, downloaded 0, added 0 Progress: resolved 20, reused 0, downloaded 0, added 0 Progress: resolved 21, reused 0, downloaded 0, added 0 Progress: resolved 22, reused 0, downloaded 0, added 0 ✓ Lockfile passes supply-chain policies (861 entries in 5.1s) Progress: resolved 23, reused 0, downloaded 0, added 0 Progress: resolved 141, reused 0, downloaded 0, added 0 Progress: resolved 238, reused 0, downloaded 0, added 0 Progress: resolved 446, reused 0, downloaded 0, added 0 Progress: resolved 622, reused 0, downloaded 0, added 0 Progress: resolved 834, reused 0, downloaded 0, added 0 [ERR_PNPM_NO_MATURE_MATCHING_VERSION] 2 versions do not meet the minimumReleaseAge constraint: miniflare@5.20260926.0-alpha was published at 2026-09-27T13:55:15.396Z, within the minimumReleaseAge cutoff (2026-09-26T14:59:29.458Z) wrangler@4.142.0 was published at 2026-09-27T14:01:42.990Z, within the minimumReleaseAge cutoff (2026-09-26T14:59:29.458Z) ```
renovate force-pushed renovate/cloudflare-tooling from 8989903b20
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Container Parity (push) Failing after 35s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 20s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 18s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 45s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m12s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
to 6e7059b9b7
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 33s
[Workflow] On Source Change / Container Parity (push) Failing after 45s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 21s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 30s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m43s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
2026-09-25 01:59:37 +00:00
Compare
renovate changed title from fix(deps): update dependency wrangler ( 4.118.0 ➔ 4.137.0 ) to fix(deps): update dependency wrangler ( 4.118.0 ➔ 4.139.0 ) 2026-09-25 02:00:46 +00:00
renovate force-pushed renovate/cloudflare-tooling from 6e7059b9b7
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 33s
[Workflow] On Source Change / Container Parity (push) Failing after 45s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 21s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 30s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m43s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
to cfa483812a
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Container Parity (push) Failing after 49s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 38s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 21s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 37s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m21s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
2026-09-25 03:00:31 +00:00
Compare
renovate force-pushed renovate/cloudflare-tooling from cfa483812a
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Container Parity (push) Failing after 49s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 38s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 21s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 37s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m21s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
to 5e2eb5e540
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Container Parity (push) Failing after 38s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 21s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 37s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 23s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m29s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
2026-09-25 04:01:38 +00:00
Compare
renovate force-pushed renovate/cloudflare-tooling from 5e2eb5e540
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Container Parity (push) Failing after 38s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 21s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 37s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 23s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m29s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
to 06650384e0
Some checks failed
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 19s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 21s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Container Parity (push) Failing after 40s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 31s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 56s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
2026-09-25 23:57:57 +00:00
Compare
renovate changed title from fix(deps): update dependency wrangler ( 4.118.0 ➔ 4.139.0 ) to fix(deps): update dependency wrangler ( 4.118.0 ➔ 4.141.0 ) 2026-09-25 23:59:04 +00:00
renovate force-pushed renovate/cloudflare-tooling from 06650384e0
Some checks failed
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 19s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 21s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Container Parity (push) Failing after 40s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 31s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 56s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
to 820f3a0ef0
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 29s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Container Parity (push) Failing after 58s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 29s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 35s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m15s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
2026-09-26 01:59:34 +00:00
Compare
renovate force-pushed renovate/cloudflare-tooling from 820f3a0ef0
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 29s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Container Parity (push) Failing after 58s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 29s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 35s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m15s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
to e3e307a914
Some checks failed
renovate/artifacts Artifact file update failure
renovate/stability-days Updates have not met minimum release age requirement
[Workflow] On Source Change / Container Parity (push) Failing after 44s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 40s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 30s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 1m17s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m11s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
2026-09-26 03:00:09 +00:00
Compare
renovate force-pushed renovate/cloudflare-tooling from e3e307a914
Some checks failed
renovate/artifacts Artifact file update failure
renovate/stability-days Updates have not met minimum release age requirement
[Workflow] On Source Change / Container Parity (push) Failing after 44s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 40s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 30s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 1m17s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m11s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
to 29152d68b0
Some checks failed
renovate/artifacts Artifact file update failure
renovate/stability-days Updates have not met minimum release age requirement
[Workflow] On Source Change / Container Parity (push) Failing after 46s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 32s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 28s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 1m46s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m4s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Release (push) Failing after 0s
2026-09-26 03:58:40 +00:00
Compare
renovate force-pushed renovate/cloudflare-tooling from 29152d68b0
Some checks failed
renovate/artifacts Artifact file update failure
renovate/stability-days Updates have not met minimum release age requirement
[Workflow] On Source Change / Container Parity (push) Failing after 46s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 32s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 28s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 1m46s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m4s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Release (push) Failing after 0s
to 37ce904f3e
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Container Parity (push) Failing after 1m0s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 40s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 52s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 50s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m54s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
2026-09-27 14:59:51 +00:00
Compare
renovate changed title from fix(deps): update dependency wrangler ( 4.118.0 ➔ 4.141.0 ) to fix(deps): update dependency wrangler ( 4.118.0 ➔ 4.142.0 ) 2026-09-27 15:01:01 +00:00
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
renovate/artifacts Artifact file update failure
[Workflow] On Source Change / Container Parity (push) Failing after 1m0s
[Workflow] On Source Change / Static Analysis (Prettier, ESLint, Typecheck, Audit, Knip, Outdated) (push) Failing after 40s
[Workflow] On Source Change / Static Analysis (push) Failing after 0s
[Workflow] On Source Change / Tests & Build-1 (push) Failing after 52s
[Workflow] On Source Change / Tests & Build (push) Failing after 0s
[Workflow] On Source Change / Lighthouse Budgets (push) Failing after 0s
[Workflow] On Source Change / Lighthouse budgets (push) Failing after 50s
[Workflow] On Source Change / Deploy preview (push) Has been skipped
[Workflow] On Source Change / Deploy production (push) Has been skipped
[Workflow] On Source Change / Deploy Preview (feature branches) (push) Failing after 0s
[Workflow] On Source Change / Accessibility (axe-core)-1 (push) Failing after 1m54s
[Workflow] On Source Change / Accessibility (axe-core) (push) Failing after 0s
[Workflow] On Source Change / Semantic Release (push) Has been skipped
[Workflow] On Source Change / Release (push) Failing after 0s
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/cloudflare-tooling:renovate/cloudflare-tooling
git switch renovate/cloudflare-tooling

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch development
git merge --no-ff renovate/cloudflare-tooling
git switch renovate/cloudflare-tooling
git rebase development
git switch development
git merge --ff-only renovate/cloudflare-tooling
git switch renovate/cloudflare-tooling
git rebase development
git switch development
git merge --no-ff renovate/cloudflare-tooling
git switch development
git merge --squash renovate/cloudflare-tooling
git switch development
git merge --ff-only renovate/cloudflare-tooling
git switch development
git merge renovate/cloudflare-tooling
git push origin development
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
webgrip/twente.dev!33
No description provided.