chore(deps): update dependency wrangler to v4#235
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
b6b81f8 to
fa47f5b
Compare
6f8875a to
7e66de9
Compare
840fdb3 to
954c202
Compare
91151c4 to
a74e1ff
Compare
72b3925 to
dc55456
Compare
dc55456 to
838f8e1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^3.50.0→^4.0.0Release Notes
cloudflare/workers-sdk (wrangler)
v4.98.0Minor Changes
#14089
c6c61b5Thanks @alsuren! - Addmigrations_patternto D1 database bindingsThe D1 binding now accepts an optional
migrations_patternfield, allowing you to pointwrangler d1 migrations applyandwrangler d1 migrations listat migration files in nested layouts (e.g. ORM-generated folders likemigrations/0000_init/migration.sql).migrations_patternis a glob (relative to the wrangler config file) and defaults to${migrations_dir}/*.sql, which preserves today's behaviour. Files that do not match the pattern are not executed.{ "d1_databases": [ { "binding": "DB", "database_name": "my-db", "database_id": "...", "migrations_dir": "migrations", "migrations_pattern": "migrations/*/migration.sql" } ] }When no migrations match the configured pattern but files matching the common
migrations/*/migration.sql(drizzle-style) layout do exist, Wrangler logs a hint suggestingmigrations_patternas an opt-in.wrangler d1 migrations createnow returns an actionable error if the generated migration filename would not match the configured pattern.#14153
7a6b1a4Thanks @dario-piotrowicz! - Generalizewrangler deployandwrangler versions uploadpositional argument from[script]to[path]Both
wrangler deployandwrangler versions uploadnow accept a generic[path]positional argument that can point to either a Worker entry-point file or a directory of static assets. The type is auto-detected. For example:wrangler deploy ./src/index.tsdeploys a Worker (same as before)wrangler deploy ./publicdeploys a static assets site (no interactive confirmation prompt)The
--scriptnamed option is now hidden and deprecated for both commands. It continues to work for backwards compatibility but only accepts file paths. Passing a directory to--scriptnow produces a clear error message suggesting the positionalpathargument or--assetsflag instead.#13863
3b8b80aThanks @aslakhellesoy! -getPlatformProxy()now passes through workflow bindings that have ascript_nameWorkflows without a
script_nameare still stripped (and warned about) because the engine for an internal workflow can't run inside the empty proxy worker that backsgetPlatformProxy(). Workflows with ascript_nameare handed to miniflare unchanged; miniflare reroutes the engine'sUSER_WORKFLOWbinding through the dev-registry-proxy when the target worker is running in another Miniflare instance — the same mechanism Durable Objects already use.This means SvelteKit/Remix (and similar split-process setups) can call
platform.env.MY_WORKFLOW.create({ ... })directly from their server-side request handlers in dev, as long as the workflow class is exposed by another worker registered in the dev registry.Closes #7459.
#14164
b502d54Thanks @G4brym! - Rename theweb_searchbinding kind towebsearchPre-launch rename of the public binding type from
web_searchtowebsearchso the on-the-wire shape matches the product name (Web Search). The wrangler config key, the binding-type string sent to the Cloudflare API, and the miniflare option key all move fromweb_search/webSearchtowebsearch.Update your wrangler config:
The runtime
WebSearchtype exposed onenv.WEBSEARCHis unchanged.Patch Changes
#14089
c6c61b5Thanks @alsuren! - Restore the D1executeSqllogger level via try/finallywrangler d1 execute --jsonand the internalexecuteSqlhelper temporarily lower the global logger to"error"to keep human-readable output out of the JSON payload. Previously the level was restored only on the happy path, so any early return or thrown error left the singleton logger muted, silencing laterlogger.warn/logger.logoutput (notably from migration helpers that wrapexecuteSqland are commonly mocked in tests).The level swap is now wrapped in
try/finallyso it is always restored.#14175
a3eea27Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14121
7539a9bThanks @petebacondarwin! - Extract the OAuth 2.0 + PKCE flow into a new@cloudflare/workers-authpackage.The OAuth login / logout / refresh logic, the auth-config TOML file IO, the OAuth token exchange + local callback server, and the Cloudflare Access detection helpers that previously lived in
packages/wrangler/src/user/have moved to the new internal-only@cloudflare/workers-authpackage. Wrangler now wires the OAuth flow up via a small glue module that injects its logger, browser opener, interactivity detector, and config cache via a dependency- injection context.What stays in wrangler:
login/logout/whoami/auth tokencommandsCLOUDFLARE_API_TOKEN,CLOUDFLARE_API_KEY/CLOUDFLARE_EMAIL, etc.)requireAuth,getOrSelectAccountId)string[])whoami/ account fetchingNo behavior change for end users. The on-disk TOML format and location remain identical, and all telemetry message labels are preserved verbatim.
@cloudflare/workers-authis published withprerelease: trueand is not intended for external use — its APIs may change without notice.#14162
0bb2d55Thanks @dario-piotrowicz! - In non-interactive mode remove the skills installation messageWhen Wrangler run in non interactive mode and it detected agents that it could install skills for, it would print a message such as:
Cloudflare agent skills are available for: <DETECTED_AGENTS>. Run wrangler in an interactive terminal to install them, or use '--install-skills' to install without prompting.This message seems to be confusing and unhelpful so it has now been removed.
#14165
8400fb9Thanks @NuroDev! - Limitwrangler versions listto the 10 most recent deployable versionsThe versions API ignores pagination when filtering to deployable versions, so Wrangler now caps the command output client-side. This keeps the command aligned with its help text and avoids overwhelming terminal output for Workers with many versions.
#14151
7949f81Thanks @dario-piotrowicz! - Skip stale bundles during dev server reload to avoid redundant restartsWhen rapidly saving a wrangler config file with remote bindings, each save would trigger a full reload cycle (remote connection setup, miniflare restart), causing many sequential "Reloading local server... / Establishing remote connection..." messages (while blocking the user). The runtime controllers now check whether a newer bundle has been queued at each expensive async boundary and bail out early if the current bundle is stale. This ensures that only the latest config change triggers a reload, making
wrangler devmuch more responsive during repeated config edits.#14072
d462013Thanks @himanshu-cf! - Updatewrangler secret bulkcommand description to reflect create/update/delete capabilitiesThe help text for
wrangler secret bulknow accurately describes that the command can create, update, or delete multiple secrets in a single request, with up to 100 secrets per command. The file argument description also clarifies that setting a key tonullin JSON will delete it, and that deletion is not supported with.envfiles.#13979
c2280cdThanks @matingathani! - Warn when a named environment silently inherits custom_domain routes from the top-level configWhen an
env.<name>block does not overrideroutes, it inherits the top-levelroutesarray. If that array contains entries withcustom_domain: true, every deploy to the named environment will silently reassign the custom domain away from the top-level Worker and towards the env Worker, causing routing drift. Wrangler now emits a warning in this situation and suggests adding"routes": []to the env block to prevent inheritance.#14170
ea12b58Thanks @petebacondarwin! - Tighten on-disk permissions of the OAuth credentials file to0600The user auth config file written by
wrangler login(typically~/.config/.wrangler/config/default.tomlon Linux/macOS, or<environment>.tomlfor non-production Cloudflare API environments) is now written with mode0600and re-chmod-ed on every save. This prevents other local users on shared hosts from reading the stored OAuth tokens. Existing files with looser permissions written by older Wrangler versions are tightened the next time Wrangler refreshes the token or the user logs in again. The change is a no-op on Windows, which does not honour POSIX mode bits.#14022
acf7817Thanks @petebacondarwin! - Show the actual OAuth error instead of hanging whenwrangler loginis rejected by the OAuth provider (for example withinvalid_scope).Previously, if the OAuth callback returned with an
errorother thanaccess_denied, Wrangler would never respond to the browser. Becauseserver.close()'s callback only fires once all open connections have ended, the login command would hang until the 120 second OAuth timeout — at which point it would print a generic timeout message rather than the actual OAuth failure. The same gap existed for the case where the OAuth provider redirected back without an authorisation code, and for failures during the auth-code-to-access-token exchange.The OAuth provider's
error_description(RFC 6749 §4.1.2.1) is now also surfaced, so the message includes the specific reason for the failure rather than just the bareerrorcode. For example, a misconfigured staging scope now surfaces as:instead of hanging silently.
Updated dependencies [
a3eea27,1fdd8de,b502d54,3b8b80a]:v4.97.0Compare Source
Minor Changes
#13996
94b29f7Thanks @vaishnav-mk! - Add restart-from-step options towrangler workflows instances restartYou can now restart a Workflow instance from a specific step using
--from-step-name, with optional--from-step-countand--from-step-typedisambiguation. These options work for both remote Workflow instances and localwrangler dev --localsessions.Patch Changes
#14141
b210c5eThanks @MattieTK! - Add re-authentication hint to account fetch error messagesWhen Wrangler fails to automatically retrieve account IDs, the error messages now suggest running
wrangler loginas a troubleshooting step. This addresses confusion for users who encounter these errors after OAuth system changes or other authentication issues.#14078
aec1bb8Thanks @MattieTK! - Bumpam-i-vibingfrom 0.1.1 to 0.4.0This updates the agentic environment detection library to the latest version, which includes improved detection coverage for newer AI coding agents.
#14147
e06cbb7Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14027
9a26191Thanks @matingathani! - Gracefully handle EMFILE error when assets directory exceeds OS watcher limitPreviously, when
wrangler devwas pointed at an assets directory with more than ~4,096 subdirectories, the chokidar file watcher threw anEMFILE: too many open fileserror that was not caught, causing an infinite error loop that made the dev server unresponsive.Now the error is caught and wrangler:
#14041
5565823Thanks @matingathani! - Fixwrangler completeprinting the AI skills prompt into shell completion outputPreviously, running
eval "$(wrangler complete zsh)"(or any other shell) would fail with errors likezsh: command not found: --install-skillsbecause the interactive AI agent skills installation prompt was included in the completion script output.The skills prompt is now skipped when running
wrangler complete, so the generated completion script is clean and can be sourced correctly.#13881
890fca7Thanks @matingathani! - Show a clear error when--metadatais not valid JSON instead of silently ignoring the value#14149
6fc9777Thanks @mattjohnsonpint! - Fixwrangler deploy --upload-source-mapssilently skipping source maps when the entry file ends with magic comments after//# sourceMappingURL=Wrangler previously assumed the
//# sourceMappingURL=comment was the last non-empty line of a module. Tools likesentry-cli sourcemaps injectappend a//# debugId=comment after it, which silently caused source maps to be omitted from the upload form, most commonly when deploying with--no-bundle --upload-source-maps. Wrangler now scans trailing magic comments (lines starting with//#or//@​) and detects the//# sourceMappingURL=comment regardless of which other magic comments follow it.#14105
337e912Thanks @dario-piotrowicz! - Remove trailing periods from URLs in terminal outputURLs printed to the terminal with a sentence-ending period (e.g.
https://example.com/path.) would include the period when clicked in some terminal emulators, causing 404 errors. This removes trailing periods from all URLs displayed in CLI output across wrangler, miniflare, vitest-pool-workers, and workers-utils.#14150
8e7b74fThanks @avenceslau! - Fix Workflowsschedulesdeploy payload to match the control plane APIWhen deploying a Workflow with a
schedulesbinding property, Wrangler sent the cron expressions as a list of strings. The Workflows API expects a list of objects of the form{ cron: string }, so the request was rejected. Wrangler now maps each configured cron expression to{ cron }(normalizing a single string or an array) when building the request. The user-facing config still accepts a string or an array of strings.#14084
e86489aThanks @dario-piotrowicz! - Fix JSON variable bindings inwrangler init --from-dashand remote config diffWhen fetching a remote Worker's configuration, JSON variable bindings (e.g.
{"my_value": 5}) were incorrectly serialized as{ "name": "MY_JSON", "json": {"my_value": 5} }instead of{ "MY_JSON": {"my_value": 5} }. This affected two areas:wrangler init --from-dashwould generate awrangler.jsonwith brokenvarsentriesBoth issues are now fixed and remote JSON bindings are now correctly mapped.
#14155
42288d4Thanks @dario-piotrowicz! - Include agent skill installation status in all telemetry eventsThe agent skill installation status is now consistently included in all telemetry events, not just a subset of them.
#14063
65b5f9eThanks @emily-shen! - Move fetch helpers into@cloudflare/workers-utilsShared Cloudflare API fetch helper types and plumbing now live in
@cloudflare/workers-utilsso Wrangler and other clients can use the same implementation.#14112
3a746acThanks @penalosa! - Pin non-bundled runtime dependencies to exact versionsDependencies that are not bundled into a package's published output are installed directly into consumers' dependency trees, so they are now pinned to exact versions instead of semver ranges. This closes a supply-chain gap where an unpinned external dependency could resolve to a compromised upstream release on a fresh install. A new
pnpm check:pinned-depslint enforces this for all published packages (and for the shared pnpm catalog) going forward.#14124
64ef9fdThanks @odiak! - Fixwrangler secret bulkdropping newlines from.envinput read from stdinPreviously,
.envinput piped through stdin was concatenated without line breaks, so only the first secret could be parsed correctly. Stdin input now preserves line separators before parsing.Updated dependencies [
e06cbb7,4ef790b,337e912,3a746ac]:v4.96.0Compare Source
Minor Changes
#14087
e3c862aThanks @edmundhung! - Add support for the newweb_searchbinding kind.Cloudflare Web Search is a managed, zero-setup web discovery primitive for agents and Workers. Declare the binding as a single object in
wrangler.jsonc:{ "web_search": { "binding": "WEBSEARCH" } }There is exactly one shared web corpus, so there is no namespace, instance, or other field to specify -- only the variable name. The binding exposes a single
search()method that returns URLs and catalog metadata for a query. Web Search is discovery-only -- to read a result's content the caller invokes the globalfetch()API against the result'surl.The binding is always remote in local development: Miniflare proxies to the production Web Search service via the remote-bindings transport. Adds the
websearch.runOAuth scope towrangler login.Also adds a
wrangler websearch searchcommand for running ad-hoc queries from the CLI:--limitis optional (defaults to 10, capped at 20).--jsonprints the raw response; without it the results render as a pretty table.#13610
cbb39bdThanks @petebacondarwin! - Add support foragent_memorybindingsAgent Memory bindings allow Workers to connect to Cloudflare's Agent Memory service for storing and retrieving agent conversation state. This binding is remote-only, meaning it always connects to the Cloudflare API during
wrangler devrather than using a local simulation.To configure an
agent_memorybinding, add the following to yourwrangler.json:{ "agent_memory": [ { "binding": "MY_MEMORY", "namespace": "my-namespace" } ] }Wrangler will automatically provision the namespace during deployment if it does not already exist. Type generation via
wrangler typesis also supported.This change also adds the
agent-memory:writeOAuth scope to Wrangler's default login scopes, sowrangler logincan request the permissions needed to provision and manage Agent Memory namespaces.#13610
cbb39bdThanks @petebacondarwin! - Addwrangler agent-memory namespacecommandsThe following commands have been added for managing Agent Memory namespaces:
#14087
e3c862aThanks @edmundhung! - Add confirmation prompt towrangler containers images deletePreviously, running
wrangler containers images delete IMAGE:TAGwould delete the image immediately with no confirmation. The command now prompts for confirmation before deleting. Use-yor--skip-confirmationto bypass the prompt in non-interactive or scripted environments.#14087
e3c862aThanks @edmundhung! - Renamepipelinefield tostreamin pipeline bindings configurationThe
pipelinefield insidepipelinesbindings has been renamed tostreamto align with the updated API wire format. The oldpipelinefield is still accepted but deprecated and will emit a warning.Before:
After:
#14087
e3c862aThanks @edmundhung! - Allow pipeline, stream, and sink commands to resolve resources by name with pagination-aware lookups.#14087
e3c862aThanks @edmundhung! - Support deleting secrets viawrangler secret bulkYou can now delete secrets in bulk by setting their value to
nullin the JSON input file:{ "SECRET_TO_DELETE": null, "SECRET_TO_UPDATE": "new-value" }#14091
4c0da7bThanks @gpanders! - Add ProxyCommand support forwrangler containers sshwrangler containers sshnow automatically switches to a stdio proxy when invoked by OpenSSH'sProxyCommand, and--stdiocan force this mode. This lets users connect withssh <instance_id>when their SSH config uses Wrangler as the proxy command.#13892
13cbadbThanks @penalosa! - Remove the deprecatedexperimental.testModeoption fromunstable_devexperimental.testModepreviously only affected the defaultlogLevel(warnwhentestMode: true,logotherwise) and has been flagged for removal in its type-definition comment since it landed. It is now removed, andunstable_dev's default log level matcheswrangler dev's (log).Callers that explicitly passed
testMode: trueto get quieter logs should now setlogLevel: "warn"directly.Patch Changes
#14016
408432aThanks @petebacondarwin! - report all failing triggers from a single deploywrangler deploydeploys several kinds of trigger in parallel (routes, custom domains, schedules, queue producers/consumers, workflows). Previously, if one of those API calls failed, the first rejection short-circuited the rest, no other deployments were reported, and (in the case of custom-domain confirmation conflicts) some failures were silently logged to stdout without the deploy actually failing.wrangler deploynow waits for every trigger deployment to settle, prints every successfully-deployed target (so you still see what landed), and then throws a single error listing every trigger that failed.Note that this also turns the previously-silent "user declined to override a conflicting Custom Domain" case into a hard failure of
wrangler deploy, which matches what was always implied by the message ("Publishing to Custom Domain ... was skipped, fix conflict and try again").#14125
1103c07Thanks @dario-piotrowicz! - Bumprosie-skillsfrom0.7.6to0.8.1and bundle it into the Wrangler outputThe new version of
rosie-skillsis a pure-TypeScript rewrite that removes the previously necessary ~600kb WASM binary. The package now ships only JavaScript with one minimal dependencies (modern-tar).Additionally,
rosie-skillsis now bundled directly into Wrangler's distributable rather than kept as an external runtime dependency. This eliminates the supply chain concern raised in #14110: there is no separate package to resolve at install time, since all code is inlined into Wrangler's build output.#14135
5b5cbd3Thanks @Refaerds! - Update the generated type for browser bindings toBrowserRunWhen running
wrangler types, browser bindings were previously typed as the genericFetcher. They now generate the more specific and accurateBrowserRuntype.#14087
e3c862aThanks @edmundhung! - Bumprosie-skillspackage from 0.6.3 to 0.7.6#14087
e3c862aThanks @edmundhung! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14076
97d7d81Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14100
c647cccThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14087
e3c862aThanks @edmundhung! - Disable Sentry error reporting by defaultWRANGLER_SEND_ERROR_REPORTSnow defaults tofalseinstead of prompting on every error. The current prompt produces too many false-positive reports. Users can still opt in explicitly by settingWRANGLER_SEND_ERROR_REPORTS=true.#14087
e3c862aThanks @edmundhung! - Fixwrangler setupfailing for Vite projects without a config filewrangler setup(andwrangler deploy --experimental-autoconfig) crashed with "Could not find Vite config file to modify" for Vite projects that don't have avite.config.jsorvite.config.ts. This affected 6 of the 16create-vitetemplates:vanilla,vanilla-ts,react-swc,react-swc-ts,lit, andlit-ts.Autoconfig now creates a minimal Vite config with the Cloudflare plugin when no config file exists, instead of failing. The file extension (
.tsor.js) is chosen based on whether the project has atsconfig.json.#14087
e3c862aThanks @edmundhung! - Show helpful message with URL when browser cannot be opened in headless/container environmentsPreviously, running
wrangler login(or any command that opens a browser) in headless Linux environments withoutxdg-openinstalled would crash with a confusing "A file or directory could not be found — Missing file or directory: xdg-open" error.Now wrangler catches the error and prints a clear warning with the URL so users can copy-paste it into a browser manually.
#14087
e3c862aThanks @edmundhung! -wrangler secrets-store secret createandsecret updatenow reject secret values larger than 64 KiB (65,536 bytes) with a clear error before calling the Cloudflare API. Previously the CLI accepted them, the secret appeared insecret list, and the failure surfaced later (and confusingly) at worker deploy time as a "secret doesn't exist" error against the binding. 64 KiB is the cap enforced by the API; the CLI now enforces it at the same boundary.#14059
b64b7e4Thanks @matingathani! - Fixwrangler kv bulk getprinting "Success!" to stdout, which corrupted JSON output when piped to tools likejq#14002
e4c8fd9Thanks @danyalahmed1995! - Show a clear error for invalid API token header charactersWrangler now detects API tokens containing characters that cannot be sent in the HTTP Authorization header before making an API request. This avoids a low-level ByteString conversion error and helps users recreate or recopy the token without printing the token value.
#14132
2dffeebThanks @dario-piotrowicz! - Adapt React Router autoconfig based onv8_middlewarefuture flagThe React Router autoconfig (
wrangler setup) now detects whetherv8_middleware: trueis set in the user'sreact-router.config.ts. When it is, the generatedworkers/app.tsuses a simplified fetch handler withoutAppLoadContextmodule augmentation, and the generatedapp/entry.server.tsxomits the_loadContextparameter. Whenv8_middlewareis not set, the existingAppLoadContextpattern withenv/ctxparams is preserved.This avoids breaking projects that use the
v8_middlewarefuture flag (which changes the context API fromAppLoadContexttoRouterContextProvider), while keeping the traditional pattern for projects that haven't opted in.#14133
59e43e4Thanks @matingathani! - Fixwrangler whoamiprinting a trailing period after the api-tokens URLThe message
To see token permissions visit https://...api-tokens.ended witha period that became part of the URL when clicked in terminals or GitHub Actions
output, causing a 404. The period is removed and a comma added before "visit"
so the sentence reads naturally without a trailing period on the URL.
Updated dependencies [
e3c862a,cbb39bd,7bb5c7a,e3c862a,97d7d81,c647ccc,e3c862a,e3c862a,972d13d]:v4.95.0Compare Source
Minor Changes
#14009
ca5b604Thanks @dario-piotrowicz! - Add telemetry for detecting whether AI coding agents have Cloudflare skills installedWrangler now includes a
currentAgentSkillsInstalledproperty in telemetry events that reports whether the current AI coding agent has Cloudflare skills present on disk. The value distinguishes between skills installed automatically by Wrangler ("automatic"), skills installed manually by the user ("manual"), no skills present (false), or no supported agent detected (null). Skill names are fetched from the GitHub Contents API with a 24-hour disk cache to avoid rate limits.#14014
d042705Thanks @emily-shen! - Add--x-deploy-helpersto gate an upcoming deploy path refactor.Patch Changes
#14003
c1fd2fdThanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#13728
49c1a59Thanks @penalosa! - Rejectremote: falseon always-remote bindings (AI, AI Search, Media, Artifacts, Flagship, VPC Service, VPC Network)These binding types have no local simulator and the resource is fundamentally remote-only. Setting
remote: falsewas previously silently accepted but produced a non-functional binding.wrangler devnow fails with a clear error directing users to either remove theremotefield or set it totrue.#14039
fee1ce4Thanks @dario-piotrowicz! - Preserve--compatibility-flagsin the interactive deploy config flowWhen running
wrangler deploywithout a config file and going through the interactive setup flow, any--compatibility-flagspassed on the command line (e.g.--compatibility-flags=nodejs_compat) were lost in two places:wrangler.jsoncfile did not includecompatibility_flags.--compatibility-flags.Both are now fixed. Compatibility flags are persisted to the generated config and included in the suggested command.
#14010
b3962ffThanks @dario-piotrowicz! - Improve error messages for Pages CLI commandsError messages across
wrangler pagessubcommands (deploy, dev, secret, project, etc.) now provide clearer descriptions and actionable guidance. For example, instead of "Must specify a project name.", you'll now see "Missing Pages project name. Use --project-name or set the name in your wrangler.jsonc configuration file."#14011
420e457Thanks @petebacondarwin! - Warn when a remote-bindings request is blocked by Cloudflare AccessWhen
wrangler devis used with remote bindings and a request from the local remote-bindings proxy client to the remote workers.dev proxy server is blocked by Cloudflare Access (HTTP 403 with the Cloudflare Access block page), Wrangler now:CLOUDFLARE_ACCESS_CLIENT_ID/CLOUDFLARE_ACCESS_CLIENT_SECRET(Service Token credentials) or runcloudflared access loginto authenticate.InferenceUpstreamErrorfromenv.AI.run()) and any browser response piped back via a service binding.fetch().Previously the 403 was returned to user code with the full Access HTML, which both drowned out other logs and made it hard to tell that the failure was due to Cloudflare Access on workers.dev rather than a problem in the binding itself or the deployed proxy server. The detection runs inside the proxy client worker (which only ever talks to the remote-bindings proxy URL), so it does not trigger false positives on user-worker 403s.
#14044
8b1467eThanks @pombosilva! - Rename Workflow bindingscheduleproperty toschedulesThe
scheduleproperty on Workflow bindings introduced in #13467 has been renamed toschedulesto match the control plane API.Updated dependencies [
c1fd2fd,420e457]:v4.94.0Compare Source
Minor Changes
#13897
52e9082Thanks @dario-piotrowicz! - Add automatic Cloudflare skills installation for AI coding agentsWrangler now detects AI coding agents and offers to install Cloudflare skill files from the
cloudflare/skillsGitHub repository. Users are prompted once interactively; subsequent runs skip the prompt. Use--install-skillsto install without prompting.#13989
f598eacThanks @MattieTK! - Print a QR code alongside the tunnel URL when sharing via Cloudflare TunnelWhen a tunnel is started (via
wrangler dev --tunnelor the Vite plugin withtunnel: true), a scannable QR code is now printed to the terminal beneath the tunnel URL. This makes it easy to open the tunnel on a mobile device without manually copying the URL.The QR code uses Unicode block characters for a compact representation and is generated best-effort -- if generation fails for any reason, the tunnel URL is still displayed as before.
#13467
3a1fbedThanks @deloreyj! - Addscheduleproperty to Workflow bindings for cron-based triggeringWorkflow bindings in
wrangler.jsonnow accept an optionalschedulefield that configures one or more cron expressions to automatically trigger new workflow instances on a schedule.Multiple schedules can be provided as an array:
{ "workflows": [ { "binding": "MY_WORKFLOW", "name": "my-workflow", "class_name": "MyWorkflow", "schedule": ["0 9 * * 1", "0 17 * * 5"] } ] }The schedule is sent to the Workflows control plane on
wrangler deploy. Configuringscheduleon a workflow binding that references an externalscript_nameis an error — the schedule must be configured on the worker that defines the workflow.Patch Changes
#13993
0733688Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
#14008
fc1f7b9Thanks @petebacondarwin! - Fix Access Service Token authentication for applications that only allow service tokensWhen using remote bindings against a Worker behind a Cloudflare Access application configured to only allow Service Auth tokens (no interactive user authentication), Wrangler previously ignored the
CLOUDFLARE_ACCESS_CLIENT_IDandCLOUDFLARE_ACCESS_CLIENT_SECRETenvironment variables and the request would fail with a 403.This happened because Wrangler detects Access by looking for a 302 redirect to
cloudflareaccess.com. A service-auth-only Access application has no interactive login path, so it responds with a hard 403 instead of redirecting. Wrangler concluded the domain was not behind Access and skipped attaching the service token headers entirely.The env-var check now runs before the Access detection step, so the configured service token credentials are always used when present.
#12277
8c569c6Thanks @penalosa! - Include column names in D1 SQL export INSERT statementsD1 SQL exports now include column names in INSERT statements (e.g.,
INSERT INTO "table" ("col1","col2") VALUES(...)). This ensures that exported SQL can be successfully imported even when the target table has columns in a different order than the original, which commonly occurs during iterative development when schemas evolve.Updated dependencies [
0733688,30657e1]:v4.93.1Compare Source
Patch Changes
#13978
fa1f61fThanks @sassyconsultingllc! - Bumpwsfrom 8.18.0 to 8.20.1 to address GHSA-58qx-3vcg-4xpx[GHSA-58qx-3vcg-4xpx](https://redirect.git
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.