Skip to content

Wrangler

Subscribe to RSS

2025-01-30

3.107.0

Minor Changes

  • #7897 34f9797 Thanks @WillTaylorDev! - chore: provides run_worker_first for Worker-script-first configuration. Deprecates experimental_serve_directly.

Patch Changes

  • #7945 d758215 Thanks @ns476! - Add Images binding (in private beta for the time being)

  • #7947 f57bc4e Thanks @dario-piotrowicz! - fix: avoid getPlatformProxy logging twice that it is using vars defined in .dev.vars files

    when getPlatformProxy is called and it retrieves values from .dev.vars files, it logs twice a message like: Using vars defined in .dev.vars, the changes here make sure that in such cases this log only appears once

  • #7889 38db4ed Thanks @emily-shen! - feat: add experimental resource auto-provisioning to versions upload

  • #7864 de6fa18 Thanks @dario-piotrowicz! - Update the unstable_getMiniflareWorkerOptions types to always include an env parameter.

    The unstable_getMiniflareWorkerOptions types, when accepting a config object as the first argument, didn't accept a second env argument. The changes here make sure they do, since the env is still relevant for picking up variables from .dev.vars files.

  • #7964 bc4d6c8 Thanks @LuisDuarte1! - Fix scripts binding to a workflow in a different script overriding workflow config

  • Updated dependencies [cf4f47a]:

2025-01-28

3.106.0

Minor Changes

  • #7856 2b6f149 Thanks @emily-shen! - feat: add sanitised error messages to Wrangler telemetry

    Error messages that have been audited for potential inclusion of personal information, and explicitly opted-in, are now included in Wrangler's telemetry collection. Collected error messages will not include any filepaths, user input or any other potentially private content.

  • #7900 bd9228e Thanks @vicb! - chore(wrangler): update unenv dependency version

    unenv@2.0.0-rc.1 allows using the workerd implementation for the Node modules net, timers, and timers/promises. See unjs/unenv#396.

Patch Changes

  • #7904 50b13f6 Thanks @WalshyDev! - fix: validation for R2 bucket names, the regex was wrongly rejecting buckets starting with a number and the message wasn't as clear as it could be on what was going wrong.

  • #7895 134d61d Thanks @jahands! - Fix regression in retryOnAPIFailure preventing any requests from being retried

    Also fixes a regression in pipelines that prevented 401 errors from being retried when waiting for an API token to become active.

  • #7879 5c02e46 Thanks @andyjessop! - Fix to not require local connection string when using Hyperdrive and wrangler dev --remote

  • #7860 13ab591 Thanks @vicb! - refactor(wrangler): make JSON parsing independent of Node

    Switch jsonc-parser to parse json:

    • JSON.parse() exception messages are not stable across Node versions
    • While jsonc-parser is used, JSONC specific syntax is disabled
  • Updated dependencies []:

2025-01-24

3.105.1

Patch Changes

2025-01-22

3.105.0

Minor Changes

  • #7466 e5ebdb1 Thanks @Ltadrian! - feat: implement the wrangler cert upload command

    This command allows users to upload a mTLS certificate/private key or certificate-authority certificate chain.

    For uploading mTLS certificate, run:

    • wrangler cert upload mtls-certificate --cert cert.pem --key key.pem --name MY_CERT

    For uploading CA certificate chain, run:

    • wrangler cert upload certificate-authority --ca-cert server-ca.pem --name SERVER_CA

Patch Changes

2025-01-17

3.103.2

Patch Changes

  • #7804 16a9460 Thanks @vicb! - fix(wrangler): use require.resolve to resolve unenv path

2025-01-16

3.103.1

Patch Changes

2025-01-16

3.103.0

