Flagship bindings now evaluate flags against a local flag store during local development instead of calling the remote app, applying to wrangler dev, the Vite plugin, Vitest integration, and cf dev. The store starts empty so evaluations return the default value in code, and flags can be managed via --local in wrangler and cf commands, Local Explorer, or pulled from the remote app with wrangler flagship flags pull; set remote: true to keep evaluating remotely.
Developer Platform
npx @buildinternet/releases get developer-platformBYOIP subrequests keep Workers context; false 403s fixed
Breaking (minor)Workers subrequests to Cloudflare-proxied BYOIP hostnames are now identified as Cloudflare-to-Cloudflare traffic, preserving the CF-Worker header and cf.worker.upstream_zone field so security rules and Bot Management evaluate the original end-user connection instead of an internal one. Cross-zone subrequests now set CF-Connecting-IP to 2a06:98c0:3600::103, while same-zone subrequests still reflect the client IP.
Chrome 152 default; User-Agent now reports 152
Breaking (minor)Browser Run now runs Chrome 152 by default, and the default User-Agent for Quick Actions reports Chrome 152 instead of Chrome 119, so allowlist or User-Agent matching rules may need updating. Also fixes large response headers not loading, makes /links return absolute URLs while links-only crawls follow relative links, preserves code block languages in Markdown output, and removes distrusted root certificates.
Beginning November 4, 2026, D1 queries returning more than 50 MB will fail with a "query result exceeded the maximum response size limit" error, a threshold that covers the 99.999th percentile of requests. Import and export via the REST API are exempt; users with large results should select specific columns instead of SELECT * and paginate with LIMIT and OFFSET.
Deploying new Durable Objects code no longer applies immediately; an active object can keep running its current code for up to 300 seconds while waiting to hibernate, letting in-flight work finish and Hibernation API WebSockets stay connected. The delay is configurable via code_update_strategy in Wrangler with max_delay from 0 to 86400 seconds, or per deployment with --durable-objects-code-update-mode immediate or deferred.
Skills are now loaded from a folder with a SKILL.md written into the agent's Computer Workspace under /workspace/.agents/skills/, with no build step or deploy required, and the agent can write its own skills. Skills can come from a Workspace, an R2 bucket, or code, each validated against the Agent Skills specification. This is a breaking change for code using agents/skills directly: the agents:skills Vite import, agents/skills/compile, SkillRegistry, and Think's skillWorkspace are removed, and runner() moved to agents/skills/runner.
Internal hostnames let the persistent browser in the Agents SDK resolve names like preview.internal to your agent instead of the Internet, so a model can check a dev server in its sandbox or another Worker without exposing it publicly. Each host's fetch function runs in your Durable Object with access to its bindings and state, and a target schema lets the model pick what it serves.
VPC Network bindings can now target a specific virtual network by setting network_id to cf1:vnet:, while cf1:network still selects the account's default virtual network. Multiple bindings in one Worker can point at different virtual networks, reaching separate backends that share the same private IP address.
Workers Builds now retains each build and its build logs for 90 days after the build finishes, viewable under View build history in the Deployments tab or via the Workers Builds API. After 90 days the build and logs are removed, but the versions and deployments it created remain in version history for rollbacks; longer-term logs can be downloaded with the Get build logs API endpoint.
Workers Static Assets can now serve assets from a URL path prefix without changing their directory structure, configured via assets.base_path in Wrangler or worker.assets.basePath in cloudflare.config.ts. The option requires Wrangler 4.148.0 or later, or cf 1.0.0-beta.13 or later for cloudflare.config.ts.
Setting jurisdiction on a workflows binding or on a Workflow declared in exports makes its instances run and store data only within that jurisdiction; supported values are eu, us, and fedramp. Jurisdiction is fixed at creation, and wrangler deploy or wrangler versions upload stops before uploading if an existing Workflow has a different jurisdiction, requiring Wrangler 4.152.0 or above.
With onInterrupt: "replay" set on WorkerJavaScriptBackend, interrupted JavaScript runs again from the beginning, reusing recorded results for completed calls, with recovery triggered on the next workspace.runtime call or via workspace.runtime.recover(). Functions exposed through custom modules can call ctx.interrupt() to pause a run until the application supplies an approval decision.
Custom spans in Workers now support three more OpenTelemetry span methods: spanContext() returns traceId, spanId, and traceFlags matching Workers Observability and exported traces, setStatus() sets unset/ok/error with an optional error message, and updateName() renames a span after it starts, including the root span from tracing.getActiveSpan(). Span status appears in traces exported to OpenTelemetry destinations but is not yet shown in the Workers Observability dashboard.
Setting the packageManager field in package.json now controls which npm version Workers Builds installs before dependencies, so lockfiles written by a newer npm install the same way in builds as locally. The field also sets Yarn, pnpm, and Bun versions and requires an exact version rather than a range; engines.npm is not used for npm version selection.
Flagship evaluation context now accepts nested objects, arrays, and null, so targeting rules can use dot-separated paths like profile.plan and the has/not_has operators for array membership without flattening data. Structured context works through the Workers binding, the evaluation REST API, and the TypeScript, Python, and Go OpenFeature SDKs from version 0.6.0.
Build images reject forged eMudhra certs
Breaking (minor)Workers Builds and Pages build images now reject the eight compromised eMudhra intermediate CA certificates when cloning repositories, installing dependencies, or making HTTPS requests, shipping patched CA bundles with Node.js 22.23.4 and 24.22.1, Bun 1.4.4, and pip 26.2.2. Projects setting BUN_VERSION below 1.4.4 or overriding SSL_CERT_FILE, PIP_CERT, or REQUESTS_CA_BUNDLE must verify their own certificates do not trust the compromised intermediates.
The D1 undelete API now only accepts requests for databases deleted within the last 7 days; undelete requests for older deletions fail and return an error.
Agents SDK v0.30.0 runs PiHarness on Pi 1.4, passing Pi's new onWake callback so the Durable Object can hibernate while a task sleeps, and parked operations that keep crashing the object now show as parked in pending() with session.retry() to rerun them. PiHarness also reopens Pi after a storage errors instead of failing calls until restart, and agents/models/pi-ai reports cut-off or idle model streams as transient errors so Pi retries the turn.
Private keys of eight eMudhra intermediate certificate authorities can be recovered, allowing forged certificates for any hostname chaining to them, so images before 0.12.14 can have outbound HTTPS intercepted. The 0.12.13 images update the system CA bundle, Node.js, cloudflared, and pip; 0.12.14 updates Bun to 1.4.4 so bun and createBackup() uploads of 10 MiB or more also reject the certificates.
Cloudflare's product-specific MCP servers now serve only /mcp, and requests to /sse return 410 Gone with the server's /mcp URL, which most MCP clients surface as a connection error. Clients signed in through /sse must sign in again; connections already using /mcp are unaffected.