wrangler@4.136.0
Minor Changes
-
#15713
3c75cadThanks @jamesopstad! - Identify experimental Build Output resource configs by filename and locationThe root remains
config.json, Worker configs are nowworker.config.json, and Container configs are nowcontainer.config.json. Resource configs no longer contain top-leveltypediscriminators, while settings and build context are stored together in the root config. -
#15713
3c75cadThanks @jamesopstad! - Define experimental Cloudflare configuration with a single default exportExperimental
cloudflare.config.tsfiles now define settings and resources together in a default-exporteddefineConfig()call. Add a Worker underworker, add Containers to thecontainersarray, or omit both to provide settings only.import * as entrypoint from "./src/index.ts" with { type: "cf-worker" }; export default defineConfig({ accountId: "...", complianceRegion: "public", worker: { name: "my-worker", compatibilityDate: "2026-09-18", entrypoint, }, });
-
#15720
35668d7Thanks @alexkli! - Add experimental--zoneand--zone-idflags towrangler deployandwrangler triggers deployto attach a zone to routes passed via--routeRoutes passed on the command line were always sent to the Cloudflare API as bare patterns. Zones with an SSL for SaaS entitlement reject such routes with error 10082 ("When using wildcard host ssl for saas entitlement you must specify the zone per route using zone_id or zone_name"), and until now the only way to set a zone was in the config file, which
--routeoverrides.The new flags are experimental and must be enabled with
--experimental-route-zones(alias--x-route-zones). Pass a single zone to apply it to all routes, or one zone per route in the same order as the--routeflags:wrangler deploy --x-route-zones --route "app.example.com/*" --route "api.example.com/*" --zone example.comwrangler deploy --x-route-zones --route "a.example.com/*" --zone example.com --route "b.example.net/*" --zone example.net--zonesetszone_nameand--zone-idsetszone_idon each route. The two flags cannot be combined, and passing more than one zone requires exactly one per--route. Routes without zone flags behave exactly as before. -
#15699
45b3b81Thanks @skepticfx! - Remove the experimental Container image environment bindingDurable Object-managed Containers now use
ctx.container.imageswithout Wrangler generatingenv.EXPERIMENTAL_CLOUDFLARE_CONTAINER_IMAGES. Update code using the experimental environment binding to readctx.container.imagesand regenerate your Worker types.Version deployments identify managed applications from native named images, and
--containers-rollout=nonepreserves native Container metadata. Containers without named images must first be provisioned withwrangler deploy;versions uploadverifies that their applications already exist. The old binding is no longer read or reserved, including on previously uploaded versions.keep_varsretains existing variables as usual; redeploy without it to remove an existing experimental binding. -
#15702
8235e6aThanks @podonnell-dev! - Return structured configuration errors fromwrangler preview --jsonWhen a Worker is missing its Preview configuration, JSON mode now returns an
error, asuggested_configpatch, and any associated onboardingmessageswithout interactive output or terminal formatting. This changes the private-beta Preview command to make automated onboarding reliable. -
#15577
731a2eeThanks @sdnts! - Add support for jurisdictions to Queues subcommands
Patch Changes
-
#15711
91e2f86Thanks @ghostwriternr! - Allow local Container images without exposed portsWrangler and the Cloudflare Vite plugin no longer reject images that omit Docker
EXPOSEmetadata. Local Containers can run command-only workloads or serve traffic through workerd without declaring an unused image port. -
#15740
c5913a6Thanks @dependabot! - Update dependencies of "miniflare", "wrangler"The following dependency versions have been updated:
Dependency From To @cloudflare/workers-types ^5.20260918.1 ^5.20260921.1 workerd 1.20260918.1 1.20260921.1 -
#15471
0751490Thanks @edmundhung! - Fix cf builds for static projects that serve assets from the project rootThe experimental Build Output path now omits the reserved
.cloudflaredirectory when the project root is used for static assets. This prevents recursive output copying in Wrangler while preserving the existing behaviour for other asset directories. -
#15440
43b1f85Thanks @HuzaifaAbdulRehman! - Rebase absolute non-JavaScript module specifiers whenpreserve_file_namesis enabledWith
preserve_file_namesset, a non-JS module imported by an absolute path kept that path as its module name. The build machine's filesystem layout ended up inside the deployed Worker, and the module was never written to--outdir. A local dry run reported success while the upload failed server-side with error code10021. Tooling that rewrites externals to absolute paths hits this, which is how it was found in@opennextjs/cloudflarewith WASM imports.Absolute specifiers are now rebased to
./<basename>, which is what the hashed branch of the same code already does minus the hash prefix. Relative specifiers keep the behaviour they had.