Minor Changes

  • #5086 8faf2c0 Thanks @dario-piotrowicz! - add --strict-vars option to wrangler types

    add a new --strict-vars option to wrangler types that developers can (by setting the flag to false) use to disable the default strict/literal types generation for their variables

    opting out of strict variables can be useful when developers change often their vars values, even more so when multiple environments are involved

    Example

    With a toml containing:

    [vars]
    MY_VARIABLE = "production_value"
    MY_NUMBERS = [1, 2, 3]
    
    [env.staging.vars]
    MY_VARIABLE = "staging_value"
    MY_NUMBERS = [7, 8, 9]
    

    the wrangler types command would generate the following interface:

    interface Env {
            MY_VARIABLE: "production_value" | "staging_value";
            MY_NUMBERS: [1,2,3] | [7,8,9];
    }
    

    while wrangler types --strict-vars=false would instead generate:

    interface Env {
            MY_VARIABLE: string;
            MY_NUMBERS: number[];
    }
    

    (allowing the developer to easily change their toml variables without the risk of breaking typescript types)

Patch Changes

  • #7720 902e3af Thanks @vicb! - chore(wrangler): use the unenv preset from @cloudflare/unenv-preset

  • #7760 19228e5 Thanks @vicb! - chore: update unenv dependency version

  • #7735 e8aaa39 Thanks @penalosa! - Unwrap the error cause when available to send to Sentry

  • #5086 8faf2c0 Thanks @dario-piotrowicz! - fix: widen multi-env vars types in wrangler types

    Currently, the type generated for vars is a string literal consisting of the value of the variable in the top level environment. If multiple environments are specified this wrongly restricts the type, since the variable could contain any of the values from each of the environments.

    For example, given a wrangler.toml containing the following:

    [vars]
    MY_VAR = "dev value"
    
    [env.production.vars]
    MY_VAR = "prod value"
    

    running wrangler types would generate:

    interface Env {
      MY_VAR: "dev value";
    }
    

    making typescript incorrectly assume that MY_VAR is always going to be "dev value"

    after these changes, the generated interface would instead be:

    interface Env {
      MY_VAR: "dev value" | "prod value";
    }
    
  • #7733 dceb196 Thanks @emily-shen! - feat: pull resource names for provisioning from config if provided

    Uses database_name and bucket_name for provisioning if specified. For R2, this only happens if there is not a bucket with that name already. Also respects R2 jurisdiction if provided.

  • Updated dependencies []:

2025-01-14

3.102.0

Minor Changes

Patch Changes

  • #7750 df0e5be Thanks @andyjessop! - bug: Removes the (local) tag on Vectorize bindings in the console output of wrangler dev, and adds-in the same tag for Durable Objects (which are emulated locally in wrangler dev).

  • #7732 d102b60 Thanks @Ankcorn! - fix pages secret bulk copy

  • #7706 c63f1b0 Thanks @penalosa! - Remove the server-based dev registry in favour of the more stable file-based dev registry. There should be no user-facing impact.

  • Updated dependencies [8e9aa40]:

2025-01-09

3.101.0

