Wrangler
Minor Changes
#7466
e5ebdb1Thanks @Ltadrian! - feat: implement thewrangler cert uploadcommandThis 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
#7867
bdc7958Thanks @penalosa! - Revert https://github.com/cloudflare/workers-sdk/pull/7816. This feature added support for the ASSETS bindings to thegetPlatformProxy()API, but caused a regression when runningnpm run previewin newly generated Workers Assets projects.#7868
78a9a2dThanks @penalosa! - Revert "Hyperdrive dev remote fix". This PR includes e2e tests that were not run before merging, and are currently failing.Updated dependencies []:
Patch Changes
- #7798
a1ff045Thanks @CarmenPopoviciu! - Reverts #7720 as it introduced breakage in some of the C3 templates (eg. Nuxt)
Minor Changes
#5086
8faf2c0Thanks @dario-piotrowicz! - add--strict-varsoption towrangler typesadd a new
--strict-varsoption towrangler typesthat developers can (by setting the flag tofalse) use to disable the default strict/literal types generation for their variablesopting out of strict variables can be useful when developers change often their
varsvalues, even more so when multiple environments are involvedExample
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 typescommand 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=falsewould 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
902e3afThanks @vicb! - chore(wrangler): use the unenv preset from@cloudflare/unenv-preset#7760
19228e5Thanks @vicb! - chore: update unenv dependency version#7735
e8aaa39Thanks @penalosa! - Unwrap the error cause when available to send to Sentry#5086
8faf2c0Thanks @dario-piotrowicz! - fix: widen multi-envvarstypes inwrangler typesCurrently, the type generated for
varsis 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.tomlcontaining the following:[vars] MY_VAR = "dev value" [env.production.vars] MY_VAR = "prod value"running
wrangler typeswould generate:interface Env { MY_VAR: "dev value"; }making typescript incorrectly assume that
MY_VARis always going to be"dev value"after these changes, the generated interface would instead be:
interface Env { MY_VAR: "dev value" | "prod value"; }#7733
dceb196Thanks @emily-shen! - feat: pull resource names for provisioning from config if providedUses
database_nameandbucket_namefor provisioning if specified. For R2, this only happens if there is not a bucket with that name already. Also respects R2jurisdictionif provided.Updated dependencies []:
Minor Changes
- #7592
f613276Thanks @garrettgu10! - New filter validation logic supporting set and range queries in Vectorize CLI
Patch Changes
#7750
df0e5beThanks @andyjessop! - bug: Removes the (local) tag on Vectorize bindings in the console output ofwrangler dev, and adds-in the same tag for Durable Objects (which are emulated locally inwrangler dev).#7706
c63f1b0Thanks @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]:
Minor Changes
#7534
7c8ae1cThanks @cmackenzie1! - feat: Use OAuth flow to generate R2 tokens for Pipelines#7674
45d1d1eThanks @Ankcorn! - Add support for env files to wrangler secret bulk i.e..dev.varsRun
wrangler secret bulk .dev.varsto add the env file//.dev.vars KEY=VALUE KEY_2=VALUEThis will upload the secrets KEY and KEY_2 to your worker
#7442
e4716ccThanks @petebacondarwin! - feat: add support for redirecting Wrangler to a generated config when running deploy-related commandsThis 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 deploywrangler devwrangler versions uploadwrangler versions deploywrangler pages deploywrangler pages buildwrangler 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.jsonfile) 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.tomlfile.name = "my-worker" main = "src/index.ts" [[kv_namespaces]] binding = "<BINDING_NAME1>" id = "<NAMESPACE_ID1>"Note that this configuration points
mainat user code entry-point.The user runs a custom build, which might read the
wrangler.tomlto find the entry-point:> my-tool buildThis tool generates a
distdirectory that contains both compiled code and a new deployment configuration file, but also a.wrangler/deploy/config.jsonfile that redirects Wrangler to this new deployment configuration file:- dist - index.js - wrangler.json - .wrangler - deploy - config.jsonThe
dist/wrangler.jsonwill contain:{ "name": "my-worker", "main": "./index.js", "kv_namespaces": [ { "binding": "<BINDING_NAME1>", "id": "<NAMESPACE_ID1>" } ] }And the
.wrangler/deploy/config.jsonwill contain:{ "configPath": "../../dist/wrangler.json" }
#7685
9d2740aThanks @vicb! - allow overriding the unenv preset.By default wrangler uses the bundled unenv preset.
Setting
WRANGLER_UNENV_RESOLVE_PATHSallow 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
f3c2f69Thanks @joshthoward! - Default wrangler d1 export to --local rather than failing
Patch Changes
#7456
ff4e77eThanks @andyjessop! - chore: removes --experimental-versions flag, as versions is now GA.#7712
6439347Thanks @penalosa! - Remove CF-Connecting-IP for requests to the edge preview#7703
e771fe9Thanks @petebacondarwin! - include the top level Worker name in the parsed config structure#7576
773bda8Thanks @cmackenzie1! - Remove defaults forbatch-max-*pipeline parameters and define value ranges
Minor Changes
#7604
6c2f173Thanks @CarmenPopoviciu! - feat: Capture Workers with static assets in the telemetry dataWe 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
#7581
cac7fa6Thanks @vicb! - chore(wrangler): update unenv dependency versionunenv now uses the workerd implementation on node:dns See the unjs/unenv#376
#7625
d8fb032Thanks @vicb! - feat(wrangler): use unenv builtin dependency resolutionMoving away from
require.resolve()to handle unenv aliased packages. Using the unenv builtin resolution will allow us to drop the .cjs file from the preset and to override the base path so that we can test the dev version of the preset.#7533
755a27cThanks @danielgek! - Add warning about the browser rendering not available on local#7614
8abb43fThanks @vicb! - chore(wrangler): update unenv dependency versionThe updated unenv contains a fix for the module resolution, see https://github.com/unjs/unenv/pull/378. That bug prevented us from using unenv module resolution, see https://github.com/cloudflare/workers-sdk/pull/7583.
Updated dependencies [
b4e0af1]:
Minor Changes
#7425
8757579Thanks @CarmenPopoviciu! - feat: Make DX improvements inwrangler dev --remoteWorkers + Assets projects have, in certain situations, a relatively degraded
wrangler dev --remotedeveloper 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:- check for asset files changes
- upload the changed assets, if any
This commit improves the
wrangler dev --remoteDX 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
086a6b8Thanks @WillTaylorDev! - Provide validation around assets.experimental_serve_directly#7568
2bbcb93Thanks @WillTaylorDev! - Warn users when using smart placement with Workers + Assets andserve_directlyis set tofalse
Patch Changes
#7521
48e7e10Thanks @emily-shen! - feat: add experimental_patchConfig()experimental_patchConfig()can add to a user's config file. It preserves comments if its awrangler.jsonc. However, it is not suitable forwrangler.tomlwith comments as we cannot preserve comments on write.
Minor Changes
#7476
5124b5dThanks @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 haveassets = { directory = "./public/" }, a route like"example.com/blog/*"and a file./public/blog/logo.png, this will be available atexample.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
72935f9Thanks @CarmenPopoviciu! - Add Workers + Assets support inwrangler dev --remote
Patch Changes
#7573
fb819f9Thanks @emily-shen! - feat: add experimental_readRawConfig()Adds a Wrangler API to find and read a config file
#7549
42b9429Thanks @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 inargv
#7583
8def8c9Thanks @penalosa! - Revert support for custom unenv resolve path to address an issue with Wrangler failing to deploy Pages projects withnodejs_compat_v2in some cases
Minor Changes
#7522
6403e41Thanks @vicb! - feat(wrangler): allow overriding the unenv preset.By default wrangler uses the bundled unenv preset.
Setting
WRANGLER_UNENV_RESOLVE_PATHSallow 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
2780849Thanks @penalosa! - Accept a JSON file of the format{ name: string }[]inwrangler kv bulk delete, as well as the currentstring[]format.
Patch Changes
Minor Changes
#7510
004af53Thanks @oliy! - Add file prefix option to wrangler pipelines commands#7383
8af3365Thanks @jonesphillip! - Added wrangler r2 domain get command
Patch Changes
#7542
f13c897Thanks @CarmenPopoviciu! - Always print deployment and placement ID in Cloudchamber commandsCurrently, 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
0356d0aThanks @bluwy! - refactor: move@cloudflare/workers-sharedas dev dependency#7478
2e90efcThanks @petebacondarwin! - fix: ensure that non-inherited fields are not removed when using an inferred named environmentIt 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
11f95f7Thanks @gpanders! - Include response body in Cloudchamber API errors#7427
3bc0f28Thanks @edmundhung! - Thex-provisionexperimental 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 []:
Minor Changes
- #7382
e0b98fdThanks @jonesphillip! - Added r2 bucket cors command to Wrangler including list, set, delete
Minor Changes
- #7229
669d7adThanks @gabivlj! - Introduce a new cloudchamber commandwrangler cloudchamber apply, which will be used by customers to deploy container-apps
Patch Changes
#7002
d2447c6Thanks @GregBrimble! - fix: More helpful error messages when validating compatibility date#7493
4c140bcThanks @emily-shen! - fix: remove non-json output in json mode commandsFixes regressions in 3.93.0 where unwanted text (wrangler banner, telemetry notice) was printing in commands that should only output valid json.
Updated dependencies [
5449fe5]:- @cloudflare/workers-shared@0.11.0
- miniflare@3.20241205.0
Minor Changes
#7291
f5b9cd5Thanks @edmundhung! - Add anonymous telemetry to Wrangler commandsFor 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
20a0f17Thanks @GregBrimble! - feat: Allow Workers for Platforms scripts (scripts deployed with--dispatch-namespace) to bring alongassets#7445
f4ae6eeThanks @WillTaylorDev! - Support forassets.experimental_serve_directlywithwrangler dev
Patch Changes
#7256
415e5b5Thanks @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
8f25ebeThanks @vicb! - chore(wrangler): update unenv dependency versionPull 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
b40d0abThanks @petebacondarwin! - fix: allow the asset directory to be omitted in Wrangler config for commands that don't need it#7454
f2045beThanks @petebacondarwin! - refactor: Ensure that unstable type exports are all prefixed withUnstable_rather than justUnstable#7461
9ede45bThanks @petebacondarwin! - fix: relax validation of unsafe configuration to allow an empty objectThe 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
9435af0Thanks @petebacondarwin! - fix: make sure Wrangler doesn't create a.wranglertmp dir in thefunctions/folder of a Pages projectThis regression was introduced in https://github.com/cloudflare/workers-sdk/pull/7415 and this change fixes it by reverting that change.
#7385
14a7bc6Thanks @edmundhung! - Thex-provisionexperimental flag now support inherit bindings in deploys#7463
073293fThanks @penalosa! - Clarify messaging aroundwrangler versionscommands to reflect that they're stable (and have been since GA during birthday week)#7436
5e69799Thanks @Ankcorn! - Relax type on observability.enabled to remove linting error for nested configurations#7450
8c873edThanks @petebacondarwin! - fix: ensure that version secrets commands do not write wrangler config warningsUpdated dependencies [
21a9e24,f4ae6ee]:- miniflare@3.20241205.0
- @cloudflare/workers-shared@0.10.0
Minor Changes
#7251
80a83bbThanks @penalosa! - Improve Wrangler's multiworker support to allow running multiple workers at once with one command. To try it out, pass multiple-cflags 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
11338d0Thanks @nickbabcock! - Update import resolution for files and package exportsIn 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_modulesdirectory and not the workspace rootnode_modulesdirectory.#7355
5928e8cThanks @emily-shen! - feat: addexperimental_serve_directlyoption to Workers with AssetsUsers 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
#7326
24c752eThanks @OilyLime! - Print wrangler.toml snippet when creating new Hyperdrive Config#7272
a3f56d1Thanks @penalosa! - Make debug log for.envnot found less scary#7377
6ecc74eThanks @edmundhung! - Thex-provisionexperimental flag now skips validation of KV, R2, and D1 IDs in the configuration file.#7348
4cd8b46Thanks @edmundhung! - Addedx-provisionglobal optionThis experimental flag currently has no effect. More details will be shared as we roll out its functionality.
#7381
22a4055Thanks @penalosa! - Turn on--x-registryfor Pages by default#7360
98d2725Thanks @emily-shen! - fix: allow runningwrangler typeswhen expected entrypoint doesn't existUpdated dependencies [
ac87395,6b21919,b3d2e7d]:- miniflare@3.20241106.2
- @cloudflare/workers-shared@0.9.1
Minor Changes
#7230
6fe9533Thanks @penalosa! - Turn onwrangler.json(c)support by defaultWrangler now supports both JSON (
wrangler.json) and TOML (wrangler.toml) for it's configuration file. The format of Wrangler's configuration file is exactly the same across both languages, except that the syntax isJSONrather thanTOML. e.g.name = "worker-ts" main = "src/index.ts" compatibility_date = "2023-05-04"would be interpreted the same as the equivalent JSON
{ "name": "worker-ts", "main": "src/index.ts", "compatibility_date": "2023-05-04" }#7330
219109aThanks @jonesphillip! - Added Oceania (oc) location hint as acceptable choice when creating an R2 bucket.#7227
02a0e1eThanks @taylorlee! - Addpreview_urlstoggle towrangler.tomlThe current Preview URLs (beta) feature routes to version preview urls based on the status of the
workers_devconfig value. Beta users have requested the ability to enable deployment urls and preview urls separately onworkers.dev, and the newpreviews_enabledfield of the enable-subdomain API will allow that. This change separates theworkers_devandpreview_urlsbehavior duringwrangler triggers deployandwrangler versions upload.preview_urlsdefaults to true, and does not implicitly depend on routes the wayworkers_devdoes.#7308
1b1d01aThanks @gpanders! - Add a default image for cloudchamber create and modify commands#7232
7da76deThanks @toddmantell! - feat: implement queues info commandThis command allows users to get information on individual queues.
To run this command use the queues info command with the name of a queue in the user's account.
wrangler queues info my-queue-name
Patch Changes
#7319
5a2c93dThanks @vicb! - chore(wrangler): update unenv dependency versionPulls in the implementation of module.findSourceMap
Updated dependencies [
0d314ed,476e5df]:- @cloudflare/workers-shared@0.9.0
- miniflare@3.20241106.1
Minor Changes
Patch Changes
- Updated dependencies [
6ba5903]:- @cloudflare/workers-shared@0.8.0
- miniflare@3.20241106.1
Minor Changes
#7252
97acf07Thanks @Maximo-Guk! - feat: Add production_branch and deployment_trigger to pages deploy detailed artifact for wrangler-action pages parity#7263
1b80decThanks @danielrs! - Fix wrangler pages deployment (list|tail) environment filtering.
Patch Changes
#7314
a30c805Thanks @Ankcorn! - Fix observability.logs.enabled validation#7285
fa21312Thanks @penalosa! - RenamedirectorytoprojectRootand ensure it's relative to thewrangler.toml. This fixes a regression which meant that.wranglertemporary folders were inadvertently generated relative toprocess.cwd()rather than the location of thewrangler.tomlfile. It also renamesdirectorytoprojectRoot, which affects the `unstable_startWorker() interface.Updated dependencies [
563439b]:
Minor Changes
#7173
b6cbfbdThanks @Ankcorn! - Adds [observability.logs] settings to wrangler. This setting lets developers control the settings for logs as an independent dataset enabling more dataset types in the future. The most specific setting will win if any of the datasets are not enabled.It also adds the following setting to the logs config
invocation_logs- set to false to disable invocation logs. Defaults to true.
[observability.logs] enabled = true invocation_logs = false#7207
edec415Thanks @jonesphillip! - Added r2 bucket lifecycle command to Wrangler including list, add, remove, set
Patch Changes
#7243
941d411Thanks @penalosa! - Include Version Preview URL in Wrangler's output file#7038
e2e6912Thanks @petebacondarwin! - fix: only show fetch warning if on old compatibility_dateNow that we have the
allow_custom_portscompatibility flag, we only need to show the fetch warnings when that flag is not enabled.#7216
09e6e90Thanks @vicb! - chore(wrangler): update unenv dependency version#7081
b4a0e74Thanks @penalosa! - Default the file based registry (--x-registry) to on. This should improve stability of multi-worker developmentUpdated dependencies []:
Minor Changes
#7201
beed72eThanks @GregBrimble! - feat: Tail Consumers are now supported for Workers with assets.You can now configure
tail_consumersin conjunction withassetsin yourwrangler.tomlfile. Read more about Static Assets and Tail Consumers in the documentation.#7212
837f2f5Thanks @jonesphillip! - Added r2 bucket info command to Wrangler. Improved formatting of r2 bucket list output
Patch Changes
#7210
c12c0feThanks @taylorlee! - Avoid an unnecessary GET request duringwrangler deploy.#7197
4814455Thanks @michelheusschen! - fix console output forwrangler d1 migrations create#6795
94f07eeThanks @benmccann! - chore: upgrade chokidar to v4#7133
c46e02dThanks @gpanders! - Do not emit escape sequences when stdout is not a TTY