NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4709 most downloaded on npm
Command-line interface for all things Cloudflare Workers
Last release today
17 Sep 2026
Ships on a steady schedule
a new release about every 1 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
119 versions withdrawn
withdrawn after publishing
14 years old
4938 releases · first in 2012
You can now configure Artifacts bindings in your wrangler configuration:
#13326 4a9ba90 Thanks @mattzcarey! - Add Artifacts binding support to wrangler
You can now configure Artifacts bindings in your wrangler configuration:
// wrangler.jsonc
{
"artifacts": [{ "binding": "MY_ARTIFACTS", "namespace": "default" }]
}
Type generation produces the correct Artifacts type reference from the workerd type definitions:
interface Env {
MY_ARTIFACTS: Artifacts;
}
#13567 d8c895a Thanks @gpanders! - Rename the documented containers SSH config option to ssh
Wrangler now accepts and documents containers.ssh in config files while continuing to accept containers.wrangler_ssh as an undocumented backwards-compatible alias. Wrangler still sends and reads wrangler_ssh when talking to the containers API.
#13571 7dc0433 Thanks @must108! - Add regional and jurisdictional placement constraints for Containers. Users can now set constraints.regions and constraints.jurisdiction in wrangler config to control where containers run.
#12600 50bf819 Thanks @penalosa! - Use workerd's debug port to power cross-process service bindings, Durable Objects, and tail workers via the dev registry. This enables Durable Object RPC via the dev registry, and is an overall stability improvement.
#13160 05f4443 Thanks @JoaquinGimenez1! - Log a helpful error message when AI binding requests fail with a 403 authentication error
Previously, when the AI proxy token expired during a long session, users received an unhelpful 403 error. Now, wrangler detects error code 1031 and suggests running wrangler login to refresh the token.
#13557 8ca78bb Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260415.1 | 1.20260416.2 |
#13579 b6e1351 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260416.2 | 1.20260417.1 |
#13604 d8314c6 Thanks @petebacondarwin! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260417.1 | 1.20260420.1 |
#13515 b35617b Thanks @petebacondarwin! - fix: ensure esbuild context is disposed during teardown
The esbuild bundler cleanup function could race with the initial build. If BundlerController.teardown() ran before the initial build() completed, the stopWatching closure variable would still be undefined, so the esbuild context was never disposed. This left the esbuild child process running, keeping the Node.js event loop alive and causing processes to hang instead of exiting cleanly.
The cleanup function now awaits the build promise before calling stopWatching, ensuring the esbuild context is always properly disposed.
#13470 4fda685 Thanks @penalosa! - fix: prevent remote binding sessions from expiring during long-running dev sessions
Preview tokens for remote bindings expire after one hour. Previously, the first request after expiry would fail before a refresh was triggered. This change proactively refreshes the token at 50 minutes so no request ever sees an expired session.
The reactive recovery path is also improved: error code: 1031 responses (returned by bindings such as Workers AI when their session times out) now correctly trigger a refresh, where previously only Invalid Workers Preview configuration HTML responses did.
Auth credentials are now resolved lazily when a remote proxy session starts rather than at bundle-complete time. This means that if your OAuth access token has been refreshed since wrangler dev started, the new token is used rather than the one captured at startup.
#12456 59eec63 Thanks @venkatnikhilm! - Improve validation and error messaging for R2 CORS configuration files to catch AWS S3-style formatting mistake.
#13444 cc1413a Thanks @naile! - fix: Pass force query parameter to API in pages deployment delete
#11918 d0a9d1c Thanks @ksawaneh! - Allow wrangler r2 bucket list to run without a valid Wrangler config
This is an account-level command and does not require parsing wrangler.toml/wrangler.jsonc. Previously, an invalid local config could prevent listing buckets, making it harder to fix the config.
#13516 4eb1da9 Thanks @jonnyparris! - Rename "Browser Rendering" to "Browser Run" in all user-facing strings, error messages, and CLI output.
#13575 6d887db Thanks @lambrospetrou! - Add D1 export prompt message for unavailability, use --skip-confirmation to not show the prompt.
#13473 5716d69 Thanks @MattieTK! - Update am-i-vibing to v0.1.1 for improved agentic environment detection
Updated dependencies [4a9ba90, b35617b, 8ca78bb, b6e1351, d8314c6, 7f50300, 4fda685, be5e6a0, e456952, 50bf819, 4eb1da9, 8ca78bb, 266c418]:
One column per quarter.
This changes the status of the Containers CLI from open beta to stable. Wrangler no longer shows [open beta] labels or beta warning text for wrangler
#13391 60565dd Thanks @mikenomitch! - Mark wrangler containers commands as stable
This changes the status of the Containers CLI from open beta to stable. Wrangler no longer shows [open beta] labels or beta warning text for wrangler containers commands, so the help output matches the feature's current availability.
#13311 6cbcdeb Thanks @ryanking13! - JS files imported by the Python Workers runtime SDK are now handled as ESM modules.
This is not a user-facing change, but Python Workers users should update their wrangler version to make sure to get Python workers SDK working properly.
#13450 6f63eaa Thanks @petebacondarwin! - Fix POST/PUT requests with non-2xx responses throwing "fetch failed"
Previously, sending a POST or PUT request that received a non-2xx response (e.g. 401, 400, 403) would throw a TypeError: fetch failed error. This was caused by an undici bug where isTraversableNavigable() incorrectly returned true, causing the 401 credential-retry block to execute in Node.js and fail on stream-backed request bodies. This has been fixed upstream in undici v7.24.8, so we've bumped our dependency and removed the previous pnpm patch workaround.
#13447 aef9825 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260410.1 | 1.20260413.1 |
#13475 eaaa728 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260413.1 | 1.20260415.1 |
#13386 5e5bbc1 Thanks @mksglu! - Make startup network requests non-blocking on slow connections
Wrangler makes network requests during startup (npm update check, request.cf data fetch) that previously blocked the CLI indefinitely on slow or degraded connections (airplane wifi, trains), causing 10+ second delays.
update-check library's auth-retry path.request.cf fetch: The fetch to workers.cloudflare.com/cf.json now uses AbortSignal.timeout(3000), falling back to cached/default data on timeout.#13469 07a918c Thanks @1000hz! - wrangler preview no longer warns on inheritable binding types being missing from previews config.
#13463 90aee27 Thanks @roerohan! - Remove unnecessary flagship:read OAuth scope
The flagship:read scope is not needed since flagship:write already implies read access. This reduces the OAuth permissions requested during login to only what is required.
Updated dependencies [854d66c, 6f63eaa, aef9825, eaaa728, 58292f6, 5e5bbc1, d5ff5a4, 89c7829]:
### Patch Changes - #13457 `9b2b6ba` Thanks @jamesopstad! - Add Flagship OAuth scopes to wrangler login
9b2b6ba Thanks @jamesopstad! - Add Flagship OAuth scopes to wrangler loginThe flagship:read and flagship:write OAuth scopes have been temporarily commented out from the default scopes requested during login, as they are not
#13453 6b11b07 Thanks @petebacondarwin! - Disable flagship OAuth scopes that are not yet valid in the Cloudflare backend
The flagship:read and flagship:write OAuth scopes have been temporarily commented out from the default scopes requested during login, as they are not yet recognized by the Cloudflare backend.
#13438 dd4e888 Thanks @dependabot! - fix: handle Vike config files that use a variable-referenced default export
Newer versions of create-vike (0.0.616+) generate pages/+config.ts files using const config: Config = { ... }; export default config; instead of the previous export default { ... } satisfies Config;. The Wrangler autoconfig AST transformation now resolves Identifier exports to their variable declarations, supporting both old and new Vike config file formats.
Adds end-to-end support for the Flagship feature flag binding, which allows Workers to evaluate feature flags from Cloudflare's Flagship service. Conf
#13353 5338bb6 Thanks @mattzcarey! - Add artifacts:write to Wrangler's default OAuth scopes, enabling wrangler login to request access to Cloudflare Artifacts (registries and artifacts).
#13139 79fd529 Thanks @roerohan! - feat: add Flagship feature flag binding support
Adds end-to-end support for the Flagship feature flag binding, which allows Workers to evaluate feature flags from Cloudflare's Flagship service. Configure it in wrangler.json with a flagship array containing binding and app_id entries. In local dev, the binding returns default values for all flag evaluations; use "remote": true in the binding to evaluate flags against the live Flagship service.
#12983 28bc2be Thanks @1000hz! - Added the wrangler preview command family for creating Preview deployments (currently in private beta).
#13197 4fd138b Thanks @shahsimpson! - Add preview output-file entries for wrangler preview deployments
wrangler preview now writes a preview entry to the Wrangler output file when WRANGLER_OUTPUT_FILE_PATH or WRANGLER_OUTPUT_FILE_DIRECTORY is configured. The entry includes the Worker name, preview metadata (preview_id, preview_name, preview_slug, preview_urls) and deployment metadata (deployment_id, deployment_urls).
This makes preview command runs machine-readable in the same output stream as other Wrangler commands, which helps CI integrations consume preview URLs and IDs directly.
#13159 bafb96b Thanks @ruifigueira! - Add wrangler browser commands for managing Browser Rendering sessions
New commands for Browser Rendering DevTools:
wrangler browser create [--lab] [--keepAlive <seconds>] [--open] - Create a new sessionwrangler browser close <sessionId> - Close a sessionwrangler browser list - List active sessionswrangler browser view [sessionId] [--target <selector>] [--open] - View a live browser sessionThe view command auto-selects when only one session exists, or prompts for selection when multiple are available.
The --open flag controls whether to open DevTools in browser (default: true in interactive mode, false in CI/scripts). Use --no-open to just print the DevTools URL.
All commands support --json for programmatic output. Also adds browser:write OAuth scope to wrangler login.
#13392 2589395 Thanks @emily-shen! - Add telemetry to local REST API
The local REST API (used by the local explorer) now collects anonymous usage telemetry. This respects any existing telemetry preferences, which can be disabled by running the command wrangler telemetry disable.
This only applies when the dev session is started via Wrangler, and not via the Vite plugin or standalone Miniflare.
No actual data values, keys, query contents, or resource IDs are collected.
Event schema:
{
"event": "localapi.<route>.<method>", // e.g. localapi.kv.keys.get
"deviceId": "<uuid>",
"timestamp": 1234567890,
"properties": {
"userAgent": "Mozilla/5.0 ...",
// Only for localapi.local.workers.get:
"workerCount": 2,
"kvCount": 3,
"d1Count": 1,
"r2Count": 0,
"doCount": 1,
"workflowsCount": 0
}
}
Note: the Local Explorer and corresponding local REST API is still an experimental feature.
#13137 1313275 Thanks @emily-shen! - explorer: expose the local explorer hotkey
List the local explorer's hotkey [e] in wrangler dev output.
#13393 c50cb5b Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260409.1 | 1.20260410.1 |
#13424 525a46b Thanks @paulelliotco! - Keep proxy notices off stdout for JSON Wrangler commands
Wrangler now writes the startup notice for HTTP_PROXY and HTTPS_PROXY to stderr instead of stdout. This keeps commands like wrangler auth token --json machine-readable when a proxy is configured.
Updated dependencies [79fd529, c50cb5b, 2589395, 5eff8c1]:
The following dependency versions have been updated:
#13337 c510494 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260405.1 | 1.20260408.1 |
#13362 8b71eca Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260408.1 | 1.20260409.1 |
#13329 7ca6f6e Thanks @G4brym! - fix: Treat AI Search bindings as always-remote in local dev
AI Search namespace (ai_search_namespaces) and instance (ai_search) bindings are always-remote (they have no local simulation), but pickRemoteBindings() did not include them in its always-remote type list. This caused the remote proxy session to exclude these bindings when remote: true was not explicitly set in the config, resulting in broken AI Search bindings during wrangler dev.
Additionally, removeRemoteConfigFieldFromBindings() in the deploy config-diff logic was not stripping the remote field from AI Search bindings, which could cause false config diffs during deployment.
Updated dependencies [42c7ef0, c510494, 8b71eca, a42e0e8]:
wrangler email routing list - list zones with email routing status
#12932 96ee5d4 Thanks @thomasgauvin! - feat: add wrangler email routing and wrangler email sending commands
Email Routing commands:
wrangler email routing list - list zones with email routing statuswrangler email routing settings <domain> - get email routing settings for a zonewrangler email routing enable/disable <domain> - enable or disable email routingwrangler email routing dns get/unlock <domain> - manage DNS recordswrangler email routing rules list/get/create/update/delete <domain> - manage routing rules (use catch-all as the rule ID for the catch-all rule)wrangler email routing addresses list/get/create/delete - manage destination addressesEmail Sending commands:
wrangler email sending list - list zones with email sendingwrangler email sending settings <domain> - get email sending settings for a zonewrangler email sending enable <domain> - enable email sending for a zone or subdomainwrangler email sending disable <domain> - disable email sending for a zone or subdomainwrangler email sending dns get <domain> - get DNS records for a sending domainwrangler email sending send - send an email using the builder APIwrangler email sending send-raw - send a raw MIME email messageAlso adds email_routing:write and email_sending:write OAuth scopes to wrangler login.
#13241 7d318e1 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260401.1 | 1.20260402.1 |
#13305 fa6d84f Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260402.1 | 1.20260405.1 |
#13193 78cbe37 Thanks @dario-piotrowicz! - During autoconfig filter out Hono when there are 2 detected frameworks
During the auto-configuration process Hono is now treated as an auxiliary framework (like Vite) and automatically filtered out when two frameworks are detected (before Hono was being filtered out only when the other framework was Waku).
#13205 6fa5dfd Thanks @petebacondarwin! - fix: use formatConfigSnippet for compatibility_date warning in wrangler dev
The compatibility_date warning shown when no date is configured in wrangler dev was hardcoded in TOML format. This now uses formatConfigSnippet to render the snippet in the correct format (TOML or JSON) based on the user's config file type.
Updated dependencies [a3e3b57, 7d318e1, fa6d84f, 7d318e1, 7a60d4b]:
Running wrangler types now generates AiSearchNamespace and AiSearchInstance types for ai_search_namespaces and ai_search config bindings respectively.
#13151 9c4035b Thanks @G4brym! - Add type generation for AI Search bindings
Running wrangler types now generates AiSearchNamespace and AiSearchInstance types for ai_search_namespaces and ai_search config bindings respectively. Both simple and per-environment modes are supported.
// wrangler.json
{
"ai_search_namespaces": [
{ "binding": "AI_SEARCH", "namespace": "production" }
],
"ai_search": [
{ "binding": "BLOG_SEARCH", "instance_name": "cloudflare-blog" }
]
}
// Generated by `wrangler types`
interface Env {
AI_SEARCH: AiSearchNamespace;
BLOG_SEARCH: AiSearchInstance;
}
#13011 b9b7e9d Thanks @ruifigueira! - Add experimental headful browser rendering support for local development
Experimental: This feature may be removed or changed without notice.
When developing locally with the Browser Rendering API, you can enable headful (visible) mode via the X_BROWSER_HEADFUL environment variable to see the browser while debugging:
X_BROWSER_HEADFUL=true wrangler dev
X_BROWSER_HEADFUL=true vite dev
Note: when using @cloudflare/playwright, two Chrome windows may appear — the initial blank page and the one created by browser.newPage(). This is expected behavior due to how Playwright handles browser contexts via CDP.
#12992 48d83ca Thanks @RiscadoA! - Add vpc_networks binding support for routing Worker traffic through a Cloudflare Tunnel or network.
{
"vpc_networks": [
// Route through a specific Cloudflare Tunnel
{ "binding": "MY_FIRST_VPC", "tunnel_id": "<tunnel-id>" },
// Route through the Cloudflare One mesh network
{ "binding": "MY_SECOND_VPC", "network_id": "cf1:network" }
]
}
#13155 5d29055 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260329.1 | 1.20260331.1 |
#13162 fb67a18 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260331.1 | 1.20260401.1 |
#13136 ab44870 Thanks @petebacondarwin! - Display build errors for auxiliary workers in multi-worker mode
Previously, when running wrangler dev with multiple -c config flags (multi-worker mode), build errors from auxiliary/secondary workers were only logged at debug level, causing Wrangler to silently hang. Build errors from all workers are now displayed at error level so you can see what went wrong and fix it.
#12992 48d83ca Thanks @RiscadoA! - Fix remote proxy worker not catching errors thrown by bindings during wrangler dev
#13238 b2f53ea Thanks @guybedford! - Fix source phase imports in bundled and non-bundled Workers
Wrangler now preserves import source syntax when it runs esbuild, including module format detection and bundled deploy output. This fixes both --no-bundle and bundled deployments for Workers that import WebAssembly using source phase imports.
#10126 14e72eb Thanks @nekoze1210! - fix: Sort D1 migration files to ensure consistent chronological ordering
wrangler d1 migrations list and wrangler d1 migrations apply previously returned migration files in an order dependent on the filesystem, which could vary across operating systems. Migration filenames are now sorted alphabetically before being returned, ensuring consistent chronological ordering.
#13150 4dc94fd Thanks @dario-piotrowicz! - Polish Cloudflare Vite plugin installation during autoconfig
Projects using Vite 6.0.x were rejected by auto-configuration because the minimum supported version was set to 6.1.0 (the @cloudflare/vite-plugin peer dependency). The minimum version check is now 6.0.0, and when a project has Vite in the [6.0.0, 6.1.0) range, auto-configuration will automatically upgrade it to the latest 6.x before installing @cloudflare/vite-plugin.
#13051 d5bffde Thanks @dario-piotrowicz! - Use today's date as the default compatibility date
Previously, when generating a compatibility date for new projects or when no compatibility date was configured, the date was resolved by loading the locally installed workerd package via miniflare. This approach was unreliable in some package manager environments (notably pnpm). The logic now simply uses today's date instead, which is always correct and works reliably across all environments.
Updated dependencies [5d29055, fb67a18, d5bffde, b9b7e9d, b2f53ea, 48d83ca]:
Introduces a CLI surface for the Cloudflare AI Search API (open beta), including:
#12868 ffbc268 Thanks @danielgek! - Add wrangler ai-search command namespace for managing Cloudflare AI Search instances
Introduces a CLI surface for the Cloudflare AI Search API (open beta), including:
ai-search list, create, get, update, deleteai-search search with repeatable --filter key=value flagsai-search statsThe create command uses an interactive wizard to guide configuration. All commands require authentication via wrangler login.
#13097 cd0e971 Thanks @pombosilva! - Add --local flag to Workflows commands for interacting with local dev
All Workflows CLI commands now support a --local flag that targets a running wrangler dev session instead of the Cloudflare production API. This uses the /cdn-cgi/explorer/api/workflows endpoints served by the local dev server.
wrangler workflows list --local
wrangler workflows trigger my-workflow '{"key":"value"}' --local
wrangler workflows instances describe my-workflow latest --local
wrangler workflows instances pause my-workflow <id> --local --port 9000
By default, commands continue to hit remote (production). Pass --local to opt in, and optionally --port to specify a custom dev server port (defaults to 8787).
#13050 ed20a9b Thanks @dario-piotrowicz! - Add minimum and maximum version checks for frameworks during auto-configuration
When Wrangler automatically configures a project, it now validates the installed version of the detected framework before proceeding:
#13111 f214760 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260317.1 | 1.20260329.1 |
#13079 746858a Thanks @penalosa! - Fix getPlatformProxy and unstable_getMiniflareWorkerOptions crashing when assets is configured without a directory
getPlatformProxy and unstable_getMiniflareWorkerOptions now skip asset setup when the config has an assets block but no directory — instead of throwing "missing required directory property". This happens when an external tool like @cloudflare/vite-plugin handles asset serving independently.
#13112 9aad27f Thanks @dario-piotrowicz! - Fix autoconfig failing on waku projects that use hono
Waku has a tight integration with Hono, causing both to be detected simultaneously and triggering a "multiple frameworks found" error. Hono is now filtered out when Waku is also detected.
#13113 1fc5518 Thanks @dario-piotrowicz! - Skip lock file warning for static projects during autoconfig
Previously, running autoconfig on a static project (one with no framework detected) would emit a misleading warning about a missing lock file, suggesting the project might be in a workspace. Since static projects don't require a lock file, this warning is now suppressed for them.
#13072 b539dc7 Thanks @jbwcloudflare! - Skip unnecessary GET /versions?deployable=true API call in wrangler versions deploy when all version IDs are explicitly provided and --yes is passed
When deploying a specific version non-interactively (e.g. wrangler versions deploy <id> --yes), Wrangler previously always fetched the full list of deployable versions to populate the interactive selection prompt — even though the prompt is skipped entirely when --yes is used and all versions are already specified. The deployable-versions list is now only fetched when actually needed (i.e. when no version IDs are provided, or when running interactively).
#13115 2565b1d Thanks @dario-piotrowicz! - Improve error message when the assets directory path points to a file instead of a directory
Previously, if the path provided as the assets directory (via --assets flag or assets.directory config) pointed to an existing file rather than a directory, Wrangler would throw an unhelpful ENOTDIR system error when trying to read the _redirects file inside it. Now Wrangler detects this condition earlier and throws a clear user error.
Updated dependencies [9eff028, f214760, 9282493, a532eea, d4c6158]:
When running wrangler dev with remote bindings behind a Cloudflare Access-protected domain, Wrangler previously required cloudflared access login whic
#13031 eeaa473 Thanks @WalshyDev! - Add support for Cloudflare Access Service Token authentication via environment variables
When running wrangler dev with remote bindings behind a Cloudflare Access-protected domain, Wrangler previously required cloudflared access login which opens a browser for interactive authentication. This does not work in CI/CD environments.
You can now set the CLOUDFLARE_ACCESS_CLIENT_ID and CLOUDFLARE_ACCESS_CLIENT_SECRET environment variables to authenticate using an Access Service Token instead:
export CLOUDFLARE_ACCESS_CLIENT_ID="<your-client-id>.access"
export CLOUDFLARE_ACCESS_CLIENT_SECRET="<your-client-secret>"
wrangler dev
Additionally, when running in a non-interactive environment (CI) without these credentials, Wrangler now throws a clear, actionable error instead of hanging on cloudflared access login.
#13027 9fcdfca Thanks @G4brym! - feat: Add ai_search_namespaces and ai_search binding types
Two new binding types for AI Search:
ai_search_namespaces: Namespace binding — namespace is required and auto-provisioned at deploy time if it doesn't exist (like R2 buckets)ai_search: Single instance binding bound directly to a pre-existing instance in the default namespaceBoth are remote-only in local dev.
#12874 53ed15a Thanks @xortive! - Add Workers VPC service support for Hyperdrive origins
Hyperdrive configs can now connect to databases through Workers VPC services using the --service-id option:
wrangler hyperdrive create my-config --service-id <vpc-service-uuid> --database mydb --user myuser --password mypassword
This enables Hyperdrive to connect to databases hosted in private networks that are accessible through Workers VPC TCP services.
#12852 6b50bfa Thanks @Carolx715! - Add interactive data catalog validation to R2 object and lifecycle commands.
When performing R2 operations that could affect data catalog state (object put, object delete, lifecycle add, lifecycle set), Wrangler now validates with the API and prompts users for confirmation if a conflict is detected. For bulk put operations, Wrangler prompts upfront before starting the batch. Users can bypass prompts with --force (-y). In non-interactive/CI environments, the operation proceeds automatically.
#13030 0386553 Thanks @natewong1313! - Add local mode support for Stream bindings
Miniflare and wrangler dev now support using Cloudflare Stream bindings locally.
Supported operations:
upload() — upload video via URLvideo(id).details(), .update(), .delete(), .generateToken()videos.list()captions.generate(), .list(), .delete()downloads.generate(), .get(), .delete()watermarks.generate(), .list(), .get(), .delete()The following are not yet supported in local mode and will throw:
createDirectUpload()FileFileData is persisted across restarts by default. You must set streamPersist: false in Miniflare options to disable persistence.
#12874 53ed15a Thanks @xortive! - Add --cert-verification-mode option to wrangler vpc service create and wrangler vpc service update
You can now configure the TLS certificate verification mode when creating or updating a VPC connectivity service. This controls how the connection to the origin server verifies TLS certificates.
Available modes:
verify_full (default) -- verify certificate chain and hostnameverify_ca -- verify certificate chain only, skip hostname checkdisabled -- do not verify the server certificate at allwrangler vpc service create my-service --type tcp --tcp-port 5432 --ipv4 10.0.0.1 --tunnel-id <tunnel-uuid> --cert-verification-mode verify_ca
This applies to both TCP and HTTP VPC service types. When omitted, the default verify_full behavior is used.
#12874 53ed15a Thanks @xortive! - Add TCP service type support for Workers VPC
You can now create TCP services in Workers VPC using the --type tcp option:
wrangler vpc service create my-db --type tcp --tcp-port 5432 --ipv4 10.0.0.1 --tunnel-id <tunnel-uuid>
This enables exposing TCP-based services like PostgreSQL, MySQL, and other database servers through Workers VPC.
#13039 bc24ec8 Thanks @petebacondarwin! - fix: Angular auto-config now correctly handles projects without SSR configured
Previously, running wrangler deploy (or wrangler setup) on a plain Angular SPA (created with ng new without --ssr) would crash with Cannot set properties of undefined (setting 'experimentalPlatform'), because the auto-config code unconditionally assumed SSR was configured.
Angular projects without SSR are now treated as assets-only deployments: no wrangler.jsonc main entry is generated, angular.json is not modified, no src/server.ts is created, and no extra dependencies are installed.
#13036 0b4c21a Thanks @pbrowne011! - Fix wrangler deploy --dry-run skipping asset build-artifact validation checks
Previously, --dry-run skipped the entire asset sync step, which meant it also skipped validation that runs during asset manifest building. This included the check that errors when a _worker.js file or directory would be uploaded as a public static asset (which can expose private server-side code), as well as the per-file size limit check.
With this fix, --dry-run now runs buildAssetManifest against the asset directory when assets are configured, performing the same file-system validation as a real deploy without uploading anything or making any API calls.
#13061 535582d Thanks @petebacondarwin! - fix: resolve secondary worker types when environment overrides the worker name in multi-worker type generation
When running wrangler types with multiple -c config flags and the secondary worker has named environments that override the worker name (e.g. a worker named do-worker with env staging whose effective name becomes do-worker-staging), service bindings and Durable Object bindings in the primary worker that reference do-worker-staging now correctly resolve to the typed entry point instead of falling back to an unresolved comment type such as DurableObjectNamespace /* MyClass from do-worker-staging */.
The fix extends the secondary entries map to also register environment-specific worker names, so that lookups by the env-qualified name (e.g. do-worker-staging) resolve to the same source file as the base worker name.
#13058 992f9a3 Thanks @petebacondarwin! - fix: patch undici to prevent fetch() throwing on 401 responses with a request body
Fetching with a request body (string, JSON, FormData, etc.) to an endpoint that returns a 401 would throw TypeError: fetch failed with cause expected non-null body source. This affected Unstable_DevWorker.fetch() and any other use of undici's fetch in wrangler.
The root cause is isTraversableNavigable() in undici returning true unconditionally, causing the 401 credential-retry logic to run in Node.js where it should never apply (there is no browser UI to prompt for credentials). This is tracked upstream in nodejs/undici#4910. Until an upstream fix is released, we apply a patch to undici that returns false from isTraversableNavigable().
#13017 91b7f73 Thanks @petebacondarwin! - fix: prevent Docker container builds from spawning console windows on Windows
On Windows, detached: true in child_process.spawn() gives each child process its own visible console window, causing many windows to flash open during wrangler deploy with [[containers]]. The detached option is now only set on non-Windows platforms (where it is needed for process group cleanup), and windowsHide: true is added to further suppress console windows on Windows.
#12996 f6cdab2 Thanks @guybedford! - Fix source phase imports in bundled and non-bundled Workers
Wrangler now preserves import source syntax when it runs esbuild, including module format detection and bundled deploy output. This fixes both --no-bundle and bundled deployments for Workers that import WebAssembly using source phase imports.
#12931 ce65246 Thanks @dario-piotrowicz! - Improve error message when modules cannot be resolved during bundling
When a module cannot be resolved during bundling, Wrangler now suggests using the alias configuration option to substitute it with an alternative implementation. This replaces esbuild's default suggestion to "mark the path as external", which is not a supported option in Wrangler.
For example, if you try to import a module that doesn't exist:
import foo from "some-missing-module";
Wrangler will now suggest:
To fix this, you can add an entry to "alias" in your Wrangler configuration
to substitute "some-missing-module" with an alternative implementation.
See https://developers.cloudflare.com/workers/wrangler/configuration/#bundling-issues
This provides actionable guidance for resolving import errors.
#13049 7a5be20 Thanks @nikitassharma! - add library-push flag to containers registries credentials
This flag is not available for public use.
#13018 9c5ebf5 Thanks @tgarg-cf! - Validate that queue consumers in wrangler config only use the "worker" type
Previously, non-worker consumer types (e.g. http_pull) could be specified in the queues.consumers config. Now, wrangler will error if a consumer type other than "worker" is specified in the config file.
To configure non-worker consumer types, use the wrangler queues consumer CLI commands instead (e.g. wrangler queues consumer http-pull add).
Updated dependencies [9fcdfca, 1faff35, f4ea4ac, 0386553]:
When the new secrets property is defined, wrangler versions upload now validates that all secrets declared in secrets.required are configured on the W
#13023 593c4db Thanks @jamesopstad! - Add wrangler versions upload support for the experimental secrets configuration property
When the new secrets property is defined, wrangler versions upload now validates that all secrets declared in secrets.required are configured on the Worker before the upload succeeds. If any required secrets are missing, the upload fails with a clear error listing which secrets need to be set.
When secrets is not defined, the existing behavior is unchanged.
// wrangler.jsonc
{
"secrets": {
"required": ["API_KEY", "DB_PASSWORD"]
}
}
#12732 c2e9163 Thanks @jamesopstad! - Add deploy support for the experimental secrets configuration property
When the new secrets property is defined, wrangler deploy now validates that all secrets declared in secrets.required are configured on the Worker before the deploy succeeds. If any required secrets are missing, the deploy fails with a clear error listing which secrets need to be set.
When secrets is not defined, the existing behavior is unchanged.
// wrangler.jsonc
{
"secrets": {
"required": ["API_KEY", "DB_PASSWORD"]
}
}
#12896 451dae3 Thanks @petebacondarwin! - fix: Add retry and timeout protection to remote preview API calls
Remote preview sessions (wrangler dev --remote) now automatically retry transient 5xx API errors (up to 3 attempts with linear backoff) and enforce a 30-second per-request timeout. Previously, a single hung or failed API response during session creation or worker upload could block the dev session reload indefinitely.
#12569 379f2a2 Thanks @MattieTK! - Use qwik add cloudflare-workers instead of qwik add cloudflare-pages for Workers targets
Both the wrangler autoconfig and C3 Workers template for Qwik were running qwik add cloudflare-pages even when targeting Cloudflare Workers. This caused the wrong adapter directory structure to be scaffolded (adapters/cloudflare-pages/ instead of adapters/cloudflare-workers/), and required post-hoc cleanup of Pages-specific files like _routes.json.
Qwik now provides a dedicated cloudflare-workers adapter that generates the correct Workers configuration, including wrangler.jsonc with main and assets fields, a public/.assetsignore file, and the correct adapters/cloudflare-workers/vite.config.ts.
Also adds --skipConfirmation=true to all qwik add invocations so the interactive prompt is skipped in automated contexts.
#11899 9a1cf29 Thanks @hoodmane! - Remove cf-requirements support for Python workers. It hasn't worked with the runtime for a while now.
#11800 875da60 Thanks @southpolesteve! - Add upgrade hint to unexpected configuration field warnings when an update is available
When Wrangler encounters unexpected fields in the configuration file and a newer version of Wrangler is available, it now displays a message suggesting to update. This helps users who may be using configuration options that were added in a newer version of Wrangler.
Updated dependencies [b8f3309, 5aaaab2, 5aaaab2, f8516dd, 9c9fe30, 6a6449e]:
wrangler containers list now fetches from the /dash/applications endpoint instead of /applications, displaying results in a paginated table with colum
#12893 782df44 Thanks @gpanders! - Rewrite wrangler containers list to use the paginated Dash API endpoint
wrangler containers list now fetches from the /dash/applications endpoint instead of /applications, displaying results in a paginated table with columns for ID, Name, State, Live Instances, and Last Modified. Container state is derived from health instance counters (active, degraded, provisioning, ready).
The command supports --per-page (default 25) for interactive pagination with Enter to load more and q/Esc to quit, and --json for machine-readable output. Non-interactive environments load all results in a single request.
#12957 62545c9 Thanks @natewong1313! - Add Stream binding support to Wrangler and workers-utils
Wrangler and workers-utils now recognize the stream binding in configuration, deployment metadata, and generated worker types. This enables projects to declare Stream bindings in wrangler.json and have the binding represented consistently across validation, metadata mapping, and type generation.
#12848 ce48b77 Thanks @emily-shen! - Enable local explorer by default
This ungates the local explorer, a UI that lets you inspect the state of D1, DO and KV resources locally by visiting /cdn-cgi/explorer during local development.
Note: this feature is still experimental, and can be disabled by setting the env var X_LOCAL_EXPLORER=false.
#12938 71ab981 Thanks @dario-piotrowicz! - Add backward-compatible autoconfig support for Astro v5 and v4 projects
The astro add cloudflare command in older Astro versions installs the latest adapter version, which causes compatibility issues. This change adds manual configuration logic for projects using Astro versions before 6.0.0:
astro add cloudflare command (unchanged behavior)@astrojs/cloudflare@12 and manually configures the adapter@astrojs/cloudflare@11 and manually configures the adapter#11892 7c3c6c6 Thanks @staticpayload! - Handle registry ports when matching container image digests
Wrangler now strips tags without breaking registry ports when comparing local images to remote digests. This prevents unnecessary pushes for tags like localhost:5000/app:tag.
Updated dependencies [3c988e2, d028ffb, cb71403, 3a1c149, ce48b77, 8729f3d]:
Adds a new set of commands for managing remotely-managed Cloudflare Tunnels directly from Wrangler:
#12492 3b81fc6 Thanks @thomasgauvin! - feat: add wrangler tunnel commands for managing Cloudflare Tunnels
Adds a new set of commands for managing remotely-managed Cloudflare Tunnels directly from Wrangler:
wrangler tunnel create <name> - Create a new Cloudflare Tunnelwrangler tunnel list - List all tunnels in your accountwrangler tunnel info <tunnel> - Display details about a specific tunnelwrangler tunnel delete <tunnel> - Delete a tunnel (with confirmation)wrangler tunnel run <tunnel> - Run a tunnel using cloudflaredwrangler tunnel quick-start <url> - Start a temporary tunnel (Try Cloudflare)The run and quick-start commands automatically download and manage the cloudflared binary, caching it in ~/.wrangler/cloudflared/. Users are prompted before downloading and warned if their PATH-installed cloudflared is outdated. You can override the binary location with the CLOUDFLARED_PATH environment variable.
All commands are marked as experimental.
#12927 c9b3184 Thanks @penalosa! - Bump undici from 7.18.2 to 7.24.4
#12875 13df6c7 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260312.1 | 1.20260316.1 |
#12935 df0d112 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260316.1 | 1.20260317.1 |
#12928 81ee98e Thanks @petebacondarwin! - Migrate chrome-devtools-patches deployment from Cloudflare Pages to Workers + Assets
The DevTools frontend is now deployed as a Cloudflare Workers + Assets project instead of a Cloudflare Pages project. This uses wrangler deploy for production deployments and wrangler versions upload for PR preview deployments.
The inspector proxy origin allowlists in both wrangler and miniflare have been updated to accept connections from the new workers.dev domain patterns, while retaining the legacy pages.dev patterns for backward compatibility.
#12835 c600ce0 Thanks @dario-piotrowicz! - Fix execution freezing on debugger statements when DevTools is not attached
Previously, wrangler always sent Debugger.enable to the runtime on connection, even when DevTools wasn't open. This caused scripts to freeze on debugger statements. Now Debugger.enable is only sent when DevTools is actually attached, and Debugger.disable is sent when DevTools disconnects to stop the runtime from performing debugging work.
#12894 f509d13 Thanks @gpanders! - Simplify description of --json option
Remove extraneous adjectives in the description of the --json option.
#11888 0a7fef9 Thanks @staticpayload! - Reject cross-drive module paths in Pages Functions routing
On Windows, module paths using a different drive letter could be parsed in a way that bypassed the project-root check. These paths are now parsed correctly and rejected when they resolve outside the project.
Updated dependencies [c9b3184, 13df6c7, df0d112, 81ee98e]:
You can now upload secrets alongside your Worker code in a single operation using the --secrets-file parameter on both wrangler deploy and wrangler ve
#10896 351e1e1 Thanks @devin-ai-integration! - feat: add --secrets-file parameter to wrangler deploy and wrangler versions upload
You can now upload secrets alongside your Worker code in a single operation using the --secrets-file parameter on both wrangler deploy and wrangler versions upload. The file format matches what's used by wrangler versions secret bulk, supporting both JSON and .env formats.
Example usage:
wrangler deploy --secrets-file .env.production
wrangler versions upload --secrets-file secrets.json
Secrets not included in the file will be inherited from the previous version, matching the behavior of wrangler versions secret bulk.
#12873 2b9a186 Thanks @gpanders! - Add wrangler containers instances <application_id> command to list container instances
Lists all container instances for a given application, matching the Dash instances view. Displays instance ID, state, location, version, and creation time. Supports pagination for applications with many instances. Also adds paginated request support to the containers-shared API client.
#12873 2b9a186 Thanks @gpanders! - Add escapeCodeTimeout option to onKeyPress utility for faster Esc key detection
The onKeyPress utility now accepts an optional escapeCodeTimeout parameter that controls how long readline waits to disambiguate a standalone Esc press from multi-byte escape sequences (e.g. arrow keys). The default remains readline's built-in 500ms, but callers can pass a lower value (e.g. 25ms) for near-instant Esc handling in interactive prompts.
#12676 65f1092 Thanks @dario-piotrowicz! - Fix autoconfig package installation always failing at workspace roots
When running autoconfig at the root of a monorepo workspace, package installation commands now include the appropriate workspace root flags (--workspace-root for pnpm, -W for yarn). This prevents errors like "Running this command will add the dependency to the workspace root" that previously occurred when configuring projects at the workspace root.
Additionally, autoconfig now allows running at the workspace root if the root directory itself is listed as a workspace package (e.g., workspaces: ["packages/*", "."]).
#12841 7b0d8f5 Thanks @dario-piotrowicz! - Fix unclear error when assets upload session returns a null response
When deploying assets, if the Cloudflare API returns a null response object, Wrangler now provides a clear error message asking users to retry instead of failing with a confusing error.
Updated dependencies [ade0aed]:
…--mac-spec, --option, and --tag flags are now deprecated. These flags expose OpenSSH-specific options that are tied to the current implementation. A f…
#12853 ff543e3 Thanks @gpanders! - Deprecate SSH passthrough flags in wrangler containers ssh
The --cipher, --log-file, --escape-char, --config-file, --pkcs11, --identity-file, --mac-spec, --option, and --tag flags are now deprecated. These flags expose OpenSSH-specific options that are tied to the current implementation. A future release will replace the underlying SSH transport, at which point these flags will be removed. They still function for now.
#12815 e63539d Thanks @NuroDev! - Support disabling persistence in unstable_startWorker() and unstable_dev()
You can now disable persistence entirely by setting persist: false in the dev options:
const worker = await unstable_dev("./src/worker.ts", {
persist: false,
});
Or when using unstable_startWorker():
const worker = await unstable_startWorker({
entrypoint: "./src/worker.ts",
dev: {
persist: false,
},
});
This is useful for testing scenarios where you want to ensure a clean state on each run without any persisted data from previous runs.
#12861 f7de0fd Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260310.1 | 1.20260312.1 |
#12734 8e89e85 Thanks @flostellbrink! - Add back support for wrangler d1 exports with multiple tables.
Example:
# All tables (default)
wrangler d1 export db --output all-tables.sql
# Single table (unchanged)
wrangler d1 export db --output single-table.sql --table foo
# Multiple tables (new)
wrangler d1 export db --output multiple-tables.sql --table foo --table bar
#12807 8d1e130 Thanks @MaxwellCalkin! - fix: vectorize commands now output valid json
This fixes:
wrangler vectorize createwrangler vectorize infowrangler vectorize insertwrangler vectorize upsertwrangler vectorize listwrangler vectorize list-vectorswrangler vectorize list-metadata-indexAlso, wrangler vectorize create --json now also includes the created_at, modified_on and description fields.
#12856 6ee18e1 Thanks @dario-piotrowicz! - Fix autoconfig for Astro v6 projects to skip wrangler config generation
Astro 6+ generates its own wrangler configuration on build, so autoconfig now detects the Astro version and skips creating a wrangler.jsonc file for projects using Astro 6 or later. This prevents conflicts between the autoconfig-generated config and Astro's built-in config generation.
#12700 4bb61b9 Thanks @RiscadoA! - Add client-side validation for VPC service host flags
The --hostname, --ipv4, and --ipv6 flags on wrangler vpc service create and wrangler vpc service update now validate input before sending requests to the API. Previously, invalid values were accepted by the CLI and only rejected by the API with opaque error messages. Now users get clear, actionable error messages for common mistakes like passing a URL instead of a hostname, using an IP address in the --hostname flag, or providing malformed IP addresses.
Updated dependencies [f7de0fd, ecc7f79, 1dda1c8]:
node-forge had ASN.1 unbounded recursion, OID integer truncation, and ASN.1 validator desynchronization vulnerabilities. This is a bundled dependency…
#12746 211d75d Thanks @NuroDev! - Add support for inheritable bindings in type generation
When using wrangler types with multiple environments, bindings from inheritable config properties (like assets) are now correctly inherited from the top-level config in all named environments. Previously, if you defined assets.binding at the top level with named environments, the binding would be marked as optional in the generated Env type because the type generation didn't account for inheritance.
Example:
{
"assets": {
"binding": "ASSETS",
"directory": "./public"
},
"env": {
"staging": {},
"production": {}
}
}
Before this change, ASSETS would be typed as ASSETS?: Fetcher (optional). Now, ASSETS is correctly typed as ASSETS: Fetcher (required). This fix currently applies to the assets binding, with an extensible mechanism to support additional inheritable bindings in the future.
#12826 de65c58 Thanks @gabivlj! - Enable container egress interception in local dev without the experimental compatibility flag
Container local development now always prepares the egress interceptor sidecar image needed for interceptOutboundHttp(). This makes container-to-Worker interception available by default in Wrangler, Miniflare, and the Cloudflare Vite plugin.
#12790 5451a7f Thanks @petebacondarwin! - Bump node-forge to ^1.3.2 to address security vulnerabilities
node-forge had ASN.1 unbounded recursion, OID integer truncation, and ASN.1 validator desynchronization vulnerabilities. This is a bundled dependency used for local HTTPS certificate handling.
#12795 82cc2a8 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260301.1 | 1.20260306.1 |
#12811 3c67c2a Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260306.1 | 1.20260307.1 |
#12827 d645594 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260307.1 | 1.20260310.1 |
#12808 6ed249b Thanks @MaxwellCalkin! - Fix wrangler d1 execute --json returning "null" (string) instead of null (JSON null) for SQL NULL values
When using wrangler d1 execute --json with local execution, SQL NULL values were incorrectly serialized as the string "null" instead of JSON null. This produced invalid JSON output that violated RFC 4627. The fix removes the explicit null-to-string conversion so NULL values are preserved as proper JSON null in the output.
#12824 9f93b54 Thanks @jamesopstad! - Strip query strings from module names before writing to disk
When bundling modules with query string suffixes (e.g. .wasm?module), the ? character was included in the output filename. Since ? is not a valid filename character on Windows, this caused an ENOENT error during wrangler dev. This was particularly visible when using Prisma Client with the D1 adapter, which imports .wasm?module files.
The fix strips query strings from module names before writing them to disk, while preserving correct module resolution.
#12771 b8c33f5 Thanks @penalosa! - Make remote dev exchange_url optional
The edge-preview API's exchange_url is now treated as optional. When unavailable or when the exchange fails, the initial token from the API response is used directly. The prewarm step and inspector_websocket have been removed from the remote dev flow in favour of tail_url for live logs.
Updated dependencies [5451a7f, 82cc2a8, 3c67c2a, d645594, de65c58, cb14820, a7c87d1, e4d9510]:
Hyperdrive now supports MySQL-specific SSL modes (REQUIRED, VERIFY_CA, VERIFY_IDENTITY) alongside the existing PostgreSQL modes. The --sslmode flag no
#11656 ec2459e Thanks @prydt! - feat(hyperdrive): add MySQL SSL mode and Custom CA support
Hyperdrive now supports MySQL-specific SSL modes (REQUIRED, VERIFY_CA, VERIFY_IDENTITY) alongside the existing PostgreSQL modes. The --sslmode flag now validates the provided value based on the database scheme (PostgreSQL or MySQL) and enforces appropriate CA certificate requirements for each.
Usage:
# MySQL with CA verification
wrangler hyperdrive create my-config --connection-string="mysql://user:pass@host:3306/db" --sslmode=VERIFY_CA --ca-certificate-id=<cert-id>
# PostgreSQL (unchanged)
wrangler hyperdrive create my-config --connection-string="postgres://user:pass@host:5432/db" --sslmode=verify-full --ca-certificate-id=<cert-id>
5cc8fcf]:
SolidStart v2.0.0-alpha introduced a breaking change where configuration moved from app.config.(js|ts) to vite.config.(js|ts). Wrangler's autoconfig n…
#11332 6a8aa5f Thanks @nikitassharma! - Users are now able to configure DockerHub credentials and have containers reference images stored there.
DockerHub can be configured as follows:
echo $PAT_TOKEN | npx wrangler@latest containers registries configure docker.io --dockerhub-username=user --secret-name=DockerHub_PAT_Token
Containers can then specify an image from DockerHub in their wrangler.jsonc as follows:
"containers": {
"image": "docker.io/namespace/image:tag",
...
}
#12649 35b2c56 Thanks @gabivlj! - Add experimental support for containers to workers communication with interceptOutboundHttp
This feature is experimental and requires adding the "experimental" compatibility flag to your Wrangler configuration.
#12701 23a365a Thanks @jamesopstad! - Add local dev validation for the experimental secrets configuration property
When the new secrets property is defined, wrangler dev and vite dev now validate secrets declared in secrets.required. When required secrets are missing from .dev.vars or .env/process.env, a warning is logged listing the missing secret names.
When secrets is defined, only the keys listed in secrets.required are loaded. Additional keys in .dev.vars or .env are excluded. If you are not using .dev.vars, keys listed in secrets.required are loaded from process.env as well as .env. The CLOUDFLARE_INCLUDE_PROCESS_ENV environment variable is therefore not needed when using this feature.
When secrets is not defined, the existing behavior is unchanged.
// wrangler.jsonc
{
"secrets": {
"required": ["API_KEY", "DB_PASSWORD"]
}
}
#12695 0769056 Thanks @jamesopstad! - Add type generation for the experimental secrets configuration property
When the new secrets property is defined, wrangler types now generates typed bindings from the names listed in secrets.required.
When secrets is defined at any config level, type generation uses it exclusively and no longer infers secret names from .dev.vars or .env files. This enables running type generation in environments where these files are not present.
Per-environment secrets are supported. Each named environment produces its own interface, and the aggregated Env marks secrets that only appear in some environments as optional.
When secrets is not defined, the existing behavior is unchanged.
// wrangler.jsonc
{
"secrets": {
"required": ["API_KEY", "DB_PASSWORD"]
}
}
#12693 150ef7b Thanks @martinezjandrew! - Add wrangler containers registries credentials command for generating temporary push/pull credentials
This command generates short-lived credentials for authenticating with the Cloudflare managed registry (registry.cloudflare.com). Useful for CI/CD pipelines or local Docker authentication.
# Generate push credentials (for uploading images)
wrangler containers registries credentials registry.cloudflare.com --push
# Generate pull credentials (for downloading images)
wrangler containers registries credentials registry.cloudflare.com --pull
# Generate credentials with both permissions
wrangler containers registries credentials registry.cloudflare.com --push --pull
# Custom expiration (default 15)
wrangler containers registries credentials registry.cloudflare.com --push --expiration-minutes=30
#12622 bf9cb3d Thanks @LuisDuarte1! - Add configurable step limits for Workflows
You can now set a maximum number of steps for a Workflow instance via the limits.steps configuration in your Wrangler config. When a Workflow instance exceeds this limit, it will fail with an error indicating the limit was reached.
// wrangler.jsonc
{
"workflows": [
{
"binding": "MY_WORKFLOW",
"name": "my-workflow",
"class_name": "MyWorkflow",
"limits": {
"steps": 5000
}
}
]
}
The steps value must be an integer between 1 and 25,000. If not specified, the default limit of 10,000 steps is used. Step limits are also enforced in local development via wrangler dev.
#12733 d672e2e Thanks @dario-piotrowicz! - Fix SolidStart autoconfig for projects using version 2.0.0-alpha or later
SolidStart v2.0.0-alpha introduced a breaking change where configuration moved from app.config.(js|ts) to vite.config.(js|ts). Wrangler's autoconfig now detects the installed SolidStart version and based on it updates the appropriate configuration file
#12698 209b396 Thanks @penalosa! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260305.0 | 1.20260226.1 |
| @cloudflare/workers-types | 4.20260305.0 | 4.20260226.1 |
#12691 596b8a0 Thanks @penalosa! - Remove temporary AI Search RPC workaround (no user-facing changes)
#12694 00e729e Thanks @garvit-gupta! - Fix wrangler pipelines setup failing for Data Catalog sinks on new buckets by using the correct R2 Catalog API error code (40401).
Updated dependencies [35b2c56, 5f7aaf2, 209b396, 596b8a0, bf9cb3d]:
You can now enable cache before worker execution using the new cache configuration:
#12625 c0e9e08 Thanks @WillTaylorDev! - Add cache configuration option for enabling worker cache (experimental)
You can now enable cache before worker execution using the new cache configuration:
{
"cache": {
"enabled": true
}
}
This setting is environment-inheritable and opt-in. When enabled, cache behavior is applied before your worker runs.
Note: This feature is experimental. The runtime API is not yet generally available.
#12661 99037e3 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260302.0 | 1.20260303.0 |
#12680 295297a Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260303.0 | 1.20260305.0 |
#12671 f765244 Thanks @MattieTK! - fix: Only redact account names in CI environments, not all non-interactive contexts
The multi-account selection error in getAccountId now only redacts account names
when running in a CI environment (detected via ci-info). Non-interactive terminals
such as coding agents and piped commands can now see account names, which they need
to identify which account to configure. CI logs remain protected.
Updated dependencies [99037e3, 295297a]:
Recent versions of Angular's AngularAppEngine block serving SSR on localhost by default. This caused wrangler dev / wrangler pages dev to fail with UR
#12648 3d6e421 Thanks @petebacondarwin! - Fix Angular scaffolding to allow localhost SSR in development mode
Recent versions of Angular's AngularAppEngine block serving SSR on localhost by default. This caused wrangler dev / wrangler pages dev to fail with URL with hostname "localhost" is not allowed.
The fix passes allowedHosts: ["localhost"] to the AngularAppEngine constructor in server.ts, which is safe to do even in production since Cloudflare will already restrict which host is allowed.
#12657 294297e Thanks @dario-piotrowicz! - Update Waku autoconfig logic
As of 1.0.0-alpha.4, Waku projects can be built on top of the Cloudflare Vite plugin, and the changes here allow Wrangler autoconfig to support this. Running autoconfig on older versions of Waku will result in an error.
Updated dependencies []:
### Minor Changes - #12614 `8d882fa` Thanks @dario-piotrowicz! - Enable autoconfig for wrangler deploy by default (while allowing users to still disab
#12614 8d882fa Thanks @dario-piotrowicz! - Enable autoconfig for wrangler deploy by default (while allowing users to still disable it via --x-autoconfig=false if necessary)
#12614 8d882fa Thanks @dario-piotrowicz! - Mark the wrangler setup command as stable
The following dependency versions have been updated:
#12595 e93dc01 Thanks @dario-piotrowicz! - Add a warning in the autoconfig logic letting users know that support for projects inside workspaces is limited
#12582 c2ed7c2 Thanks @penalosa! - Internal refactor to use capnweb's native ReadableStream support to power remote Media and Dispatch Namespace bindings.
#12618 d920811 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260219.0 | 1.20260227.0 |
#12637 896734d Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260227.0 | 1.20260302.0 |
#12601 ebdbe52 Thanks @43081j! - Switch to empathic for file-system upwards traversal to reduce dependency bloat.
#12602 58a4020 Thanks @anonrig! - Optimize filesystem operations by using Node.js's throwIfNoEntry: false option
This reduces the number of system calls made when checking for file existence by avoiding the overhead of throwing and catching errors for missing paths. This is an internal performance optimization with no user-visible behavioral changes.
#12591 6f6cd94 Thanks @martinezjandrew! - Implemented logic within wrangler containers registries configure to check if a specified secret name is already in-use and offer to reuse that secret. Also added --skip-confirmation flag to the command to skip all interactive prompts.
Updated dependencies [c2ed7c2, d920811, 896734d, 58a4020]:
The wrangler pipelines setup command now prompts users to retry when validation errors occur, instead of failing the entire setup process. This includ
#12401 8723684 Thanks @jonesphillip! - Add validation retry loops to pipelines setup command
The wrangler pipelines setup command now prompts users to retry when validation errors occur, instead of failing the entire setup process. This includes:
This improves the setup experience by allowing users to correct mistakes without restarting the entire configuration flow.
#12395 aa82c2b Thanks @cmackenzie1! - Generate typed pipeline bindings from stream schemas
When running wrangler types, pipeline bindings now generate TypeScript types based on the stream's schema definition. This gives you full autocomplete and type checking when sending data to your pipelines.
// wrangler.json
{
"pipelines": [{ "binding": "ANALYTICS", "pipeline": "analytics-stream-id" }]
}
If your stream has a schema with fields like user_id (string) and event_count (int32), the generated types will be:
declare namespace Cloudflare {
type AnalyticsStreamRecord = { user_id: string; event_count: number };
interface Env {
ANALYTICS: Pipeline<Cloudflare.AnalyticsStreamRecord>;
}
}
For unstructured streams or when not authenticated, bindings fall back to the generic Pipeline<PipelineRecord> type.
#12592 aaa7200 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260217.0 | 1.20260218.0 |
#12606 2f19a40 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260218.0 | 1.20260219.0 |
#12604 e2a6600 Thanks @petebacondarwin! - fix: pass --env flag to auxiliary workers in multi-worker mode
When running wrangler dev with multiple config files (e.g. -c ./apps/api/wrangler.jsonc -c ./apps/queues/wrangler.jsonc -e=dev), the --env flag was not being passed to auxiliary (non-primary) workers. This meant that environment-specific configuration (such as queue bindings) was not applied to auxiliary workers, causing features like queue consumers to not be triggered in local development.
#12597 0b17117 Thanks @sdnts! - The maximum allowed delivery and retry delays for Queues is now 24 hours
#12598 ca58062 Thanks @mattzcarey! - Stop redacting wrangler whoami output in non-interactive mode
wrangler whoami is explicitly invoked to retrieve account info, so email and account names should always be visible. Redacting them in non-interactive/CI environments makes it difficult for coding agents and automated tools to identify which account to use. Other error messages that may appear unexpectedly in CI logs (e.g. multi-account selection errors) remain redacted.
Updated dependencies [f239077, aaa7200, 2f19a40, 5f9f0b4, 452cdc8, 527e4f5, 0b17117]:
Wrangler now intelligently detects where to store cache files:
#12466 caf9b11 Thanks @petebacondarwin! - Add WRANGLER_CACHE_DIR environment variable and smart cache directory detection
Wrangler now intelligently detects where to store cache files:
WRANGLER_CACHE_DIR env var if setnode_modules/.cache/wrangler or .wrangler/cache)node_modules/.cache/wrangler if node_modules exists.wrangler/cacheThis improves compatibility with Yarn PnP, pnpm, and other package managers that don't use traditional node_modules directories, without requiring any configuration.
#12572 936187d Thanks @dario-piotrowicz! - Ensure the nodejs_compat flag is always applied in autoconfig
Previously, the autoconfig feature relied on individual framework configurations to specify Node.js compatibility flags, some could set nodejs_compat while others nodejs_als.
Now instead nodejs_compat is always included as a compatibility flag, this is generally beneficial and the user can always remove the flag afterwards if they want to.
#12560 c4c86f8 Thanks @taylorlee! - Support --tag and --message flags on wrangler deploy
They have the same behavior that they do as during wrangler versions upload, as both
are set on the version.
The message is also reused for the deployment as well, with the same behavior as used
during wrangler versions deploy.
#12543 5a868a0 Thanks @G4brym! - Fix AI Search binding failing in local dev
Using AI Search bindings with wrangler dev would fail with "RPC stub points at a non-serializable type". AI Search bindings now work correctly in local development.
#12552 c58e81b Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260212.0 | 1.20260213.0 |
#12568 33a9a8f Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260213.0 | 1.20260214.0 |
#12576 8077c14 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260214.0 | 1.20260217.0 |
#12466 caf9b11 Thanks @petebacondarwin! - fix: exclude .wrangler directory from Pages uploads
The .wrangler directory contains local cache and state files that should never be deployed. This aligns Pages upload behavior with Workers Assets, which already excludes .wrangler via .assetsignore.
#12556 7d2355e Thanks @ascorbic! - Fix port availability check probing the wrong host when host changes
memoizeGetPort correctly invalidated its cached port when called with a different host, but then still probed the original host for port availability. This could return a port that was free on the original host but already in use on the requested one, leading to bind failures at startup.
#12562 7ea69af Thanks @MattieTK! - Support function-based Vite configs in autoconfig setup
wrangler setup and wrangler deploy --x-autoconfig can now automatically add the Cloudflare Vite plugin to projects that use function-based defineConfig() patterns. Previously, autoconfig would fail with "Cannot modify Vite config: expected an object literal but found ArrowFunctionExpression" for configs like:
export default defineConfig(({ isSsrBuild }) => ({
plugins: [reactRouter(), tsconfigPaths()],
}));
This pattern is used by several official framework templates, including React Router's node-postgres and node-custom-server templates. The following defineConfig() patterns are now supported:
defineConfig({ ... }) (object literal, already worked)defineConfig(() => ({ ... })) (arrow function with expression body)defineConfig(({ isSsrBuild }) => ({ ... })) (arrow function with destructured params)defineConfig(() => { return { ... }; }) (arrow function with block body)defineConfig(function() { return { ... }; }) (function expression)#12548 5cc7158 Thanks @dario-piotrowicz! - Fix .assetsignore formatting when autoconfig creates a new file
Previously, when wrangler setup or wrangler deploy --x-autoconfig created a new .assetsignore file via autoconfig, it would add unnecessary leading empty lines before the wrangler-specific entries. Empty separator lines should only be added when appending to an existing .assetsignore file. This fix ensures newly created .assetsignore files start cleanly without leading blank lines.
#12556 7d2355e Thanks @ascorbic! - Improve error message when port binding is blocked by a sandbox or security policy
When running wrangler dev inside a restricted environment (such as an AI coding agent sandbox or locked-down container), the port availability check would fail with a raw EPERM error. This now provides a clear message explaining that a sandbox or security policy is blocking network access, rather than the generic permission error that previously pointed at the file system.
#12545 c9d0f9d Thanks @dario-piotrowicz! - Improve framework detection when multiple frameworks are found
When autoconfig detects multiple frameworks in a project, Wrangler now applies smarter logic to select the most appropriate one. Selecting the wrong one is acceptable locally where the user can change the detected framework, in CI an error is instead thrown.
#12548 5cc7158 Thanks @dario-piotrowicz! - Add trailing newline to generated package.json and wrangler.jsonc files
#12548 5cc7158 Thanks @dario-piotrowicz! - Fix .gitignore formatting when autoconfig creates a new file
Previously, when wrangler setup or wrangler deploy created a new .gitignore file via autoconfig, it would add unnecessary leading empty lines before the wrangler-specific entries. Empty separator lines should only be added when appending to an existing .gitignore file. This fix ensures newly created .gitignore files start cleanly without leading blank lines.
#12545 c9d0f9d Thanks @dario-piotrowicz! - Throw actionable error when autoconfig is run in the root of a workspace
When running Wrangler commands that trigger auto-configuration (like wrangler dev or wrangler deploy) in the root directory of a monorepo workspace, a helpful error is now shown directing users to run the command in a specific project's directory instead.
Updated dependencies [5a868a0, c58e81b, 33a9a8f, 8077c14, caf9b11, 9a565d5, 7f18183, 39491f9, 43c462a]:
wrangler pages dev now automatically injects Pages-specific environment variables (CF_PAGES, CF_PAGES_BRANCH, CF_PAGES_COMMIT_SHA, CF_PAGES_URL) for i
#12473 b900c5a Thanks @petebacondarwin! - Add CF_PAGES environment variables to wrangler pages dev
wrangler pages dev now automatically injects Pages-specific environment variables (CF_PAGES, CF_PAGES_BRANCH, CF_PAGES_COMMIT_SHA, CF_PAGES_URL) for improved dev/prod parity. This enables frameworks like SvelteKit to auto-detect the Pages environment during local development.
CF_PAGES is set to "1" to indicate the Pages environmentCF_PAGES_BRANCH defaults to the current git branch (or "local" if not in a git repo)CF_PAGES_COMMIT_SHA defaults to the current git commit SHA (or a placeholder if not in a git repo)CF_PAGES_URL is set to a simulated commit preview URL (e.g., https://<sha>.<project-name>.pages.dev)These variables are displayed with their actual values in the bindings table during startup, making it easy to verify what branch and commit SHA were detected.
These variables can be overridden by user-defined vars in the Wrangler configuration, .env, .dev.vars, or via CLI flags.
#12464 10a1c4a Thanks @petebacondarwin! - Allow deleting KV namespaces by name
You can now delete a KV namespace by providing its name as a positional argument:
wrangler kv namespace delete my-namespace
This aligns the delete command with the create command, which also accepts a namespace name.
The existing --namespace-id and --binding flags continue to work as before.
#12382 d7b492c Thanks @dario-piotrowicz! - Add Pages detection to autoconfig flows
When running the autoconfig logic (via wrangler setup, wrangler deploy --x-autoconfig, or the programmatic autoconfig API), Wrangler now detects when a project appears to be a Pages project and handles it appropriately:
wrangler deploy, it warns the user but still allows them to proceedwrangler setup and the programmatic autoconfig API, it throws a fatal error#12461 8809411 Thanks @penalosa! - Support type: inherit bindings when using startWorker()
This is an internal binding type that should not be used by external users of the API
#12515 1a9eddd Thanks @ascorbic! - Add --json flag to wrangler whoami for machine-readable output
wrangler whoami --json now outputs structured JSON containing authentication status, auth type, email, accounts, and token permissions. When the user is not authenticated, the command exits with a non-zero status code and outputs {"loggedIn":false}, making it easy to check auth status in shell scripts without parsing text output.
# Parse the JSON output
wrangler whoami --json | jq '.accounts'
# Check if authenticated in a script. Returns 0 if authenticated, non-zero if not.
if wrangler whoami --json > /dev/null 2>&1; then
echo "Authenticated"
else
echo "Not authenticated"
fi
#12437 ad817dd Thanks @MattieTK! - fix: use project's package manager in wranger autoconfig
wrangler setup now correctly detects and uses the project's package manager based on lockfiles (pnpm-lock.yaml, yarn.lock, bun.lockb, package-lock.json) and the packageManager field in package.json. Previously, it would fall back to the package manager used to execute the command when run directly from the terminal, causing failures in pnpm and yarn workspace projects if the wrong manager was used in this step due to the workspace: protocol not being supported by npm.
This change leverages the package manager detection already performed by @netlify/build-info during framework detection, ensuring consistent behaviour across the autoconfig process.
#12541 f7fa326 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260210.0 | 1.20260212.0 |
#12498 734792a Thanks @dario-piotrowicz! - Fix: make sure that remote proxy sessions's logs can be silenced when the wrangler log level is set to "none"
#12135 cc5ac22 Thanks @edmundhung! - Fix spurious config diffs when bindings from local and remote config are shown in different order
When comparing local and remote Worker configurations, binding arrays like kv_namespaces would incorrectly show additions and removals if the elements were in a different order. The diff now correctly recognizes these as equivalent by reordering remote arrays to match the local config's order before comparison.
#12476 62a8d48 Thanks @MattieTK! - fix: use unscoped binary name for OpenNext autoconfig command overrides
The build, deploy, and version command overrides in the Next.js (OpenNext) autoconfig handler used the scoped package name @opennextjs/cloudflare, which pnpm interprets as a workspace filter rather than a binary name. This caused wrangler deploy --x-autoconfig to fail for pnpm-based Next.js projects with ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL. Changed to use the unscoped binary name opennextjs-cloudflare, which resolves correctly across all package managers.
#12516 84252b7 Thanks @edmundhung! - Stop proxying localhost requests when proxy environment variables are set
When HTTP_PROXY or HTTPS_PROXY is configured, all fetch requests including ones to localhost were routed through the proxy. This caused wrangler dev and the Vite plugin to fail with "TypeError: fetch failed" because the proxy can't reach local addresses.
This switches from ProxyAgent to undici's EnvHttpProxyAgent, which supports the NO_PROXY environment variable. When NO_PROXY is not set, it defaults to localhost,127.0.0.1,::1 so local requests are never proxied.
The NO_PROXY config only applies to the request destination, not the proxy server address. So a proxy running on localhost (e.g. HTTP_PROXY=http://127.0.0.1:11451) still works for outbound API calls.
#12506 e5efa5d Thanks @sesteves! - Fix wrangler r2 sql query displaying [object Object] for nested values
SQL functions that return complex types such as arrays of objects (e.g. approx_top_k) were rendered as [object Object] in the table output because String() was called directly on non-primitive values. These values are now serialized with JSON.stringify so they display as readable JSON strings.
#11725 be9745f Thanks @dario-piotrowicz! - Fix incorrect logic during autoconfiguration (when running wrangler setup or wrangler deploy --x-autoconfig) that caused parts of the project's package.json file, removed during the process, to incorrectly be added back
#12458 122791d Thanks @jkoe-cf! - Remove default values for delivery delay and message retention and update messaging on limits
Fixes the issue of the default maximum message retention (365400 seconds) being longer than the maximum allowed retention period for free tier users (86400 seconds).
Previous:
Updated:
#12513 41e18aa Thanks @pombosilva! - Add confirmation prompt when deploying workflows with names that belong to different workers.
When deploying a workflow with a name that already exists and is currently associated with a different worker script, Wrangler will now display a warning and prompt for confirmation before proceeding. This helps prevent accidentally overriding workflows.
In non-interactive environments this check is skipped by default. Use the --strict flag to enable the check in non-interactive environments, which will cause the deployment to fail if workflow conflicts are detected.
Updated dependencies [f7fa326, 7aaa2a5, d06ad09]:
Adds detailed telemetry events to track the autoconfig workflow, including process start/end, detection, and configuration phases. Each event includes
#12433 2acb277 Thanks @martinezjandrew! - Updated registries delete subcommand to handle new API response that now returns a secrets store secret reference after deletion. Wrangler will now prompt the user if they want to delete the associated secret. If so, added new logic to retrieve a secret by its name. The subcommand will then delete the secret.
#12307 e02b5f5 Thanks @dario-piotrowicz! - Improve autoconfig telemetry with granular event tracking
Adds detailed telemetry events to track the autoconfig workflow, including process start/end, detection, and configuration phases. Each event includes a unique session ID (appId), CI detection, framework information, and success/error status to help diagnose issues and understand usage patterns.
#12474 8ba1d11 Thanks @petebacondarwin! - Add wrangler pages deployment delete command to delete Pages deployments via CLI
You can now delete a Pages deployment directly from the command line:
wrangler pages deployment delete <deployment-id> --project-name <name>
Use the --force (or -f) flag to skip the confirmation prompt, which is useful for CI/CD automation.
#12307 e02b5f5 Thanks @dario-piotrowicz! - Include all common telemetry properties in ad-hoc telemetry events
Previously, only command-based telemetry events (e.g., "wrangler command started/completed") included the full set of common properties. Ad-hoc events sent via sendAdhocEvent were missing important context like OS information, CI detection, and session tracking.
Now, all telemetry events include the complete set of common properties:
amplitude_session_id and amplitude_event_id for session trackingwranglerVersion (and major/minor/patch variants)osPlatform, osVersion, nodeVersionpackageManagerconfigFileTypeisCI, isPagesCI, isWorkersCIisInteractiveisFirstUsagehasAssetsagent#12479 fd902aa Thanks @dario-piotrowicz! - Add framework selection prompt during autoconfig
When running autoconfig in interactive mode, users are now prompted to confirm or change the detected framework. This allows correcting misdetected frameworks or selecting a framework when none was detected, defaulting to "Static" in that case.
#12465 961705c Thanks @petebacondarwin! - Add --json flag to wrangler pages project list command
You can now use the --json flag to output the project list as clean JSON instead of a formatted table. This enables easier programmatic processing and scripting workflows.
> wrangler pages project list --json
[
{
"Project Name": "my-pages-project",
"Project Domains": "my-pages-project-57h.pages.dev",
"Git Provider": "No",
"Last Modified": "23 hours ago"
},
...
]
#12470 21ac7ab Thanks @petebacondarwin! - Add WRANGLER_COMMAND environment variable to custom build commands
When using a custom build command in wrangler.toml, you can now detect whether wrangler dev or wrangler deploy triggered the build by reading the WRANGLER_COMMAND environment variable.
This variable will be set to "dev", "deploy", "versions upload", or "types" depending on which command invoked the build. This allows you to customize your build process based on the deployment context.
Example usage in a build script:
if [ "$WRANGLER_COMMAND" = "dev" ]; then
echo "Building for development..."
else
echo "Building for production..."
fi
#12468 5d56487 Thanks @petebacondarwin! - Add debug logs for git branch detection in wrangler pages deploy command
When running wrangler pages deploy, the command automatically detects git information (branch, commit hash, commit message, dirty state) from the local repository. Previously, when this detection failed, there was no way to troubleshoot the issue.
Now, running with WRANGLER_LOG=debug will output detailed information about:
Example usage:
WRANGLER_LOG=debug wrangler pages deploy ./dist --project-name=my-project
#12447 c8dda16 Thanks @dario-piotrowicz! - fix: Throw a descriptive error when autoconfig cannot detect an output directory
When running wrangler setup or wrangler deploy --x-autoconfig on a project where the output directory cannot be detected, you will now see a clear error message explaining what's missing (e.g., "Could not detect a directory containing the static (html, css and js) files for the project") instead of a generic configuration error. This makes it easier to understand and resolve the issue.
#12440 555b32a Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260205.0 | 1.20260206.0 |
#12485 d636d6a Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260206.0 | 1.20260207.0 |
#12502 bf8df0c Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260207.0 | 1.20260210.0 |
#12280 988dea9 Thanks @penalosa! - Fix wrangler init failing with Yarn Classic
When using Yarn Classic (v1.x), running wrangler init or wrangler init --from-dash would fail because Yarn Classic doesn't properly handle version specifiers with special characters like ^ in yarn create commands. Yarn would install the package correctly but then fail to find the binary because it would look for a path like .yarn/bin/create-cloudflare@^2.5.0 instead of .yarn/bin/create-cloudflare.
This fix removes the version specifier from the default C3 command entirely. Since C3 has had auto-update behavior for over two years, specifying a version is no longer necessary and removing it resolves the Yarn Classic compatibility issue.
#12486 1f1c3ce Thanks @vicb! - Bump esbuild to 0.27.3
This update includes several bug fixes from esbuild versions 0.27.1 through 0.27.3. See the esbuild changelog for details.
#12472 62635a0 Thanks @petebacondarwin! - Improve D1 database limit error message to match Cloudflare dashboard
When attempting to create a D1 database after reaching your account's limit, the CLI now shows a more helpful error message with actionable guidance instead of the raw API error.
The new message includes:
#12411 355c6da Thanks @jbwcloudflare! - Fix wrangler pages deploy to respect increased file count limits
#12449 bfd17cd Thanks @penalosa! - fix: Display unsafe metadata separately from bindings
Unsafe metadata are not bindings and should not be displayed in the bindings table. They are now printed as a separate JSON block.
Before:
Your Worker has access to the following bindings:
Binding Resource
env.extra_data ("interesting value") Unsafe Metadata
env.more_data ("dubious value") Unsafe Metadata
After:
The following unsafe metadata will be attached to your Worker:
{
"extra_data": "interesting value",
"more_data": "dubious value"
}
#12463 3388c84 Thanks @petebacondarwin! - Add User-Agent header to remote dev inspector WebSocket connections
When running wrangler dev --remote, the inspector WebSocket connection now includes a User-Agent header (wrangler/<version>). This resolves issues where WAF rules blocking empty User-Agent headers prevented remote dev mode from working with custom domains.
#12421 937425c Thanks @ryanking13! - Fix Python Workers deployment failing on Windows due to path separator handling
Previously, deploying Python Workers on Windows would fail because the backslash path separator (\) was not properly handled, causing the entire full path to be treated as a single filename. The deployment process now correctly normalizes paths to use forward slashes on all platforms.
Updated dependencies [2d90127, 555b32a, d636d6a, bf8df0c, 312b5eb, ce9dc01]:
When running wrangler dev with the experimental local explorer feature enabled, you can now press the e hotkey to open the local resource explorer UI
#12386 447daa3 Thanks @NuroDev! - Added new "open local explorer" hotkey for experimental/WIP local resource explorer
When running wrangler dev with the experimental local explorer feature enabled, you can now press the e hotkey to open the local resource explorer UI in your browser.
#11350 ee9b81f Thanks @dario-piotrowicz! - fix: improve error message when the entrypoint is incorrect
Error messages for incorrect entrypoint configuration have been improved to provide clearer and more actionable feedback. The updated messages help users understand what went wrong and how to fix their configuration.
#12402 63f1adb Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260131.0 | 1.20260203.0 |
#12418 ba13de9 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260203.0 | 1.20260205.0 |
#12216 fe3af35 Thanks @ichernetsky-cf! - Deprecate 'wrangler cloudchamber apply' in favor of 'wrangler deploy'
#12368 bd4bb98 Thanks @KianNH! - Preserve Containers configuration when using versions commands
Previously, commands like wrangler versions upload would inadvertently disable Containers on associated Durable Object namespaces because the containers property was being omitted from the API request body.
#12396 dab4bc9 Thanks @petebacondarwin! - fix: redact email addresses and account names in non-interactive mode
To prevent sensitive information from being exposed in public CI logs, email addresses and account names are now redacted when running in non-interactive mode (e.g., CI environments). Account IDs remain visible to aid debugging.
#12378 18c0784 Thanks @X6TXY! - Truncate Pages commit messages at UTF-8 boundaries to avoid invalid UTF-8
Updated dependencies [63f1adb, ba13de9, 83adb2c]:
Adds ai-search:write and ai-search:run OAuth scopes to the default login scopes, enabling wrangler to authenticate with AI Search APIs.
#12064 964a39d Thanks @G4brym! - Add AI Search OAuth scopes to login
Adds ai-search:write and ai-search:run OAuth scopes to the default login scopes, enabling wrangler to authenticate with AI Search APIs.
#11867 253a85d Thanks @rahulsuresh-git! - Add wrangler r2 bucket local-uploads command to manage local uploads for R2 buckets
When enabled, object data is written to the nearest region first, then asynchronously replicated to the bucket's primary region.
Docs: https://developers.cloudflare.com/r2/buckets/local-uploads
# Get local uploads status
wrangler r2 bucket local-uploads get my-bucket
# Enable local uploads (will prompt for confirmation)
wrangler r2 bucket local-uploads enable my-bucket
# Enable without confirmation prompt
wrangler r2 bucket local-uploads enable my-bucket --force
# Disable local uploads
wrangler r2 bucket local-uploads disable my-bucket
#11803 1bd1488 Thanks @dario-piotrowicz! - Add a new subrequests limit to the limits field of the Wrangler configuration file
Before only the cpu_ms limit was supported in the limits field of the Wrangler configuration file, now a subrequests limit can be specified as well which enables the user to limit the number of fetch requests that a Worker's invocation can make.
Example:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"limits": {
"cpu_ms": 1000,
"subrequests": 150 // newly added field
}
}
#12185 f7aa8c7 Thanks @penalosa! - Add timestamp field to the version metadata binding in local development. The version metadata binding now includes id, tag, and timestamp fields, making it easier to test version-aware logic locally.
#12190 ce736b9 Thanks @dario-piotrowicz! - Update autoconfig logic to handle Next.js projects by using the new @opennextjs/cloudflare migrate command
#12065 47944d1 Thanks @langningchen! - Improve error message when d1 export --output points to a directory
#12292 4c4d5a5 Thanks @dario-piotrowicz! - Add versionCommand to the autoconfig_summary field in the autoconfig output entry
Add the version upload command to the output being printed by wrangler deploy to WRANGLER_OUTPUT_FILE_DIRECTORY/WRANGLER_OUTPUT_FILE_PATH. This complements the existing buildCommand and deployCommand fields and allows CI systems to know how to upload new versions of Workers.
For example, for a standard npm project this would be:
npx wrangler versions uploadWhile for a Next.js project it would be:
npx @opennextjs/cloudflare upload#12050 b05b919 Thanks @NuroDev! - Fixed Wrangler's error handling for both invalid commands with and without the --help flag, ensuring consistent and clear error messages.
Additionally, it also ensures that if you provide an invalid argument to a valid command, Wrangler will now correctly display that specific commands help menu.
#12289 0aaf080 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260128.0 | 1.20260129.0 |
#12295 b981db5 Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260129.0 | 1.20260130.0 |
#12355 a113c0d Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260130.0 | 1.20260131.0 |
#11971 fdd7a9f Thanks @dario-piotrowicz! - Add framework id, build command, and deploy command to the autoconfig_summary field in the deploy output entry
Add the framework id alongside the commands to build and deploy the project to the output being printed by wrangler deploy to WRANGLER_OUTPUT_FILE_DIRECTORY or WRANGLER_OUTPUT_FILE_PATH.
For example for an npm Astro project these would be:
astronpm run buildnpx wrangler deployWhile for a Next.js project they would instead be:
nextnpx @opennextjs/cloudflare buildnpx @opennextjs/cloudflare deploy#12211 a5fca2c Thanks @elithrar! - Remove the 'pubsub' sub-command and related functionality
The Pub/Sub product was never made publicly available and has been discontinued. This removes the wrangler pubsub command and all associated functionality.
Updated dependencies [0c9625a, 0aaf080, b981db5, a113c0d, f7aa8c7]:
If a Workers project includes some durable_objects in it but no migrations we show a warning to the user to add migrations to their config. However, t
#12189 eb8a415 Thanks @NuroDev! - Fixed Durable Object missing migrations warning message.
If a Workers project includes some durable_objects in it but no migrations we show a warning to the user to add migrations to their config. However, this warning recommended new_classes for their migrations, but we instead now recommend all users use new_sqlite_classes instead.
#11804 3b06b18 Thanks @emily-shen! - fix: allow d1 execute, d1 export, and d1 migrations to work locally without database_id in config.
#12183 17961bb Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260124.0 | 1.20260127.0 |
#12196 52fdfe7 Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260127.0 | 1.20260128.0 |
#12199 6d8d9cd Thanks @petebacondarwin! - Prevent wrangler logout from failing when the Wrangler configuration file is invalid
Previously, if your wrangler.toml or wrangler.json file contained syntax errors or invalid values, the wrangler logout command would fail. Now, configuration parsing errors are caught and logged at debug level, allowing you to log out regardless of the state of your configuration file.
#12153 cb72c11 Thanks @petebacondarwin! - Sanitize commands and arguments in telemetry to prevent accidentally capturing sensitive information.
Changes:
command/args to sanitizedCommand/sanitizedArgs to distinguish from historical fields that may have contained sensitive data in older versionsCOMMAND_ARG_ALLOW_LISTUpdated dependencies [8a210af, 17961bb, 52fdfe7, 5f060c9]:
Adds a new --inspector-ip CLI flag and dev.inspector_ip configuration option to allow customising the IP address that the inspector server listens on.
#12008 e414f05 Thanks @penalosa! - Add support for customising the inspector IP address
Adds a new --inspector-ip CLI flag and dev.inspector_ip configuration option to allow customising the IP address that the inspector server listens on. Previously, the inspector was hardcoded to listen only on 127.0.0.1.
Example usage:
# CLI flag
wrangler dev --inspector-ip 0.0.0.0
// wrangler.json
{
"dev": {
"inspector_ip": "0.0.0.0"
}
}
#12034 05714f8 Thanks @emily-shen! - Add a no-op local explorer worker, which is gated by the experimental flag X_LOCAL_EXPLORER.
#12134 a0a9ef6 Thanks @NuroDev! - Fixed Fish shell tab completions.
The wrangler tab completions are powered by @bomb.sh/tab which has been upgraded to version 0.0.12 which includes a fix for the Fish shell which was previously not working at all.
#12006 ad4666c Thanks @penalosa! - Remove --use-remote option from wrangler hyperdrive create command
Hyperdrive does not support remote bindings during local development - it requires a localConnectionString to connect to a local database. This change removes the confusing "remote resource" prompt that was shown when creating a Hyperdrive config.
Fixes #11674
#11853 014e7aa Thanks @43081j! - Use built-in stripVTControlCharacters utility rather than the strip-ansi package.
#12040 77e82d2 Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260120.0 | 1.20260122.0 |
#12061 f08ef21 Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260122.0 | 1.20260123.0 |
#12088 0641e6c Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260123.0 | 1.20260124.0 |
#12044 eacedba Thanks @edmundhung! - Fix wrangler secret list to error when the Worker is not found
Previously, running wrangler secret list against a non-existent Worker would silently return an empty array, making it difficult to diagnose issues like being logged into the wrong account. It now returns an error with suggestions for common causes.
#12150 e8b2ef5 Thanks @dario-piotrowicz! - Emit autoconfig summary as a separate output entry
Move the autoconfig summary from the deploy output entry to a dedicated autoconfig output entry type. This entry is now emitted by both wrangler deploy and wrangler setup commands when autoconfig runs, making it easier to track autoconfig results independently of deployments.
Updated dependencies [014e7aa, e414f05, 77e82d2, f08ef21, 0641e6c, 05714f8, bbd8a5e]:
wrangler complete bash >> ~/.bashrc
#11113 bba0968 Thanks @AmirSa12! - Add wrangler complete command for shell completion scripts (bash, zsh, powershell)
Usage:
# Bash
wrangler complete bash >> ~/.bashrc
# Zsh
wrangler complete zsh >> ~/.zshrc
# Fish
wrangler complete fish >> ~/.config/fish/completions/wrangler.fish
# PowerShell
wrangler complete powershell > $PROFILE
@bomb.sh/tab library for cross-shell compatibilityexperimental_getWranglerCommands() API#11893 f9e8a45 Thanks @NuroDev! - wrangler types now generates per-environment TypeScript interfaces when named environments exist in your configuration.
When your configuration has named environments (an env object), wrangler types now generates both:
StagingEnv, ProductionEnv) containing only the bindings explicitly declared in each environment, plus inherited secretsEnv interface with all bindings from all environments (top-level + named environments), where:
KVNamespace | R2Bucket)However, if your config does not contain any environments, or you manually specify an environment via --env, wrangler types will continue to generate a single interface as before.
Example:
Given the following wrangler.jsonc:
{
"name": "my-worker",
"kv_namespaces": [
{
"binding": "SHARED_KV",
"id": "abc123"
}
],
"env": {
"staging": {
"kv_namespaces": [
{ "binding": "SHARED_KV", "id": "staging-kv" },
{ "binding": "STAGING_CACHE", "id": "staging-cache" }
]
}
}
}
Running wrangler types will generate:
declare namespace Cloudflare {
interface StagingEnv {
SHARED_KV: KVNamespace;
STAGING_CACHE: KVNamespace;
}
interface Env {
SHARED_KV: KVNamespace; // Required: in all environments
STAGING_CACHE?: KVNamespace; // Optional: only in staging
}
}
interface Env extends Cloudflare.Env {}
#12030 614bbd7 Thanks @jbwcloudflare! - Fix wrangler pages project validate to respect file count limits from CF_PAGES_UPLOAD_JWT
#11993 788bf78 Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260116.0 | 1.20260120.0 |
#12039 1375577 Thanks @dimitropoulos! - Fixed the flag casing for the time period flag for the d1 insights command.
#12026 c3407ad Thanks @dario-piotrowicz! - Fix wrangler setup not automatically selecting workers as the target for new SvelteKit apps
The Sveltekit adapter:cloudflare adapter now accepts two different targets workers or pages. Since the wrangler auto configuration only targets workers, wrangler should instruct the adapter to use the workers variant. (The auto configuration process would in any case not work if the user were to target pages.)
Updated dependencies [788bf78, ae108f0]:
The Cloudflare OAuth API always requires the redirect_uri to be localhost:8976. However, sometimes the Wrangler OAuth server needed to listen on a dif
#9396 75386b1 Thanks @gnekich! - Fix wrangler login with custom callback-host/callback-port
The Cloudflare OAuth API always requires the redirect_uri to be localhost:8976. However, sometimes the Wrangler OAuth server needed to listen on a different host/port, for example when running from inside a container. We were previously incorrectly setting the redirect_uri to the configured callback host/port, but it needs to be up to the user to map localhost:8976 to the Wrangler OAuth server in the container.
Example:
You might run Wrangler inside a docker container like this: docker run -p 8989:8976 <image>, which forwards port 8976 on your host to 8989 inside the container.
Then inside the container, run wrangler login --callback-host=0.0.0.0 --callback-port=8989
The OAuth link still has a redirect_uri set tolocalhost:8976. For example https://dash.cloudflare.com/oauth2/auth?...&redirect_uri=http%3A%2F%2Flocalhost%3A8976%2Foauth%2Fcallback&...
However the redirect to localhost:8976 is then forwarded to the Wrangler OAuth server inside your container, allowing the login to complete.
#11925 8e4a0e5 Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260114.0 | 1.20260115.0 |
#11942 133bf95 Thanks @penalosa! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260115.0 | 1.20260116.0 |
#11922 93d8d78 Thanks @dario-piotrowicz! - Improve telemetry errors being sent to Sentry by wrangler init when it delegates to C3 by ensuring that they contain the output of the C3 execution.
#11940 69ff962 Thanks @penalosa! - Show helpful messages for file not found errors (ENOENT)
When users encounter file not found errors, Wrangler now displays a helpful message with the missing file path and common causes, instead of reporting to Sentry.
#11904 22727c2 Thanks @danielrs! - Fix false positive infinite loop detection for exact path redirects
Fixed an issue where the redirect validation incorrectly flagged exact path redirects like / /index.html 200 as infinite loops. This was particularly problematic when html_handling is set to "none", where such redirects are valid.
The fix makes the validation more specific to only block wildcard patterns (like /* /index.html) that would actually cause infinite loops, while allowing exact path matches that are valid in certain configurations.
Fixes: https://github.com/cloudflare/workers-sdk/issues/11824
#11946 fa39a73 Thanks @MattieTK! - Fix configFileName returning wrong filename for .jsonc config files
Previously, users with a wrangler.jsonc config file would see error messages and hints referring to wrangler.json instead of wrangler.jsonc. This was because the configFormat function collapsed both .json and .jsonc files into a single "jsonc" value, losing the distinction between them.
Now configFormat returns "json" for .json files and "jsonc" for .jsonc files, allowing configFileName to return the correct filename for each format.
#11968 4ac7c82 Thanks @MattieTK! - fix: include version components in command event metrics
Adds wranglerMajorVersion, wranglerMinorVersion, and wranglerPatchVersion to command events (wrangler command started, wrangler command completed, wrangler command errored). These properties were previously only included in adhoc events.
#11940 69ff962 Thanks @penalosa! - Improve error message when creating duplicate KV namespace
When attempting to create a KV namespace with a title that already exists, Wrangler now provides a clear, user-friendly error message instead of the generic API error. The new message explains that the namespace already exists and suggests running wrangler kv namespace list to see existing namespaces with their IDs, or choosing a different namespace name.
#11962 029531a Thanks @dario-piotrowicz! - Cache chosen account in memory to avoid repeated prompts
When users have multiple accounts and no node_modules directory exists for file caching, Wrangler (run via npx and equivalent commands) would prompt for account selection multiple times during a single command. Now the selected account is also stored in process memory, preventing duplicate prompts and potential issues from inconsistent account choices.
#11964 d58fbd1 Thanks @dario-piotrowicz! - Make name the positional argument for wrangler delete instead of script
The script argument was meaningless for the delete command since it deletes by worker name, not by entry point path. The name argument is now accepted as a positional argument, allowing users to run wrangler delete my-worker instead of wrangler delete --name my-worker. The script argument is now hidden but still accepted for backwards compatibility.
#11967 202c59e Thanks @emily-shen! - chore: update undici
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| undici | 7.14.0 | 7.18.2 |
#11940 69ff962 Thanks @penalosa! - Improve error handling for Vite config transformations
Replace assertions with proper error handling when transforming Vite configs. When Wrangler encounters a Vite config that uses a function or lacks a plugins array, it now provides clear, actionable error messages instead of crashing with assertion failures. The check function gracefully skips incompatible configs with debug logging.
Updated dependencies [8e4a0e5, 133bf95, 202c59e, 133bf95, 25e2c60]:
The following dependency versions have been updated:
#11908 e78186d Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260111.0 | 1.20260114.0 |
#11880 fe4faa3 Thanks @penalosa! - Show helpful messages for errors outside of Wrangler's control. This prevents unnecessary Sentry reports.
Errors now handled with user-friendly messages:
UND_ERR_CONNECT_TIMEOUT) - typically due to slow networks or connectivity issuesEPERM, EACCES) - caused by insufficient permissions, locked files, or antivirus softwareENOTFOUND) - caused by network connectivity issues or DNS configuration problems#11882 695b043 Thanks @GregBrimble! - Improve the error message for wrangler secret put when using Worker versions or gradual deployments. wrangler versions secret put should be used instead, or ensure to deploy the latest version before using wrangler secret put. wrangler secret put alone will add the new secret to the latest version (possibly undeployed) and immediately deploy that which is usually not intended.
Updated dependencies [e78186d, fec8f5b, d39777f, 4714ca1, c17e971]:
Pass user provided values from --commit-hash safely to underlying git command.
#11889 99b1f32 Thanks @emily-shen! - Use argument array when executing git commands with wrangler pages deploy
Pass user provided values from --commit-hash safely to underlying git command.
The new --check flag allows you to verify that your generated types file is up-to-date without regenerating it. This is useful for CI/CD pipelines, pr
#11852 ad65efa Thanks @NuroDev! - Add --check flag to wrangler types command
The new --check flag allows you to verify that your generated types file is up-to-date without regenerating it. This is useful for CI/CD pipelines, pre-commit hooks, or any scenario where you want to ensure types have been committed after configuration changes.
When types are up-to-date, the command exits with code 0:
$ wrangler types --check
✨ Types at worker-configuration.d.ts are up to date.
When types are out-of-date, the command exits with code 1:
$ wrangler types --check
✘ [ERROR] Types at worker-configuration.d.ts are out of date. Run `wrangler types` to regenerate.
You can also use it with a custom output path:
$ wrangler types ./custom-types.d.ts --check
#11529 43d5363 Thanks @matthewdavidrodgers! - Add ability to enable higher asset count limits for Pages deployments
Wrangler can now read asset count limits from JWT claims during Pages deployments, allowing users to be enabled for higher limits (up to 100,000 assets) on a per-account basis. The default limit remains at 20,000 assets.
#11755 0f8d69d Thanks @nikitassharma! - Users can now specify constraints.tiers for their container applications. tier is deprecated in favor of tiers.
If left unset, we will default to tiers: [1, 2].
Note that constraints is an experimental feature.
#11820 b0e54b2 Thanks @MattieTK! - Add AI agent detection to analytics events
Wrangler now detects when commands are executed by AI coding agents (such as Claude Code, Cursor, GitHub Copilot, etc.) using the am-i-vibing library. This information is included as an agent property in all analytics events, helping Cloudflare understand how developers interact with Wrangler through AI assistants.
The agent property will contain the agent ID (e.g., "claude-code", "cursor-agent") when detected, or null when running outside an agentic environment.
#11494 ed60c4f Thanks @jalmonter! - Fix scheduled trigger warning showing undefined port
When running wrangler dev with a worker that has cron triggers, the warning message displayed an invalid URL like curl "http://localhost:undefined/cdn-cgi/handler/scheduled" because the port wasn't yet determined when the warning was logged.
Moved the warning to after the proxy server is fully ready, where the actual public URL and port are known.
#11831 faa5753 Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260107.1 | 1.20260108.0 |
#11844 e574ef3 Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260108.0 | 1.20260109.0 |
#11872 b6148ed Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260109.0 | 1.20260111.0 |
#11843 ab3859c Thanks @dario-piotrowicz! - Update the Wrangler autoconfig logic to work with the latest version of Waku
The latest version of Waku (0.12.5-1.0.0-alpha.1-0) requires a src/waku.server.tsx file instead of a src/server-entry.tsx one, so the Wrangler autoconfig logic (the logic being run as part of wrangler setup and wrangler deploy --x-autoconfig that configures a project to be deployable on Cloudflare) has been updated accordingly.
Also the way the worker needs to handle static assets has been updated as recommended from the Waku team.
#11848 0eb973d Thanks @petebacondarwin! - Fix incorrect warning about multiple environments when using redirected config
Previously, when using a redirected config (via configPath in another config file) that originated from a config with multiple environments, wrangler would incorrectly warn about missing environment specification. This fix ensures the warning is only shown when the actual config being used has multiple environments defined, not when the original config did.
Updated dependencies [ed60c4f, 5c59217, faa5753, e574ef3, b6148ed, beb96af, 5c59217, fc96e5f]:
The help output now groups commands by product category (Account, Compute & AI, Storage & Databases, Networking & Security) to match the Cloudflare da
#11728 7d63fa5 Thanks @NuroDev! - Add command categories to wrangler help menu
The help output now groups commands by product category (Account, Compute & AI, Storage & Databases, Networking & Security) to match the Cloudflare dashboard organization:
$ wrangler --help
COMMANDS
wrangler docs [search..] 📚 Open Wrangler's command documentation in your browser
ACCOUNT
wrangler auth 🔓 Manage authentication
wrangler login 🔑 Login to Cloudflare
...
COMPUTE & AI
wrangler ai 🤖 Manage AI models
wrangler containers 📦 Manage Containers [open beta]
...
This improves discoverability by organizing the 20+ wrangler commands into logical groups.
#11822 97e67b9 Thanks @dependabot! - chore: update dependencies of "miniflare", "wrangler"
The following dependency versions have been updated:
| Dependency | From | To |
|---|---|---|
| workerd | 1.20260103.0 | 1.20260107.1 |
Updated dependencies [97e67b9]:
You can now retrieve your authentication token for use with other tools and scripts:
#11682 b993d95 Thanks @ascorbic! - Add wrangler auth token command to retrieve your current authentication credentials.
You can now retrieve your authentication token for use with other tools and scripts:
wrangler auth token
The command returns whichever authentication method is currently configured:
wrangler login (automatically refreshed if expired)CLOUDFLARE_API_TOKEN environment variableUse --json to get structured output including the token type, which also supports API key/email authentication:
wrangler auth token --json
This is similar to gh auth token in the GitHub CLI.
#11702 f612b46 Thanks @gpanders! - Add support for trusted_user_ca_keys in Wrangler
You can now configure SSH trusted user CA keys for containers. Add the following to your wrangler.toml:
[[containers.trusted_user_ca_keys]]
public_key = "ssh-ed25519 AAAAC3..."
This allows you to specify CA public keys that can be used to verify SSH user certificates.
#11437 9e360f6 Thanks @ichernetsky-cf! - Drop deprecated containers observability.logging field
#11616 fc95831 Thanks @NuroDev! - Add type generation support to wrangler dev
You can now have your worker configuration types be automatically generated when the local Wrangler development server starts.
To use it you can either:
--types flag when running wrangler dev.dev.generate_types boolean property.{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "example",
"main": "src/index.ts",
"compatibility_date": "2025-12-12",
"dev": {
"generate_types": true
}
}
#11524 b0dbf1a Thanks @penalosa! - Add hidden CLI flags to wrangler setup for suppressing output
Two new hidden flags have been added to wrangler setup:
--no-completion-message: Suppresses the deployment details message after setup completes--no-install-wrangler: Skips Wrangler installation during project setup#11777 69979a3 Thanks @MattieTK! - Add analytics properties to secret commands for better usage insights
Secret commands (wrangler secret put, wrangler secret bulk, and their Pages/versions equivalents) now include additional analytics properties to help understand how secrets are being managed:
secretOperation: Whether this is a "single" or "bulk" secret operationsecretSource: How the secret was provided ("interactive", "stdin", or "file")secretFormat: For bulk operations, the format used ("json" or "dotenv")hasEnvironment: Whether an environment was specifiedThese properties help improve the developer experience by understanding common usage patterns. No sensitive information (secret names, values, or counts) is tracked.
#11738 c54f8da Thanks @jamesopstad! - Add default Text module rule for .sql files.
This enables importing .sql files directly in Wrangler and the Cloudflare Vite plugin without extra configuration.
#11692 df1f9c9 Thanks @dario-piotrowicz! - Support Waku in autoconfig
#11549 d059f69 Thanks @dario-piotrowicz! - Support Vike in autoconfig
#11683 02fbd22 Thanks @ascorbic! - Display a warning when authentication errors occur and the account_id in your Wrangler configuration does not match any of your authenticated accounts. This helps identify configuration issues where you may have the wrong account ID set in your wrangler.toml or wrangler.jsonc file.
#11704 77078ef Thanks @dario-piotrowicz! - Fix autoconfig handling of Next.js apps with CJS config files and incompatible Next.js versions
Previously, wrangler setup and wrangler deploy --x-autoconfig would fail when working with Next.js applications that use CommonJS config files (next.config.cjs) or have versions of Next.js that don't match the required peer dependencies. The autoconfig process now uses dynamic imports and forced installation to handle these scenarios gracefully.
#11796 2510723 Thanks @dario-piotrowicz! - wrangler deploy delegates to opennextjs-cloudflare deploy only when the --x-autoconfig flag is used
The wrangler deploy command has been updated to delegate to the opennextjs-cloudflare deploy command when run in an open-next project. Once this behavior had been introduced it caused a few issues. So it's been decided to enable it for the time being only when the --x-autoconfig flag is set (since this behavior, although generally valid, is only strictly necessary for the wrangler deploy's autoconfig flow).
#11764 9f6dd71 Thanks @terakoya76! - Fix R2 Data Catalog snapshot-expiration API field names
The wrangler r2 bucket catalog snapshot-expiration enable command was sending incorrect field names
to the Cloudflare API, resulting in a 422 Unprocessable Entity error. This fix updates the API request
body to use the correct field names:
olderThanDays -> max_snapshot_age (as duration string, e.g., "30d")retainLast -> min_snapshots_to_keepThe CLI options (--older-than-days and --retain-last) remain unchanged.
#11651 d123ad0 Thanks @dario-piotrowicz! - Surface a more helpful error message for TOML Date, Date-Time, and Time values in vars
TOML parses unquoted date/time values like DATE = 2024-01-01 as objects. Previously this would cause an unhelpful error message further down the stack. Now wrangler surfaces a more helpful error message earlier, telling you to quote the value as a string, e.g. DATE = "2024-01-01".
#11711 5121b23 Thanks @southpolesteve! - Show an error when D1 migration commands are run without a configuration file
Previously, running wrangler d1 migrations apply, wrangler d1 migrations list, or wrangler d1 migrations create in a directory without a Wrangler configuration file would silently exit with no feedback. Now these commands display a clear error message:
"No configuration file found. Create a wrangler.jsonc file to define your D1 database."
#11710 82e7e90 Thanks @dario-piotrowicz! - Fix arguments passed to wrangler deploy not being forwarded to opennextjs-cloudflare deploy
wrangler deploy run in an open-next project delegates to opennextjs-cloudflare deploy, as part of this all the arguments passed to wrangler deploy need be forwarded to opennextjs-cloudflare deploy, before the arguments would be lost, now they will be successfully forwarded (for example wrangler deploy --keep-vars will call opennextjs-cloudflare deploy --keep-vars)
#10750 4688f59 Thanks @jacoblearned! - Notify user on local dev server reload.
When running wrangler dev, the local server suppresses Miniflare's reload messages to prevent duplicate log entries from the proxy and user workers. This update adds a reload complete message so users know their changes were applied, instead of only seeing "Reloading local server...".
#11673 b827893 Thanks @MattieTK! - Breaks out version numbers into sortable number types for analytics logging
Updated dependencies [65d1850, 1615fce, b2769bf, 554a4df, 8eede3f, 6a05b1c, 62fd118, a7e9f80, eac5cf7]:
Adds new commands to manage automatic snapshot expiration for R2 Data Catalog tables:
#11196 171cfd9 Thanks @emily-shen! - For containers being created in a FedRAMP high environment, registry credentials are encrypted by the container platform.
Update wrangler to correctly send a request to configure a registry for FedRAMP containers.
#11646 472cf72 Thanks @vovacf201! - feat: add R2 Data Catalog snapshot expiration commands
Adds new commands to manage automatic snapshot expiration for R2 Data Catalog tables:
wrangler r2 bucket catalog snapshot-expiration enable - Enable automatic snapshot expirationwrangler r2 bucket catalog snapshot-expiration disable - Disable automatic snapshot expirationSnapshot expiration helps manage storage costs by automatically removing old table snapshots while keeping a minimum number of recent snapshots for recovery purposes.
Example usage:
# Enable snapshot expiration for entire catalog (keep 10 snapshots, expire after 5 days)
wrangler r2 bucket catalog snapshot-expiration enable my-bucket --token $R2_CATALOG_TOKEN --max-age 7200 --min-count 10
# Enable for specific table
wrangler r2 bucket catalog snapshot-expiration enable my-bucket my-namespace my-table --token $R2_CATALOG_TOKEN --max-age 2880 --min-count 5
# Disable snapshot expiration
wrangler r2 bucket catalog snapshot-expiration disable my-bucket
#11649 428ae9e Thanks @ascorbic! - fix: respect TypeScript path aliases when resolving non-JS modules with module rules
When importing non-JavaScript files (like .graphql, .txt, etc.) using TypeScript path aliases defined in tsconfig.json, Wrangler's module-collection plugin now correctly resolves these imports. Previously, path aliases were only respected for JavaScript/TypeScript files, causing imports like import schema from '~lib/schema.graphql' to fail when using module rules.
#11647 c0e249e Thanks @dario-piotrowicz! - The auto-configuration logic present in wrangler setup and wrangler deploy --x-autoconfig cannot reliably handle Hono projects, so in these cases make sure to properly error saying that automatically configuring such projects is not supported.
#11694 3853200 Thanks @dario-piotrowicz! - fix: improve the open-next detection that wrangler deploy performs to eliminate false positives for non open-next projects
Updated dependencies [ae1ad22, 737c0f4]:
Updated dependencies [`5d085fb`, `b75b710`, `1e9be12`]:
#11301 6c590a0 Thanks @dario-piotrowicz! - Make wrangler deploy run opennextjs-cloudflare deploy when executed in an open-next project
#11045 12a63ef Thanks @edmundhung! - Add an internal unstable_printBindings API for vite plugin integration
#11590 7d8d4a6 Thanks @pombosilva! - Add Workflows send-event to wrangler commands.
#11301 6c590a0 Thanks @dario-piotrowicz! - Support Next.js (via OpenNext) projects in autoconfig
#11615 ed42010 Thanks @elithrar! - Add helpful warning when SSL certificate errors occur due to corporate proxies or VPNs intercepting HTTPS traffic. When errors like "self-signed certificate in certificate chain" are detected, wrangler now displays guidance about installing missing system roots from your corporate proxy vendor.
#11641 6b28de1 Thanks @petebacondarwin! - update command status text and formatting
#11578 4201472 Thanks @gpanders! - Fixup UX papercuts in containers SSH
#11550 95d81e1 Thanks @hiendv! - Fix "TypeError: Body is unusable: Body has already been read" when failing to exchange oauth code because of double response.text().
Updated dependencies [5d085fb, b75b710, 1e9be12]:
You can now use containers with Durable Objects that are accessed via `ctx.exports`.
#11512 c15e99e Thanks @emily-shen! - Enable using ctx.exports with containers
You can now use containers with Durable Objects that are accessed via ctx.exports.
Now your config file can look something like this:
{
"name": "container-app",
"main": "src/index.ts",
"compatibility_date": "2025-12-01",
"compatibility_flags": ["enable_ctx_exports"], // compat flag needed for now.
"containers": [
{
"image": "./Dockerfile",
"class_name": "MyDOClassname",
"name": "my-container"
},
],
"migrations": [
{
"tag": "v1",
"new_sqlite_classes": ["MyDOClassname"],
},
],
// no need to declare your durable object binding here
}
Note that when using ctx.exports, where you previously accessed a Durable Object via something like env.DO, you should now access with ctx.exports.MyDOClassname.
Refer to the docs for more information on using ctx.exports.
#11508 b17797c Thanks @dario-piotrowicz! - Wrangler will no longer try to add additional configuration to projects using @cloudflare/vite-plugin when deploying or running wrangler setup
#11508 b17797c Thanks @dario-piotrowicz! - When a Vite project is detected, install @cloudflare/vite-plugin
#11576 bb47e20 Thanks @dario-piotrowicz! - Support Analog projects in autoconfig
#10582 991760d Thanks @flakey5! - Add containers ssh command
#11467 235d325 Thanks @edmundhung! - fix: prevent reporting SQLite error from wrangler d1 execute to Sentry
#11414 41103f5 Thanks @petebacondarwin! - add extra logging to user log-in flow for diagnosing failed login requests
#11559 ea6fbec Thanks @nikitassharma! - Remove image validation for containers on wrangler deploy.
Internal customers are able to use additional image registries and will run into failures with this validation. Image registry validation will now be handled by the API.
Updated dependencies [31c162a, bd5f087, c6dd86f]:
This change augments wrangler deploy output being printed to WRANGLER_OUTPUT_FILE_DIRECTORY or WRANGLER_OUTPUT_FILE_PATH to also include a new autocon
#11500 af54c63 Thanks @dario-piotrowicz! - Add new autoconfig_summary field to the deploy output entry
This change augments wrangler deploy output being printed to WRANGLER_OUTPUT_FILE_DIRECTORY or WRANGLER_OUTPUT_FILE_PATH to also include a new autoconfig_summary field containing the possible summary details for the autoconfig process (the field is undefined if autoconfig didn't run).
Note: the field is experimental and could change while autoconfig is not GA
#11477 9988cc9 Thanks @ascorbic! - Support Nuxt in autoconfig
#11472 ce295bf Thanks @dario-piotrowicz! - Support Qwik projects in autoconfig
#10937 9514c9a Thanks @ReppCodes! - Add support for "targeted" placement mode with region, host, and hostname fields
This change adds a new mode to placement configuration. You can specify one of the following fields to target specific external resources for Worker placement:
region: Specify a region identifier (e.g., "aws:us-east-1") to target a region from another cloud service providerhost: Specify a host with (required) port (e.g., "example.com:8123") to target a TCP servicehostname: Specify a hostname (e.g., "example.com") to target an HTTP resourceThese fields are mutually exclusive - only one can be specified at a time.
Example configuration:
[placement]
host = "example.com:8123"
#11498 ac861f8 Thanks @penalosa! - Add React Router support in autoconfig
#11506 79d30d4 Thanks @vicb! - Set the target JS version to ES2024
#11393 45480b1 Thanks @alsuren! - improved --help text for wrangler d1 subcommands
#11523 94c67e8 Thanks @jamesopstad! - fix: types from @cloudflare/workers-utils not being exported correctly from Wrangler
#11483 f550b62 Thanks @edmundhung! - stop running npm install with --legacy-peer-deps flag when setting up a project
Updated dependencies [819e287, 56e78c8, 0aa959a]:
Updated dependencies [`59534ba`]:
#11504 7e80340 Thanks @dario-piotrowicz! - Fix wrangler deploy failing for new workers containing environment variables or bindings
Updated dependencies [59534ba]:
The remote diffing feature has been enabled by default for a while and its functionality is stable, as a result the experimental flag (only available
#11416 abe49d8 Thanks @dario-piotrowicz! - Remove the wrangler deploy's --x-remote-diff-check experimental flag
The remote diffing feature has been enabled by default for a while and its functionality is stable, as a result the experimental flag (only available for option-out of the feature right now) has been removed.
#11408 f29e699 Thanks @ascorbic! - Export unstable helpers useful for generating wrangler config
#11389 2342d2f Thanks @dario-piotrowicz! - Improve the wrangler deploy flow to also check for potential overrides of secrets.
Now when you run wrangler deploy Wrangler will check the remote secrets for your workers for conflicts with the names of the bindings you're about to deploy. If there are conflicts, Wrangler will warn you and ask you for your permission before proceeding.
#11375 9a1de61 Thanks @penalosa! - Support TanStack Start in autoconfig
#11360 6b38532 Thanks @emily-shen! - Containers: Allow users to directly authenticate external image registries in local dev
Previously, we always queried the API for stored registry credentials and used those to pull images. This means that if you are using an external registry (ECR, dockerhub) then you have to configure registry credentials remotely before running local dev.
Now you can directly authenticate with your external registry provider (using docker login etc.), and Wrangler or Vite will be able to pull the image specified in the containers.image field in your config file.
The Cloudflare-managed registry (registry.cloudflare.com) currently still does not work with the Vite plugin.
#11009 e4ddbc2 Thanks @dario-piotrowicz! - Allow users to provide an account_id as part of the WorkerConfigObject they pass to maybeStartOrUpdateRemoteProxySession
#11478 2aec2b4 Thanks @dario-piotrowicz! - Support SolidStart in autoconfig
#11330 5a873bb Thanks @dario-piotrowicz! - Support Angular projects in autoconfig
#11449 e7b690b Thanks @penalosa! - Delegate generation of HTTPS certificates to Miniflare
#11448 2b4813b Thanks @edmundhung! - Bumps esbuild version to 0.27.0
#11335 c47ad11 Thanks @dario-piotrowicz! - Support internal-only undocumented cross_account_grant service binding property
#11346 a977701 Thanks @penalosa! - We're soon going to make backend changes that mean that wrangler dev --remote sessions will no longer have an associated inspector connection. In advance of these backend changes, we've enabled a new wrangler tail-based logging strategy for wrangler dev --remote. For now, you can revert to the previous logging strategy with wrangler dev --remote --no-x-tail-logs, but in future it will not be possible to revert.
The impact of this will be that logs that were previously available via devtools will now be provided directly to the Wrangler console and it will no longer be possible to interact with the remote Worker via the devtools console.
#11397 b154de2 Thanks @vicb! - Use more workerd native modules
Node modules punycode, trace_events, cluster, wasi, and domains will be used when enabled
via a compatibility flag or by default when the compatibility date is greater or equal to 2025-12-04.
#11452 76f0540 Thanks @penalosa! - Remove uses of eval() from the Wrangler bundle
#11284 695fa25 Thanks @dom96! - Removes duplicate module warnings when vendoring Python packages
#11249 504e258 Thanks @dario-piotrowicz! - fix: Generalize autoconfig wording
Generalize the autoconfig wording so that when it doesn't specifically mention "deployment" (since it can be run via wrangler setup or the autoconfig programmatic API)
#11455 d25f7e2 Thanks @dario-piotrowicz! - Fix autoconfig using absolute paths for static projects
Running the experimental autoconfig logic through wrangler setup and wrangler deploy --x-autoconfig on a static project results in absolute paths being used. This is incorrect, especially when such paths are being included in the generated wrangler.jsonc. The changes here fix the autoconfig logic to use paths relative to the project's root instead.
For example given a project located in /Users/usr/projects/sites/my-static-site, before:
// wrangler.jsonc at /Users/usr/projects/sites/my-static-site
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "static",
"compatibility_date": "2025-11-27",
"observability": {
"enabled": true
},
"assets": {
"directory": "/Users/usr/projects/sites/my-static-site/public"
}
}
and after:
// wrangler.jsonc at /Users/usr/projects/sites/my-static-site
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "static",
"compatibility_date": "2025-11-27",
"observability": {
"enabled": true
},
"assets": {
"directory": "public"
}
}
#11484 1cfae2d Thanks @edmundhung! - Explicitly close FileHandle in wrangler d1 execute to support Node 25
#11383 1d685cb Thanks @dario-piotrowicz! - Fix: ensure that when a remote proxy session creation fails a hard error is surfaced to the user (both in wrangler dev and in the programmatic API).
When using remote bindings, either with wrangler dev or via startRemoteProxySession/maybeStartOrUpdateRemoteProxySession the remote proxy session necessary to connect to the remote resources can fail to be created, this might happen if for example you try to set a binding with some invalid values such as:
MY_R2: {
type: "r2_bucket",
bucket_name: "non-existent", // No bucket called "non-existent" exists
remote: true,
},
Before this could go undetected and cause unwanted behaviors such as requests handling hanging indefinitely, now wrangler will instead crash (or throw a hard error ion the programmatic API), clearly indicating that something went wrong during the remote session's creation.
#11366 edf896d Thanks @ascorbic! - Use correctly-formatted names when displaying detected framework details
#11461 9eaa9e2 Thanks @dario-piotrowicz! - Update the structure of the configure method of autoconfig frameworks
Update the signature of the configure function of autoconfig frameworks (AutoconfigDetails#Framework), before they would return a RawConfig object to use to update the project's wrangler config file, now they return an object that includes the RawConfig and that can potentially also hold additional data relevant to the configuration.
Updated dependencies [2b4813b, b154de2, 5ee3780, 6e63b57, 71ab562, 5e937c1]:
This change enables users to select the environment for commands such as CLOUDFLARE_ENV=prod wrangler versions upload. The --env command line argument
#11345 d524e55 Thanks @penalosa! - Enable experimental support for autoconfig-powered Astro projects
#11228 43903a3 Thanks @petebacondarwin! - Support CLOUDFLARE_ENV environment variable for selecting the active environment
This change enables users to select the environment for commands such as CLOUDFLARE_ENV=prod wrangler versions upload. The --env command line argument takes precedence.
The CLOUDFLARE_ENV environment variable is mostly used with the @cloudflare/vite-plugin to select the environment for building the Worker to be deployed. This build also generates a "redirected deploy config" that is flattened to only contain the active environment.
To avoid accidentally deploying a version that is built for one environment to a different environment, there is an additional check to ensure that if the user specifies an environment in Wrangler it matches the original selected environment from the build.
It is enabled when the enable_nodejs_domain_module compatibility flag is set.
#11219 524a6e5 Thanks @Ltadrian! - Implement Hyperdrive binding TLS miniflare proxy. This will allow for wrangler dev hyperdrive bindings to connect to external
databases that require TLS.
#11233 c922a81 Thanks @emily-shen! - Add containers.unsafe to allow internal users to use additional container features
#11353 0cf696d Thanks @vicb! - Use the native node:domain module when available
It is enabled when the enable_nodejs_domain_module compatibility flag is set.
#11328 bb44120 Thanks @ascorbic! - Fixes a bug that caused wrangler deploy to hang when deploying SvelteKit sites with experimental autoconfig
#11025 4a158e9 Thanks @devin-ai-integration! - Use the native node:wasi module when available
It is enabled when the enable_nodejs_wasi_module compatibility flag is set.
Updated dependencies [0cf696d, 524a6e5, 4a158e9]:
Updated dependencies [`e5ec8cf`]:
#11344 c758809 Thanks @dario-piotrowicz! - Fix: mark the r2 bulk command as hidden and experimental
#11339 dfba912 Thanks @dario-piotrowicz! - Fix wrangler deploy erroring when it pulls down remote configs of workers containing an assets binding
Updated dependencies [e5ec8cf]:
For instance, previously running wrangler docs would give the following output:
#10703 c5c4ee5 Thanks @danlapid! - Add support for streaming tail consumers in local dev. This is an experimental new feature that allows you to register a tailStream() handler (compared to the existing tail() handler), which will receive streamed tail events from your Worker (compared to the tail() handler, which only receives batched events after your Worker has finished processing).
#11251 7035804 Thanks @penalosa! - When the WRANGLER_HIDE_BANNER environment variable is provided, Wrangler will no longer display a version banner. This applies to all commands.
For instance, previously running wrangler docs would give the following output:
> wrangler docs
⛅️ wrangler 4.47.0
───────────────────
Opening a link in your default browser: https://developers.cloudflare.com/workers/wrangler/commands/
With WRANGLER_HIDE_BANNER, this is now:
> WRANGLER_HIDE_BANNER=true wrangler docs
Opening a link in your default browser: https://developers.cloudflare.com/workers/wrangler/commands/
#11285 d014fa7 Thanks @vicb! - Implement the wrangler r2 bulk put bucket-name --filename list.json command.
The command uploads multiple objects to an R2 bucket.
The list of object is provided as a JSON encoded file via --filename. It is a list of key and file (respectively the name and the content for the object).
[
{ "key": "/path/to/obj", "file": "/path/to/file_1"},
{ "key": "/path/to/other/obj", "file": "/path/to/file_2"},
// ...
]
Uploads are executed concurrently and the level of concurrency can be set via --concurrency.
The command supports the same options as wrangler r2 object put, minus --file, and --pipe and plus --concurrency
#11268 15b8460 Thanks @penalosa! - Support SvelteKit projects in autoconfig
#11258 2011b6a Thanks @dario-piotrowicz! - Add --dry-run flag to wrangler setup and also a dryRun option to runAutoConfig
#11261 a352c7f Thanks @petebacondarwin! - Avoid using object lookup for OAuth Error classes
#11286 8e99766 Thanks @dario-piotrowicz! - fix: make sure that experimental_patchConfig doesn't throw if it encounters a null value
#11278 92afbba Thanks @ascorbic! - Fixes a bug that caused .dev.vars to be ignored in OpenNext
#11244 65b4afe Thanks @petebacondarwin! - Internal refactoring to improve error traceability in wrangler dev
#11238 da8442f Thanks @jamesopstad! - Add unstable_getDurableObjectClassNameToUseSQLiteMap export. This is an internal function for use in the Vite plugin.
#11266 09cb720 Thanks @penalosa! - Use the smol-toml library for parsing TOML instead of @iarna/toml
#11236 793e2b4 Thanks @ascorbic! - Refresh expired preview tokens when running in remote dev mode
#11286 8e99766 Thanks @dario-piotrowicz! - fix: wrangler deploy failing to patch local wrangler.jsonc files if the remote tail_consumers value is null
#11275 9cbf126 Thanks @dario-piotrowicz! - Ensure that wrangler deploy run with a positional argument or with --assets does not trigger the autoconfig process (even with --experimental-autoconfig)
#11242 dd1e560 Thanks @dario-piotrowicz! - Fix: make sure that remote proxy sessions's debug logs are enabled when the wrangler log level is set to "debug"
Updated dependencies [c5c4ee5, d0041e2, 827d017]:
If no port is specified, Wrangler now probes the default port and the 10 consecutive ports after it before falling back to a random port. This will he
#11212 3908162 Thanks @dario-piotrowicz! - Add autoconfig changes summary for wrangler deploy --x-autoconfig with the option for users to cancel the operation
#11229 14d79f2 Thanks @dario-piotrowicz! - Enables experimental-deploy-remote-diff-check flag by default (the flag is still present for now so that users can turn it off if needed) and improves the remote config diffing logic (to include less noise in the diff presented to the user)
#11245 dfc6513 Thanks @vicb! - Change how Wrangler selects default ports for dev sessions.
If no port is specified, Wrangler now probes the default port and the 10 consecutive ports after it before falling back to a random port. This will help getting a stable port number across dev sessions. Both the http server and inspector ports are affected.
When running wrangler deploy --experimental-autoconfig, after the automatic project settings detection Wrangler will now present users the opportunity
#11201 5286309 Thanks @avenceslau! - Add wrangler workflows instances restart command
#11214 5cf8a39 Thanks @penalosa! - Add the experimental wrangler setup command to run autoconfig outside of the deploy flow.
#11187 8abc789 Thanks @dario-piotrowicz! - Add possibility for users to edit their project settings during autoconfig
When running wrangler deploy --experimental-autoconfig, after the automatic project settings detection Wrangler will now present users the opportunity to customize the auto-detected project's settings
#11143 2d16610 Thanks @FlorentCollin! - Improve the formatting of the D1 execute command to always show the duration in milliseconds with two decimal places.
#11178 63defa2 Thanks @ascorbic! - Log a more helpful error when attempting to "r2 object put" a non-existent file
#11199 70d3d4a Thanks @penalosa! - Add telemetry to autoconfig
#11186 38396ed Thanks @hoodmane! - Removed warning when deploying a Python worker
#11024 cdcecfc Thanks @devin-ai-integration! - Use the native node:trace_events module when available
It is enabled when the enable_nodejs_trace_events_module compatibility flag is set.
#11195 e85f965 Thanks @ascorbic! - Ignores .dev.vars if --env-file has been explicitly passed
Previously, .dev.vars would always be read first, and then any file passed with --env-file would override variables in .dev.vars. This meant there was no way to ignore .dev.vars if you wanted to use a different env file. Now, if --env-file is passed, .dev.vars will be ignored entirely.
#11181 88aa707 Thanks @petebacondarwin! - add more logging around Wrangler authentication to help diagnose issues
Updated dependencies [dd7d584, 4259256, cdcecfc]:
Note this is a closed/experimental command that will not work without the appropriate account-level capabilities.
#11183 240ebeb Thanks @dario-piotrowicz! - expose experimental_getDetailsForAutoConfig and experimental_runAutoConfig APIs that provide respectively the autoconfig detection and execution functionalities
#11180 53b0fce Thanks @penalosa! - Detect non-framework static sites
#11162 c3ed531 Thanks @dario-piotrowicz! - add a remoteBindings option to getPlatformProxy to allow the disabling of remote bindings
#11164 305d7bf Thanks @penalosa! - Implement experimental autoconfig flow for static sites
#10605 b55a3c7 Thanks @emily-shen! - Add command to configure credentials for non-Cloudflare container registries
Note this is a closed/experimental command that will not work without the appropriate account-level capabilities.
#11078 5d7c4c2 Thanks @simonha9! - Add jurisdiction support to d1 db creation via command-line argument
#11160 05440a1 Thanks @dario-piotrowicz! - Allows auto-update of the local Wrangler configuration file to match remote configuration when running wrangler deploy --env <TARGET_ENV>
When running wrangler deploy, with --x-remote-diff-check and after cancelling the deployment due to destructive changes present in the local config file, Wrangler offers to update the Wrangler configuration file to match the remote configuration. This wasn't however enabled when a target environment was specified (via the --env|-e flag). Now this will also apply when an environment is targeted.
#11162 c3ed531 Thanks @dario-piotrowicz! - Update the description of the --local flag for the wrangler dev command to clarify that it disables remote bindings, also un-deprecate and un-hide it
#11162 c3ed531 Thanks @dario-piotrowicz! - Fix bindings with remote: true being logged as remote when run via wrangler dev --local
Updated dependencies [1ae020d]:
Now the argument values that are captured come from an allow list, and can be marked as ALLOW (capture the real value) or REDACT (capture as " ").
#11133 8ffbd17 Thanks @petebacondarwin! - Reduce the amount of arguments being passed in metrics capture.
Now the argument values that are captured come from an allow list, and can be marked as ALLOW (capture the real value) or REDACT (capture as "<REDACTED>").
#11033 77ed7e2 Thanks @dario-piotrowicz! - Offer to update the local Wrangler configuration file to match remote configuration when running wrangler deploy
When running wrangler deploy, with --x-remote-diff-check, Wrangler will display the difference between local and remote configuration.
If there would be a destructive change to the remote configuration, the user is given the option to cancel the deployment.
In the case where the user does cancel deployment, Wrangler will now also offer to update the local Wrangler configuration file to match the remote configuration.
#11139 bb00f9d Thanks @devin-ai-integration! - Updated cron trigger documentation links and improved error message to include instructions for testing cron triggers locally
#11135 ed666a1 Thanks @penalosa! - Implement tail-based logging for wrangler dev remote mode, behind the --x-tail-tags flag. This will become the default in the future.
#11149 22f25fd Thanks @penalosa! - Add no-op autoconfig logic behind an experimental flag
Updated dependencies [90a2566, 14f60e8]:
D1 commands (execute, export, migrations apply, migrations list, delete, time-travel) now display whether they're running against local or remote data
#11117 6822aaf Thanks @emily-shen! - fix: show local/remote status before D1 command confirmations
D1 commands (execute, export, migrations apply, migrations list, delete, time-travel) now display whether they're running against local or remote databases before showing confirmation prompts. This prevents confusion about which database will be affected by the operation.
#11077 bce8142 Thanks @petebacondarwin! - Ensure that process.env is case-insensitive on Windows
The object that holds the environment variables in process.env does not care about the case of its keys
in Windows. For example, process.env.SystemRoot and process.env.SYSTEMROOT will refer to the same value.
Previously, when merging fields from .env files we were replacing this native object with a vanilla
JavaScript object, that is case-insensitive, and so sometimes environment variables appeared to be missing
when in reality they just had different casing.
### Patch Changes - #11097 `55657eb` Thanks @penalosa! - Extract internal APIs into a new @cloudflare/workers-utils package - #11118 `d47f166` Thanks
--e now aliases --env only, and NOT --expires.
#10959 d0208fe Thanks @devin-ai-integration! - Fixed conflict between --env and --expires flags in wrangler r2 object put.
--e now aliases --env only, and NOT --expires.
#10915 dbe51c1 Thanks @devin-ai-integration! - Fixed self-bindings (service bindings to the same worker) showing as [not connected] in wrangler dev. Self-bindings now correctly show as [connected] since a worker is always available to itself.
#10913 d4f2daf Thanks @devin-ai-integration! - Fixed duplicate warning messages appearing during wrangler dev when configuration changes or state transitions occur
To use this feature, add a binding to your config file _without_ a resource ID:
#11030 1a8088a Thanks @penalosa! - Enable automatic resource provisioning by default in Wrangler. This is still an experimental feature, but we're turning on the flag by default to make it easier for people to test it and try it out. You can disable the feature using the --no-x-provision flag. It currently works for R2, D1, and KV bindings.
To use this feature, add a binding to your config file without a resource ID:
{
"kv_namespaces": [{ "binding": "MY_KV" }],
"d1_databases": [{ "binding": "MY_DB" }],
"r2_buckets": [{ "binding": "MY_R2" }]
}
wrangler dev will automatically create these resources for you locally, and when you next run wrangler deploy Wrangler will call the Cloudflare API to create the requested resources and link them to your Worker. They'll stay linked across deploys, and you don't need to add the resource IDs to the config file for future deploys to work. This is especially good for shared templates, which now no longer need to include account-specific resource ID when adding a binding.
#11037 4bd4c29 Thanks @danielrs! - Better Wrangler subdomain defaults warning.
Improves the warnings that we show users when either worker_dev or preview_urls are missing.
#10927 31e1330 Thanks @dom96! - Implements python_modules.excludes wrangler config field
[python_modules]
excludes = ["**/*.pyc", "**/__pycache__"]
#10741 2f57345 Thanks @penalosa! - Remove obsolete --x-remote-bindings flag
Updated dependencies [ca6c010]:
Originally, we were defaulting config.preview_urls to true, but we were accidentally enabling Preview URLs for users that only had config.workers_dev=
#10939 d4b4c90 Thanks @danielrs! - Config preview_urls defaults to workers_dev value.
Originally, we were defaulting config.preview_urls to true, but we
were accidentally enabling Preview URLs for users that only had
config.workers_dev=false.
Then, we set the default value of config.preview_urls to false, but we
were accidentally disabling Preview URLs for users that only had
config.workers_dev=true.
Rather than defaulting config.preview_urls to true or false, we
default to the resolved value of config.workers_dev. Should result in a
clearer user experience.
#11027 1a2bbf8 Thanks @jamesopstad! - Statically replace the value of process.env.NODE_ENV with development for development builds and production for production builds if it is not set. Else, use the given value. This ensures that libraries, such as React, that branch code based on process.env.NODE_ENV can be properly tree shaken.
#9705 0ee1a68 Thanks @hiendv! - Add params type to Workflow type generation. E.g.
interface Env {
MY_WORKFLOW: Workflow<
Parameters<import("./src/index").MyWorkflow["run"]>[0]["payload"]
>;
}
#10867 dd5f769 Thanks @austin-mc! - Add media binding support
#11018 5124818 Thanks @dario-piotrowicz! - Improve potential errors thrown by startRemoteProxySession by including more information
#11019 6643bd4 Thanks @dario-piotrowicz! - Fix observability.logs.persist being flagged as an unexpected field during the wrangler config file validation
#10768 8211bc9 Thanks @dario-piotrowicz! - Update logs handling to use the new handleStructuredLogs miniflare option
#10997 3bb034f Thanks @nikitassharma! - When either WRANGLER_OUTPUT_FILE_PATH or WRANGLER_OUTPUT_FILE_DIRECTORY are set
in the environment, then command failures will append a line to the output file
encoding the error code and message, if present.
#10986 43503c7 Thanks @emily-shen! - fix: cleanup any running containers again on wrangler dev exit
#11000 a6de9db Thanks @jonboulle! - always load container image into local store during build
BuildKit supports different build drivers. When using the more modern docker-container driver (which is now the default on some systems, e.g. a standard Docker installation on Fedora Linux), it will not automatically load the built image into the local image store. Since wrangler expects the image to be there (e.g. when calling getImageRepoTags), it will thus fail, e.g.:
⎔ Preparing container image(s)...
[+] Building 0.3s (8/8) FINISHED docker-container:default
[...]
WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
✘ [ERROR] failed inspecting image locally: Error response from daemon: failed to find image cloudflare-dev/sandbox:f86e40e4: docker.io/cloudflare-dev/sandbox:f86e40e4: No such image
Explicitly setting the --load flag (equivalent to -o type=docker) during the build fixes this and should make the build a bit more portable without requiring users to change their default build driver configuration.
#10994 d39c8b5 Thanks @pombosilva! - Make Workflows instances list command cursor based
#10892 7d0417b Thanks @dario-piotrowicz! - improve the diffing representation for wrangler deploy (run under --x-remote-diff-check)
Updated dependencies [36d7054, dd5f769, ee7d710, 8211bc9]:
Writing back changes to the user's config file (not necessary, but can make it resilient to binding name changes)
940b44d Thanks @devin-ai-integration! - feat: wrangler init --from-dash now generates wrangler.jsonc config files instead of wrangler.toml files#10938 e52d0ec Thanks @penalosa! - Acquire Cloudflare Access tokens for additional requests made during a wrangler dev --remote session
#10923 2429533 Thanks @emily-shen! - fix: update docker manifest inspect to use full image registry uri when checking if the image exists remotely
#10521 88b5b7f Thanks @penalosa! - Improves the Wrangler auto-provisioning feature (gated behind the experimental flag --x-provision) by:
--dry-run, which previously threw an error when your config file had auto provisioned resourcesbucket_name from the config file on uploadwrangler r2 bucket catalog compaction enable [namespace] [table]
#10881 ce832d5 Thanks @garvit-gupta! - Add table-level compaction commands for R2 Data Catalog:
wrangler r2 bucket catalog compaction enable <bucket> [namespace] [table]wrangler r2 bucket catalog compaction disable <bucket> [namespace] [table]This allows you to enable and disable automatic file compaction for a specific R2 data catalog table.
#10888 d0ab919 Thanks @lrapoport-cf! - Clarify that wrangler check startup generates a local CPU profile
Updated dependencies [42e256f, 4462bc1]:
Updated dependencies [`51f9dc1`, `f29b0b0`, `1334102`]:
#10865 26adce7 Thanks @WillTaylorDev! - Respect keep_vars for wrangler versions upload.
#10833 196ccbf Thanks @cmackenzie1! - Validate Pipeline entity names in Wrangler config before sending to the API.
#10856 1334102 Thanks @anonrig! - Removes unnecessary calls to "node:os"
Updated dependencies [51f9dc1, f29b0b0, 1334102]:
Updated dependencies [`2594130`]:
103fbf0 Thanks @petebacondarwin! - Allow WRANGLER_SEND_ERROR_REPORTS env var to override whether to report Wrangler crashes to Sentry#10757 59d5911 Thanks @dario-piotrowicz! - fix console.debug logs not being logged at the info level (as users expect)
Updated dependencies [2594130]:
Your coding agent can read these notes before it upgrades. Set up the MCP server →