Minor Changes

  • #7534 7c8ae1c Thanks @cmackenzie1! - feat: Use OAuth flow to generate R2 tokens for Pipelines

  • #7674 45d1d1e Thanks @Ankcorn! - Add support for env files to wrangler secret bulk i.e. .dev.vars

    Run wrangler secret bulk .dev.vars to add the env file

    //.dev.vars
    KEY=VALUE
    KEY_2=VALUE
    

    This will upload the secrets KEY and KEY_2 to your worker

  • #7442 e4716cc Thanks @petebacondarwin! - feat: add support for redirecting Wrangler to a generated config when running deploy-related commands

    This new feature is designed for build tools and frameworks to provide a deploy-specific configuration, which Wrangler can use instead of user configuration when running deploy-related commands. It is not expected that developers of Workers will need to use this feature directly.

    Affected commands

    The commands that use this feature are:

    • wrangler deploy
    • wrangler dev
    • wrangler versions upload
    • wrangler versions deploy
    • wrangler pages deploy
    • wrangler pages build
    • wrangler pages build-env

    Config redirect file

    When running these commands, Wrangler will look up the directory tree from the current working directory for a file at the path .wrangler/deploy/config.json. This file must contain only a single JSON object of the form:

    { "configPath": "../../path/to/wrangler.json" }
    

    When this file exists Wrangler will follow the configPath (relative to the .wrangler/deploy/config.json file) to find an alternative Wrangler configuration file to load and use as part of this command.

    When this happens Wrangler will display a warning to the user to indicate that the configuration has been redirected to a different file than the user's configuration file.

    Custom build tool example

    A common approach that a build tool might choose to implement.

    • The user writes code that uses Cloudflare Workers resources, configured via a user wrangler.toml file.

      name = "my-worker"
      main = "src/index.ts"
      [[kv_namespaces]]
      binding = "<BINDING_NAME1>"
      id = "<NAMESPACE_ID1>"
      

      Note that this configuration points main at user code entry-point.

    • The user runs a custom build, which might read the wrangler.toml to find the entry-point:

      > my-tool build
      
    • This tool generates a dist directory that contains both compiled code and a new deployment configuration file, but also a .wrangler/deploy/config.json file that redirects Wrangler to this new deployment configuration file:

      - dist
        - index.js
          - wrangler.json
      - .wrangler
        - deploy
            - config.json
      

      The dist/wrangler.json will contain:

      {
        "name": "my-worker",
        "main": "./index.js",
        "kv_namespaces": [
          { "binding": "<BINDING_NAME1>", "id": "<NAMESPACE_ID1>" }
        ]
      }
      

      And the .wrangler/deploy/config.json will contain:

      {
        "configPath": "../../dist/wrangler.json"
      }
      
  • #7685 9d2740a Thanks @vicb! - allow overriding the unenv preset.

    By default wrangler uses the bundled unenv preset.

    Setting WRANGLER_UNENV_RESOLVE_PATHS allow to use another version of the preset. Those paths are used when resolving the unenv module identifiers to absolute paths. This can be used to test a development version.

  • #7694 f3c2f69 Thanks @joshthoward! - Default wrangler d1 export to --local rather than failing

Patch Changes

2025-01-07

3.100.0

Minor Changes

  • #7604 6c2f173 Thanks @CarmenPopoviciu! - feat: Capture Workers with static assets in the telemetry data

    We want to measure accurately what this number of Workers + Assets projects running in remote mode is, as this number will be a very helpful data point down the road, when more decisions around remote mode will have to be taken.

    These changes add this kind of insight to our telemetry data, by capturing whether the command running is in the context of a Workers + Assets project.

    N.B. With these changes in place we will be capturing the Workers + Assets context for all commands, not just wrangler dev --remote.

Patch Changes

2024-12-19

3.99.0

Minor Changes

  • #7425 8757579 Thanks @CarmenPopoviciu! - feat: Make DX improvements in wrangler dev --remote

    Workers + Assets projects have, in certain situations, a relatively degraded wrangler dev --remote developer experience, as opposed to Workers proper projects. This is due to the fact that, for Workers + Assets, we need to make extra API calls to:

    1. check for asset files changes
    2. upload the changed assets, if any

    This commit improves the wrangler dev --remote DX for Workers + Assets, for use cases when the User Worker/assets change while the API calls for previous changes are still in flight. For such use cases, we have put an exit early strategy in place, that drops the event handler execution of the previous changes, in favour of the handler triggered by the new changes.

  • #7537 086a6b8 Thanks @WillTaylorDev! - Provide validation around assets.experimental_serve_directly

  • #7568 2bbcb93 Thanks @WillTaylorDev! - Warn users when using smart placement with Workers + Assets and serve_directly is set to false

Patch Changes

  • #7521 48e7e10 Thanks @emily-shen! - feat: add experimental_patchConfig()

    experimental_patchConfig() can add to a user's config file. It preserves comments if its a wrangler.jsonc. However, it is not suitable for wrangler.toml with comments as we cannot preserve comments on write.

  • Updated dependencies [1488e11, 7216835]:

2024-12-19

3.98.0

Minor Changes

  • #7476 5124b5d Thanks @WalshyDev! - feat: allow routing to Workers with Assets on any HTTP route, not just the root. For example, example.com/blog/* can now be used to serve assets. These assets will be served as though the assets directly were mounted to the root. For example, if you have assets = { directory = "./public/" }, a route like "example.com/blog/*" and a file ./public/blog/logo.png, this will be available at example.com/blog/logo.png. Assets outside of directories which match the configured HTTP routes can still be accessed with the Assets binding or with a Service binding to this Worker.

  • #7380 72935f9 Thanks @CarmenPopoviciu! - Add Workers + Assets support in wrangler dev --remote

Patch Changes

  • #7573 fb819f9 Thanks @emily-shen! - feat: add experimental_readRawConfig()

    Adds a Wrangler API to find and read a config file

  • #7549 42b9429 Thanks @penalosa! - Expand metrics collection to:

    • Detect Pages & Workers CI
    • Filter out default args (e.g. --x-versions, --x-dev-env, and --latest) by only including args that were in argv
  • #7583 8def8c9 Thanks @penalosa! - Revert support for custom unenv resolve path to address an issue with Wrangler failing to deploy Pages projects with nodejs_compat_v2 in some cases

2024-12-17

3.97.0

Minor Changes

  • #7522 6403e41 Thanks @vicb! - feat(wrangler): allow overriding the unenv preset.

    By default wrangler uses the bundled unenv preset.

    Setting WRANGLER_UNENV_RESOLVE_PATHS allow to use another version of the preset. Those paths are used when resolving the unenv module identifiers to absolute paths. This can be used to test a development version.

  • #7479 2780849 Thanks @penalosa! - Accept a JSON file of the format { name: string }[] in wrangler kv bulk delete, as well as the current string[] format.

Patch Changes

2024-12-16

3.96.0

Minor Changes

Patch Changes

  • #7542 f13c897 Thanks @CarmenPopoviciu! - Always print deployment and placement ID in Cloudchamber commands

    Currently, Cloudchamber commands only print the full deployment ID when the deployment has an IPv4 address. This commit ensures the deployment ID and the placement ID are always printed to stdout. It also moves the printing of the IPv4 address (if one exists) to the same place as the IPv6 address so that they are printed together.

  • #6754 0356d0a Thanks @bluwy! - refactor: move @cloudflare/workers-shared as dev dependency

  • #7478 2e90efc Thanks @petebacondarwin! - fix: ensure that non-inherited fields are not removed when using an inferred named environment

    It is an error for the the user to provide an environment name that doesn't match any of the named environments in the Wrangler configuration. But if there are no named environments defined at all in the Wrangler configuration, we special case the top-level environment as though it was a named environment. Previously, when this happens, we would remove all the nonInheritable fields from the configuration (essentially all the bindings) leaving an incorrect configuration. Now we correctly generate a flattened named environment that has the nonInheritable fields, plus correctly applies any transformFn on inheritable fields.

  • #7524 11f95f7 Thanks @gpanders! - Include response body in Cloudchamber API errors

  • #7427 3bc0f28 Thanks @edmundhung! - The x-provision experimental flag now identifies draft and inherit bindings by looking up the current binding settings.

    Draft bindings can then be provisioned (connected to new or existing KV, D1, or R2 resources) during wrangler deploy.

  • Updated dependencies []:

2024-12-10

3.95.0

Minor Changes

2024-12-09

3.94.0

Minor Changes

  • #7229 669d7ad Thanks @gabivlj! - Introduce a new cloudchamber command wrangler cloudchamber apply, which will be used by customers to deploy container-apps

Patch Changes

2024-12-06

3.93.0

Minor Changes

  • #7291 f5b9cd5 Thanks @edmundhung! - Add anonymous telemetry to Wrangler commands

    For new users, Cloudflare will collect anonymous usage telemetry to guide and improve Wrangler's development. If you have already opted out of Wrangler's existing telemetry, this setting will still be respected.

    See our data policy for more details on what we collect and how to opt out if you wish.

  • #7448 20a0f17 Thanks @GregBrimble! - feat: Allow Workers for Platforms scripts (scripts deployed with --dispatch-namespace) to bring along assets

  • #7445 f4ae6ee Thanks @WillTaylorDev! - Support for assets.experimental_serve_directly with wrangler dev

Patch Changes

  • #7256 415e5b5 Thanks @jamesopstad! - Export unstable_readConfig function and Unstable_Config, Unstable_RawConfig, Unstable_RawEnvironment and Unstable_MiniflareWorkerOptions types from Wrangler. Overload unstable_getMiniflareWorkerOptions function to accept a config that has already been loaded.

  • #7431 8f25ebe Thanks @vicb! - chore(wrangler): update unenv dependency version

    Pull in:

    • refactor(cloudflare): reimplement module:createRequire for latest workerd (unjs/unenv#351)
    • refactor: use node:events instead of relative path (unjs/unenv#354)
    • refactor(http, cloudflare): use unenv/ imports inside node:http (unjs/unenv#363)
    • refactor(node:process): set process.domain to undefined (unjs/unenv#367)
  • #7426 b40d0ab Thanks @petebacondarwin! - fix: allow the asset directory to be omitted in Wrangler config for commands that don't need it

  • #7454 f2045be Thanks @petebacondarwin! - refactor: Ensure that unstable type exports are all prefixed with Unstable_ rather than just Unstable

  • #7461 9ede45b Thanks @petebacondarwin! - fix: relax validation of unsafe configuration to allow an empty object

    The types, the default and the code in general support an empty object for this config setting.

    So it makes sense to avoid erroring when validating the config.

  • #7446 9435af0 Thanks @petebacondarwin! - fix: make sure Wrangler doesn't create a .wrangler tmp dir in the functions/ folder of a Pages project

    This regression was introduced in https://github.com/cloudflare/workers-sdk/pull/7415 and this change fixes it by reverting that change.

  • #7385 14a7bc6 Thanks @edmundhung! - The x-provision experimental flag now support inherit bindings in deploys

  • #7463 073293f Thanks @penalosa! - Clarify messaging around wrangler versions commands to reflect that they're stable (and have been since GA during birthday week)

  • #7436 5e69799 Thanks @Ankcorn! - Relax type on observability.enabled to remove linting error for nested configurations

  • #7450 8c873ed Thanks @petebacondarwin! - fix: ensure that version secrets commands do not write wrangler config warnings

  • Updated dependencies [21a9e24, f4ae6ee]:

2024-12-03

3.92.0

Minor Changes

  • #7251 80a83bb Thanks @penalosa! - Improve Wrangler's multiworker support to allow running multiple workers at once with one command. To try it out, pass multiple -c flags to Wrangler: i.e. wrangler dev -c wrangler.toml -c ../other-worker/wrangler.toml. The first config will be treated as the primary worker and will be exposed over HTTP as usual (localhost:8787) while the rest will be treated as secondary and will only be accessible via a service binding from the primary worker. Notably, these workers all run in the same runtime instance, which should improve reliability of multiworker dev and fix some bugs (RPC to cross worker Durable Objects, for instance).

  • #7130 11338d0 Thanks @nickbabcock! - Update import resolution for files and package exports

    In an npm workspace environment, wrangler will now be able to successfully resolve package exports.

    Previously, wrangler would only be able to resolve modules in a relative node_modules directory and not the workspace root node_modules directory.

  • #7355 5928e8c Thanks @emily-shen! - feat: add experimental_serve_directly option to Workers with Assets

    Users can now specify whether their assets are served directly against HTTP requests or whether these requests always go to the Worker, which can then respond with asset retrieved by its assets binding.

Patch Changes