---
title: Developer platform Changelog
image: https://edgetunnel-b2h.pages.dev/cf-twitter-card.png
---

> Documentation Index  
> Fetch the complete documentation index at: https://edgetunnel-b2h.pages.dev/changelog/llms.txt  
> Use this file to discover all available pages before exploring further. 

[Skip to content](#%5Ftop) 

# Changelog

New updates and improvements at Cloudflare.

[ Subscribe to RSS ](https://edgetunnel-b2h.pages.dev/changelog/rss/index.xml) [ View RSS feeds ](https://edgetunnel-b2h.pages.dev/fundamentals/new-features/available-rss-feeds/) 

Developer platform

![hero image](https://edgetunnel-b2h.pages.dev/_astro/hero.CVYJHPAd_26AMqX.svg) 

May 30, 2025
1. ### [Debug, profile, and view logs for your Worker in Chrome Devtools — now supported in the Cloudflare Vite plugin](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-21-vite-plugin-chrome-devtools/)  
[ Workers ](https://edgetunnel-b2h.pages.dev/workers/)  
You can now [debug, profile, view logs, and analyze memory usage for your Worker ↗](https://edgetunnel-b2h.pages.dev/workers/observability/dev-tools/) using [Chrome Devtools ↗](https://developer.chrome.com/docs/devtools) when your Worker runs locally using the [Cloudflare Vite plugin ↗](https://edgetunnel-b2h.pages.dev/workers/vite-plugin/).  
Previously, this was only possible if your Worker ran locally using the [Wrangler CLI ↗](https://edgetunnel-b2h.pages.dev/workers/wrangler/), and now you can do all the same things if your Worker uses [Vite ↗](https://vite.dev/).  
When you run `vite`, you'll now see a debug URL in your console:  
```plaintext  
  VITE v6.3.5  ready in 461 ms  
  ➜  Local:   http://localhost:5173/  
  ➜  Network: use --host to expose  
  ➜  Debug:   http://localhost:5173/__debug  
  ➜  press h + enter to show help  
```  
Open the URL in Chrome, and an instance of Chrome Devtools will open and connect to your Worker running locally. You can then use Chrome Devtools to debug and introspect performance issues. For example, you can navigate to the Performance tab to understand where CPU time is spent in your Worker:  
![CPU Profile](https://edgetunnel-b2h.pages.dev/_astro/profile.Dz8PUp_K_Z16J4tW.webp)  
For more information on how to get the most out of Chrome Devtools, refer to the following docs:

  * [Debug code by setting breakpoints](https://edgetunnel-b2h.pages.dev/workers/observability/dev-tools/breakpoints/)
  * [Profile CPU usage](https://edgetunnel-b2h.pages.dev/workers/observability/dev-tools/cpu-usage/)
  * [Observe memory usage and debug memory leaks](https://edgetunnel-b2h.pages.dev/workers/observability/dev-tools/memory-usage/)

May 29, 2025
1. ### [50-500ms Faster D1 REST API Requests](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-30-d1-rest-api-latency/)  
[ D1 ](https://edgetunnel-b2h.pages.dev/d1/)[ Workers ](https://edgetunnel-b2h.pages.dev/workers/)  
Users using Cloudflare's [REST API](https://edgetunnel-b2h.pages.dev/api/resources/d1/) to query their D1 database can see lower end-to-end request latency now that D1 authentication is performed at the closest Cloudflare network data center that received the request. Previously, authentication required D1 REST API requests to proxy to Cloudflare's core, centralized data centers, which added network round trips and latency.  
Latency improvements range from 50-500 ms depending on request location and [database location](https://edgetunnel-b2h.pages.dev/d1/configuration/data-location/) and only apply to the REST API. REST API requests and databases outside the United States see a bigger benefit since Cloudflare's primary core data centers reside in the United States.  
D1 query endpoints like `/query` and `/raw` have the most noticeable improvements since they no longer access Cloudflare's core data centers. D1 control plane endpoints such as those to create and delete databases see smaller improvements, since they still require access to Cloudflare's core data centers for other control plane metadata.

May 28, 2025
1. ### [Playwright MCP server is now compatible with Browser Rendering](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-28-playwright-mcp/)  
[ Browser Run ](https://edgetunnel-b2h.pages.dev/browser-run/)  
We're excited to share that you can now use the [Playwright MCP ↗](https://github.com/cloudflare/playwright-mcp) server with Browser Rendering.  
Once you [deploy the server](https://edgetunnel-b2h.pages.dev/browser-run/playwright/playwright-mcp/#deploying), you can use any MCP client with it to interact with Browser Rendering. This allows you to run AI models that can automate browser tasks, such as taking screenshots, filling out forms, or scraping data.  
![Access Analytics](https://edgetunnel-b2h.pages.dev/_astro/playground-ai-screenshot.v44jFMBu_Z1xgc6e.webp)  
Playwright MCP is available as an npm package at [@cloudflare/playwright-mcp ↗](https://www.npmjs.com/package/@cloudflare/playwright-mcp). To install it, type:  
 npm  yarn  pnpm  bun  
```  
npm i -D @cloudflare/playwright-mcp  
```  
```  
yarn add -D @cloudflare/playwright-mcp  
```  
```  
pnpm add -D @cloudflare/playwright-mcp  
```  
```  
bun add -d @cloudflare/playwright-mcp  
```  
Deploying the server is then as easy as:

**TypeScript**  
```ts  
import { env } from "cloudflare:workers";  
import { createMcpAgent } from "@cloudflare/playwright-mcp";  
export const PlaywrightMCP = createMcpAgent(env.BROWSER);  
export default PlaywrightMCP.mount("/sse");  
```  
Check out the full code at [GitHub ↗](https://github.com/cloudflare/playwright-mcp).  
Learn more about Playwright MCP in our [documentation](https://edgetunnel-b2h.pages.dev/browser-run/playwright/playwright-mcp/).

May 27, 2025
1. ### [Increased limits for Cloudflare for SaaS and Secrets Store free and Pay-as-you-go plans](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-19-paygo-updates/)  
[ SSL/TLS ](https://edgetunnel-b2h.pages.dev/ssl/)[ Cloudflare for SaaS ](https://edgetunnel-b2h.pages.dev/cloudflare-for-platforms/cloudflare-for-saas/)[ Secrets Store ](https://edgetunnel-b2h.pages.dev/secrets-store/)  
With upgraded limits to [all free and paid plans ↗](https://www.cloudflare.com/plans/), you can now scale more easily with [Cloudflare for SaaS ↗](https://edgetunnel-b2h.pages.dev/cloudflare-for-platforms/cloudflare-for-saas/) and [Secrets Store ↗](https://edgetunnel-b2h.pages.dev/secrets-store/).  
[Cloudflare for SaaS ↗](https://edgetunnel-b2h.pages.dev/cloudflare-for-platforms/cloudflare-for-saas/) allows you to extend the benefits of Cloudflare to your customers via their own custom or vanity domains. Now, the [limit for custom hostnames ↗](https://edgetunnel-b2h.pages.dev/cloudflare-for-platforms/cloudflare-for-saas/plans/) on a Cloudflare for SaaS Pay-as-you-go plan has been **raised from 5,000 custom hostnames to 50,000 custom hostnames.**  
With custom origin server -- previously an enterprise-only feature -- you can route traffic from one or more custom hostnames somewhere other than your default proxy fallback. [Custom origin server ↗](https://edgetunnel-b2h.pages.dev/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/custom-origin/) is now available to Cloudflare for SaaS customers on Free, Pro, and Business plans.  
You can enable custom origin server on a per-custom hostname basis [via the API ↗](https://edgetunnel-b2h.pages.dev/api/resources/custom%5Fhostnames/methods/edit/) or the UI:  
![Import repo or choose template](https://edgetunnel-b2h.pages.dev/_astro/custom-origin-server.B-BXcG-1_ZUd9i6.webp)  
Currently [in beta with a Workers integration ↗](https://blog.cloudflare.com/secrets-store-beta/), [Cloudflare Secrets Store ↗](https://edgetunnel-b2h.pages.dev/secrets-store/) allows you to store, manage, and deploy account level secrets from a secure, centralized platform your [Cloudflare Workers ↗](https://edgetunnel-b2h.pages.dev/workers/). Now, you can create and deploy **100 secrets per account**. Try it out [in the dashboard ↗](http://dash.cloudflare.com/?to=/:account/secrets-store), with [Wrangler ↗](https://edgetunnel-b2h.pages.dev/secrets-store/integrations/workers/), or [via the API ↗](https://edgetunnel-b2h.pages.dev/api/resources/secrets%5Fstore/) today.

May 22, 2025
1. ### [Handle incoming request cancellation in Workers with Request.signal](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-22-handle-request-cancellation/)  
[ Workers ](https://edgetunnel-b2h.pages.dev/workers/)  
In Cloudflare Workers, you can now attach an event listener to [Request](https://edgetunnel-b2h.pages.dev/workers/runtime-apis/request/) objects, using the [signal property ↗](https://developer.mozilla.org/en-US/docs/Web/API/Request/signal). This allows you to perform tasks when the request to your Worker is canceled by the client. To use this feature, you must set the [enable\_request\_signal](https://edgetunnel-b2h.pages.dev/workers/configuration/compatibility-flags/#enable-requestsignal-for-incoming-requests) compatibility flag.  
You can use a listener to perform cleanup tasks or write to logs before your Worker's invocation ends. For example, if you run the Worker below, and then abort the request from the client, a log will be written:

  * [  JavaScript ](#tab-panel-3573)
  * [  TypeScript ](#tab-panel-3574)

**index.js**  
```js  
export default {  
  async fetch(request, env, ctx) {  
    // This sets up an event listener that will be called if the client disconnects from your  
    // worker.  
    request.signal.addEventListener("abort", () => {  
      console.log("The request was aborted!");  
    });  
    const { readable, writable } = new IdentityTransformStream();  
    sendPing(writable);  
    return new Response(readable, {  
      headers: { "Content-Type": "text/plain" },  
    });  
  },  
};  
async function sendPing(writable) {  
  const writer = writable.getWriter();  
  const enc = new TextEncoder();  
  for (;;) {  
    // Send 'ping' every second to keep the connection alive  
    await writer.write(enc.encode("ping\r\n"));  
    await scheduler.wait(1000);  
  }  
}  
```

**index.ts**  
```ts  
export default {  
  async fetch(request, env, ctx): Promise<Response> {  
    // This sets up an event listener that will be called if the client disconnects from your  
    // worker.  
    request.signal.addEventListener('abort', () => {  
      console.log('The request was aborted!');  
    });  
    const { readable, writable } = new IdentityTransformStream();  
    sendPing(writable);  
    return new Response(readable, { headers: { 'Content-Type': 'text/plain' } });  
  },  
} satisfies ExportedHandler<Env>;  
async function sendPing(writable: WritableStream): Promise<void> {  
  const writer = writable.getWriter();  
  const enc = new TextEncoder();  
  for (;;) {  
    // Send 'ping' every second to keep the connection alive  
    await writer.write(enc.encode('ping\r\n'));  
    await scheduler.wait(1000);  
  }  
}  
```  
For more information see the [Request documentation](https://edgetunnel-b2h.pages.dev/workers/runtime-apis/request).

May 19, 2025
1. ### [Terraform v5.5.0 now available](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-19-terraform-v550-provider/)  
[ Cloudflare Fundamentals ](https://edgetunnel-b2h.pages.dev/fundamentals/)[ Terraform ](https://edgetunnel-b2h.pages.dev/terraform/)  
Earlier this year, we announced the launch of the new [Terraform v5 Provider](https://edgetunnel-b2h.pages.dev/changelog/2025-02-03-terraform-v5-provider/). Unlike the earlier Terraform providers, v5 is automatically generated based on the OpenAPI Schemas for our REST APIs. Since launch, we have seen an unexpectedly high number of [issues ↗](https://github.com/cloudflare/terraform-provider-cloudflare) reported by customers. These issues currently impact about 15% of resources. We have been working diligently to address these issues across the company, and have released the v5.5.0 release which includes a number of bug fixes. Please keep an eye on this changelog for more information about upcoming releases.  
#### Changes

  * Broad fixes across resources with recurring diffs, including, but not limited to:  
    * `cloudflare_zero_trust_gateway_policy`
    * `cloudflare_zero_trust_access_application`
    * `cloudflare_zero_trust_tunnel_cloudflared_route`
    * `cloudflare_zone_setting`
    * `cloudflare_ruleset`
    * `cloudflare_page_rule`
  * Zone settings can be re-applied without client errors
  * Page rules conversion errors are fixed
  * Failure to apply changes to `cloudflare_zero_trust_tunnel_cloudflared_route`
  * Other bug fixes  
For a more detailed look at all of the changes, see the [changelog ↗](https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.5.0) in GitHub.  
#### Issues Closed

  * [#5304: Importing cloudflare\_zero\_trust\_gateway\_policy invalid attribute filter value ↗](https://github.com/cloudflare/terraform-provider-cloudflare/issues/5304)
  * [#5303: cloudflare\_page\_rule import does not set values for all of the fields in terraform state ↗](https://github.com/cloudflare/terraform-provider-cloudflare/issues/5303)
  * [#5178: cloudflare\_page\_rule Page rule creation with redirect fails ↗](https://github.com/cloudflare/terraform-provider-cloudflare/issues/5178)
  * [#5336: cloudflare\_turnstile\_wwidget not able to update ↗](https://github.com/cloudflare/terraform-provider-cloudflare/issues/5336)
  * [#5418: cloudflare\_cloud\_connector\_rules: Provider returned invalid result object after apply ↗](https://github.com/cloudflare/terraform-provider-cloudflare/issues/5418)
  * [#5423: cloudflare\_zone\_setting: "Invalid value for zone setting always\_use\_https" ↗](https://github.com/cloudflare/terraform-provider-cloudflare/issues/5423)  
If you have an unaddressed issue with the provider, we encourage you to check the [open issues ↗](https://github.com/cloudflare/terraform-provider-cloudflare/issues) and open a new one if one does not already exist for what you are experiencing.  
#### Upgrading  
If you are evaluating a move from v4 to v5, please make use of the [migration guide ↗](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade). We have provided automated migration scripts using Grit which simplify the transition, although these do not support implementations which use Terraform modules, so customers making use of modules need to migrate manually. Please make use of `terraform plan` to test your changes before applying, and let us know if you encounter any additional issues by reporting to our [GitHub repository ↗](https://github.com/cloudflare/terraform-provider-cloudflare).  
#### For more info

  * [Terraform provider ↗](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs)
  * [Documentation on using Terraform with Cloudflare](https://edgetunnel-b2h.pages.dev/terraform/)

May 16, 2025
1. ### [Durable Objects are now supported in Python Workers](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-14-python-worker-durable-object/)  
[ Workers ](https://edgetunnel-b2h.pages.dev/workers/)[ Durable Objects ](https://edgetunnel-b2h.pages.dev/durable-objects/)  
You can now create [Durable Objects](https://edgetunnel-b2h.pages.dev/durable-objects/) using [Python Workers](https://edgetunnel-b2h.pages.dev/workers/languages/python/). A Durable Object is a special kind of Cloudflare Worker which uniquely combines compute with storage, enabling stateful long-running applications which run close to your users. For more info see [here](https://edgetunnel-b2h.pages.dev/durable-objects/concepts/what-are-durable-objects/).  
You can define a Durable Object in Python in a similar way to JavaScript:

**Python**  
```python  
from workers import DurableObject, Response, WorkerEntrypoint  
from urllib.parse import urlparse  
class MyDurableObject(DurableObject):  
    def __init__(self, ctx, env):  
        self.ctx = ctx  
        self.env = env  
    def fetch(self, request):  
        result = self.ctx.storage.sql.exec("SELECT 'Hello, World!' as greeting").one()  
        return Response(result.greeting)  
class Default(WorkerEntrypoint):  
    async def fetch(self, request):  
        url = urlparse(request.url)  
        id = env.MY_DURABLE_OBJECT.idFromName(url.path)  
        stub = env.MY_DURABLE_OBJECT.get(id)  
        greeting = await stub.fetch(request.url)  
        return greeting  
```  
Define the Durable Object in your Wrangler configuration file:

  * [  wrangler.jsonc ](#tab-panel-3567)
  * [  wrangler.toml ](#tab-panel-3568)

**JSONC**  
```jsonc  
{  
  "durable_objects": {  
    "bindings": [  
      {  
        "name": "MY_DURABLE_OBJECT",  
        "class_name": "MyDurableObject"  
      }  
    ]  
  }  
}  
```

**TOML**  
```toml  
[[durable_objects.bindings]]  
name = "MY_DURABLE_OBJECT"  
class_name = "MyDurableObject"  
```  
Then define the storage backend for your Durable Object:

  * [  wrangler.jsonc ](#tab-panel-3569)
  * [  wrangler.toml ](#tab-panel-3570)

**JSONC**  
```jsonc  
{  
  "migrations": [  
    {  
      "tag": "v1", // Should be unique for each entry  
      "new_sqlite_classes": [ // Array of new classes  
        "MyDurableObject"  
      ]  
    }  
  ]  
}  
```

**TOML**  
```toml  
[[migrations]]  
tag = "v1"  
new_sqlite_classes = [ "MyDurableObject" ]  
```  
Then test your new Durable Object locally by running `wrangler dev`:  
```bash  
npx wrangler dev  
```  
Consult the [Durable Objects documentation](https://edgetunnel-b2h.pages.dev/durable-objects/) for more details.

May 14, 2025
1. ### [Hyperdrive achieves FedRAMP Moderate-Impact Authorization](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-14-hyperdrive-fedramp/)  
[ Hyperdrive ](https://edgetunnel-b2h.pages.dev/hyperdrive/)  
Hyperdrive has been approved for FedRAMP Authorization and is now available in the [FedRAMP Marketplace ↗](https://marketplace.fedramp.gov/products/FR2000863987).  
FedRAMP is a U.S. government program that provides standardized assessment and authorization for cloud products and services. As a result of this product update, Hyperdrive has been approved as an authorized service to be used by U.S. federal agencies at the Moderate Impact level.  
For detailed information regarding FedRAMP and its implications, please refer to the [official FedRAMP documentation for Cloudflare ↗](https://marketplace.fedramp.gov/products/FR2000863987).

May 14, 2025
1. ### [Introducing Origin Restrictions for Media Transformations](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-14-media-transformations-origin-restrictions/)  
[ Stream ](https://edgetunnel-b2h.pages.dev/stream/)  
We are adding [source origin restrictions](https://edgetunnel-b2h.pages.dev/stream/transform-videos/sources/) to the Media Transformations beta. This allows customers to restrict what sources can be used to fetch images and video for transformations. This feature is the same as --- and uses the same settings as --- [Image Transformations sources](https://edgetunnel-b2h.pages.dev/images/optimization/transformations/sources/).  
When transformations is first enabled, the default setting only allows transformations on images and media from the same website or domain being used to make the transformation request. In other words, by default, requests to `example.com/cdn-cgi/media` can only reference originals on `example.com`.  
![Enable allowed origins from the Cloudflare dashboard](https://edgetunnel-b2h.pages.dev/_astro/allowed-origins.4hu5lHws_ZsjEgI.webp)  
Adding access to other sources, or allowing any source, [is easy to do](https://edgetunnel-b2h.pages.dev/images/optimization/transformations/sources/)in the **Transformations** tab under **Stream**. Click each domain enabled for Transformations and set its sources list to match the needs of your content. The user making this change will need permission to edit zone settings.  
For more information, learn about [Transforming Videos](https://edgetunnel-b2h.pages.dev/stream/transform-videos/).

May 09, 2025
1. ### [Publish messages to Queues directly via HTTP](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-09-publish-to-queues-via-http/)  
[ Queues ](https://edgetunnel-b2h.pages.dev/queues/)  
You can now publish messages to [Cloudflare Queues](https://edgetunnel-b2h.pages.dev/queues/) directly via HTTP from any service or programming language that supports sending HTTP requests. Previously, publishing to queues was only possible from within [Cloudflare Workers](https://edgetunnel-b2h.pages.dev/workers/). You can already consume from queues via Workers or [HTTP pull consumers](https://edgetunnel-b2h.pages.dev/queues/configuration/pull-consumers/), and now publishing is just as flexible.  
Publishing via HTTP requires a [Cloudflare API token](https://edgetunnel-b2h.pages.dev/fundamentals/api/get-started/create-token/) with `Queues Edit` permissions for authentication. Here's a simple example:  
```bash  
curl "https://api.cloudflare.com/client/v4/accounts/<account_id>/queues/<queue_id>/messages" \
  -X POST \
  -H 'Authorization: Bearer <api_token>' \
  --data '{ "body": { "greeting": "hello", "timestamp":  "2025-07-24T12:00:00Z"} }'  
```  
You can also use our [SDKs](https://edgetunnel-b2h.pages.dev/fundamentals/api/reference/sdks/) for TypeScript, Python, and Go.  
To get started with HTTP publishing, check out our [step-by-step example](https://edgetunnel-b2h.pages.dev/queues/examples/publish-to-a-queue-via-http/) and the full API documentation in our [API reference](https://edgetunnel-b2h.pages.dev/api/resources/queues/subresources/messages/methods/push/).

May 08, 2025
1. ### [Improved memory efficiency for WebAssembly Workers](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-08-finalization-registry/)  
[ Workers ](https://edgetunnel-b2h.pages.dev/workers/)  
[FinalizationRegistry ↗](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global%5FObjects/FinalizationRegistry) is now available in Workers. You can opt-in using the [enable\_weak\_ref](https://edgetunnel-b2h.pages.dev/workers/configuration/compatibility-flags/#enable-finalizationregistry-and-weakref) compatibility flag.  
This can reduce memory leaks when using WebAssembly-based Workers, which includes [Python Workers](https://edgetunnel-b2h.pages.dev/workers/languages/python/) and [Rust Workers](https://edgetunnel-b2h.pages.dev/workers/languages/rust/). The FinalizationRegistry works by enabling toolchains such as [Emscripten ↗](https://emscripten.org/) and [wasm-bindgen ↗](https://wasm-bindgen.github.io/wasm-bindgen/) to automatically free WebAssembly heap allocations. If you are using WASM and seeing Exceeded Memory errors and cannot determine a cause using [memory profiling](https://edgetunnel-b2h.pages.dev/workers/observability/dev-tools/memory-usage/), you may want to enable the FinalizationRegistry.  
For more information refer to the [enable\_weak\_ref](https://edgetunnel-b2h.pages.dev/workers/configuration/compatibility-flags/#enable-finalizationregistry-and-weakref) compatibility flag documentation.

May 06, 2025
1. ### [Terraform v5.4.0 now available](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-06-terraform-v540-provider/)  
[ Cloudflare Fundamentals ](https://edgetunnel-b2h.pages.dev/fundamentals/)[ Terraform ](https://edgetunnel-b2h.pages.dev/terraform/)  
Earlier this year, we announced the launch of the new [Terraform v5 Provider](https://edgetunnel-b2h.pages.dev/changelog/2025-02-03-terraform-v5-provider/). Unlike the earlier Terraform providers, v5 is automatically generated based on the OpenAPI Schemas for our REST APIs. Since launch, we have seen an unexpectedly high number of [issues ↗](https://github.com/cloudflare/terraform-provider-cloudflare) reported by customers. These issues currently impact about 15% of resources. We have been working diligently to address these issues across the company, and have released the v5.4.0 release which includes a number of bug fixes. Please keep an eye on this changelog for more information about upcoming releases.  
#### Changes

  * Removes the `worker_platforms_script_secret` resource from the provider (see [migration guide ↗](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade#cloudflare%5Fworker%5Fsecret) for alternatives—applicable to both Workers and Workers for Platforms)
  * Removes duplicated fields in `cloudflare_cloud_connector_rules` resource
  * Fixes `cloudflare_workers_route` id issues [#5134 ↗](https://github.com/cloudflare/terraform-provider-cloudflare/issues/5134) [#5501 ↗](https://github.com/cloudflare/terraform-provider-cloudflare/issues/5501)
  * Fixes issue around refreshing resources that have unsupported response types Affected resources
    * `cloudflare_certificate_pack`
    * `cloudflare_registrar_domain`
    * `cloudflare_stream_download`
    * `cloudflare_stream_webhook`
    * `cloudflare_user`
    * `cloudflare_workers_kv`
    * `cloudflare_workers_script`
  * Fixes `cloudflare_workers_kv` state refresh issues
  * Fixes issues around configurability of nested properties without computed values for the following resources Affected resources
    * `cloudflare_account`
    * `cloudflare_account_dns_settings`
    * `cloudflare_account_token`
    * `cloudflare_api_token`
    * `cloudflare_cloud_connector_rules`
    * `cloudflare_custom_ssl`
    * `cloudflare_d1_database`
    * `cloudflare_dns_record`
    * `email_security_trusted_domains`
    * `cloudflare_hyperdrive_config`
    * `cloudflare_keyless_certificate`
    * `cloudflare_list_item`
    * `cloudflare_load_balancer`
    * `cloudflare_logpush_dataset_job`
    * `cloudflare_magic_network_monitoring_configuration`
    * `cloudflare_magic_transit_site`
    * `cloudflare_magic_transit_site_lan`
    * `cloudflare_magic_transit_site_wan`
    * `cloudflare_magic_wan_static_route`
    * `cloudflare_notification_policy`
    * `cloudflare_pages_project`
    * `cloudflare_queue`
    * `cloudflare_queue_consumer`
    * `cloudflare_r2_bucket_cors`
    * `cloudflare_r2_bucket_event_notification`
    * `cloudflare_r2_bucket_lifecycle`
    * `cloudflare_r2_bucket_lock`
    * `cloudflare_r2_bucket_sippy`
    * `cloudflare_ruleset`
    * `cloudflare_snippet_rules`
    * `cloudflare_snippets`
    * `cloudflare_spectrum_application`
    * `cloudflare_workers_deployment`
    * `cloudflare_zero_trust_access_application`
    * `cloudflare_zero_trust_access_group`
  * Fixed defaults that made `cloudflare_workers_script` fail when using Assets
  * Fixed Workers Logpush setting in `cloudflare_workers_script` mistakenly being readonly
  * Fixed `cloudflare_pages_project` broken when using "source"  
The detailed [changelog ↗](https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.4.0) is available on GitHub.  
#### Upgrading  
If you are evaluating a move from v4 to v5, please make use of the [migration guide ↗](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade). We have provided automated migration scripts using Grit which simplify the transition, although these do not support implementations which use Terraform modules, so customers making use of modules need to migrate manually. Please make use of `terraform plan` to test your changes before applying, and let us know if you encounter any additional issues either by reporting to our [GitHub repository ↗](https://github.com/cloudflare/terraform-provider-cloudflare), or by opening a [support ticket ↗](https://www.support.cloudflare.com/s/?language=en%5FUS).  
#### For more info

  * [Terraform provider ↗](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs)
  * [Documentation on using Terraform with Cloudflare ↗](https://edgetunnel-b2h.pages.dev/terraform/)

May 01, 2025
1. ### [R2 Dashboard experience gets new updates](https://edgetunnel-b2h.pages.dev/changelog/post/2025-05-01-r2-dashboard-updates/)  
[ R2 ](https://edgetunnel-b2h.pages.dev/r2/)  
We're excited to announce several improvements to the [Cloudflare R2](https://edgetunnel-b2h.pages.dev/r2/) dashboard experience that make managing your object storage easier and more intuitive:  
![Cloudflare R2 Dashboard](https://edgetunnel-b2h.pages.dev/_astro/r2-dashboard-updates.B7WXxzMk_Z2vfGut.webp)  
#### All-new settings page  
We've redesigned the bucket settings page, giving you a centralized location to manage all your bucket configurations in one place.  
#### Improved navigation and sharing

  * Deeplink support for prefix directories: Navigate through your bucket hierarchy without losing your state. Your browser's back button now works as expected, and you can share direct links to specific prefix directories with teammates.
  * Objects as clickable links: Objects are now proper links that you can copy or `CMD + Click` to open in a new tab.  
#### Clearer public access controls

  * Renamed "r2.dev domain" to "Public Development URL" for better clarity when exposing bucket contents for non-production workloads.
  * Public Access status now clearly displays "Enabled" when your bucket is exposed to the internet (via Public Development URL or Custom Domains).  
We've also made numerous other usability improvements across the board to make your R2 experience smoother and more productive.

Apr 24, 2025
1. ### [Cron triggers are now supported in Python Workers](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-22-python-worker-cron-triggers/)  
[ Workers ](https://edgetunnel-b2h.pages.dev/workers/)  
You can now create Python Workers which are executed via a cron trigger.  
This is similar to how it's done in JavaScript Workers, simply define a scheduled event listener in your Worker:

**Python**  
```python  
from workers import handler  
@handler  
async def on_scheduled(event, env, ctx):  
  print("cron processed")  
```  
Define a cron trigger configuration in your Wrangler configuration file:

  * [  wrangler.jsonc ](#tab-panel-3571)
  * [  wrangler.toml ](#tab-panel-3572)

**JSONC**  
```jsonc  
{  
  "triggers": {  
    // Schedule cron triggers:  
    // - At every 3rd minute  
    // - At 15:00 (UTC) on first day of the month  
    // - At 23:59 (UTC) on the last weekday of the month  
    "crons": [  
      "*/3 * * * *",  
      "0 15 1 * *",  
      "59 23 LW * *"  
    ]  
  }  
}  
```

**TOML**  
```toml  
[triggers]  
crons = [ "*/3 * * * *", "0 15 1 * *", "59 23 LW * *" ]  
```  
Then test your new handler by using Wrangler with the `--test-scheduled` flag and making a request to `/cdn-cgi/handler/scheduled?cron=*+*+*+*+*`:  
```sh  
npx wrangler dev --test-scheduled  
curl "http://localhost:8787/cdn-cgi/handler/scheduled?cron=*+*+*+*+*"  
```  
Consult the [Workers Cron Triggers page](https://edgetunnel-b2h.pages.dev/workers/configuration/cron-triggers/) for full details on cron triggers in Workers.

Apr 23, 2025
1. ### [Metadata filtering and multitenancy support in AutoRAG](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-23-autorag-metadata-filtering/)  
[ AI Search ](https://edgetunnel-b2h.pages.dev/ai-search/)  
You can now filter [AutoRAG](https://edgetunnel-b2h.pages.dev/ai-search/) search results by `folder` and `timestamp` using [metadata filtering](https://edgetunnel-b2h.pages.dev/ai-search/configuration/indexing/metadata/) to narrow down the scope of your query.  
This makes it easy to build [multitenant experiences](https://edgetunnel-b2h.pages.dev/ai-search/how-to/per-tenant-search/) where each user can only access their own data. By organizing your content into per-tenant folders and applying a `folder` filter at query time, you ensure that each tenant retrieves only their own documents.

**Example folder structure:**  
```bash  
customer-a/logs/  
customer-a/contracts/  
customer-b/contracts/  
```

**Example query:**

**JavaScript**  
```js  
const response = await env.AI.autorag("my-autorag").search({  
  query: "When did I sign my agreement contract?",  
  filters: {  
    type: "eq",  
    key: "folder",  
    value: "customer-a/contracts/",  
  },  
});  
```  
You can use metadata filtering by creating a new AutoRAG or reindexing existing data. To reindex all content in an existing AutoRAG, update any chunking setting and select **Sync index**. Metadata filtering is available for all data indexed on or after **April 21, 2025**.  
If you are new to AutoRAG, get started with the [Get started AutoRAG guide](https://edgetunnel-b2h.pages.dev/ai-search/get-started/).

Apr 17, 2025
1. ### [Increased limits for Queues pull consumers](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-17-pull-consumer-limits/)  
[ Queues ](https://edgetunnel-b2h.pages.dev/queues/)  
[Queues pull consumers](https://edgetunnel-b2h.pages.dev/queues/configuration/pull-consumers/) can now pull and acknowledge up to **5,000 messages / second per queue**. Previously, pull consumers were rate limited to 1,200 requests / 5 minutes, aggregated across all queues.  
Pull consumers allow you to consume messages over HTTP from any environment—including outside of [Cloudflare Workers](https://edgetunnel-b2h.pages.dev/workers). They’re also useful when you need fine-grained control over how quickly messages are consumed.  
To setup a new queue with a pull based consumer using [Wrangler](https://edgetunnel-b2h.pages.dev/workers/wrangler/), run:

**Create a queue with a pull based consumer**  
```sh  
npx wrangler queues create my-queue  
npx wrangler queues consumer http add my-queue  
```  
You can also configure a pull consumer using the [REST API](https://edgetunnel-b2h.pages.dev/api/resources/queues/subresources/consumers/methods/create/) or the Queues dashboard.  
Once configured, you can pull messages from the queue using any HTTP client. You'll need a [Cloudflare API Token](https://edgetunnel-b2h.pages.dev/fundamentals/api/get-started/create-token/) with `queues_read` and `queues_write` permissions. For example:

**Pull messages from a queue**  
```bash  
curl "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/queues/${QUEUE_ID}/messages/pull" \
--header "Authorization: Bearer ${API_TOKEN}" \
--header "Content-Type: application/json" \
--data '{ "visibility_timeout": 10000, "batch_size": 2 }'  
```  
To learn more about how to acknowledge messages, pull batches at once, and setup multiple consumers, refer to the [pull consumer documentation](https://edgetunnel-b2h.pages.dev/queues/configuration/pull-consumers).  
As always, Queues doesn't charge for data egress. Pull operations continue to be billed at the [existing rate](https://edgetunnel-b2h.pages.dev/queues/platform/pricing), of $0.40 / million operations. The increased limits are available now, on all new and existing queues. If you're new to Queues, [get started with the Cloudflare Queues guide](https://edgetunnel-b2h.pages.dev/queues/get-started).

Apr 17, 2025
1. ### [Read multiple keys from Workers KV with bulk reads](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-10-kv-bulk-reads/)  
[ KV ](https://edgetunnel-b2h.pages.dev/kv/)  
You can now retrieve up to 100 keys in a single bulk read request made to Workers KV using the binding.  
This makes it easier to request multiple KV pairs within a single Worker invocation. Retrieving many key-value pairs using the bulk read operation is more performant than making individual requests since bulk read operations are not affected by [Workers simultaneous connection limits](https://edgetunnel-b2h.pages.dev/workers/platform/limits/#simultaneous-open-connections).

**JavaScript**  
```js  
// Read single key  
const key = "key-a";  
const value = await env.NAMESPACE.get(key);  
// Read multiple keys  
const keys = ["key-a", "key-b", "key-c", ...] // up to 100 keys  
const values : Map<string, string?> = await env.NAMESPACE.get(keys);  
// Print the value of "key-a" to the console.  
console.log(`The first key is ${values.get("key-a")}.`)  
```  
Consult the [Workers KV Read key-value pairs API](https://edgetunnel-b2h.pages.dev/kv/api/read-key-value-pairs/) for full details on Workers KV's new bulk reads support.

Apr 15, 2025
1. ### [Fixed and documented Workers Routes and Secrets API](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-15-workers-api-fixes/)  
[ Workers ](https://edgetunnel-b2h.pages.dev/workers/)[ Workers for Platforms ](https://edgetunnel-b2h.pages.dev/cloudflare-for-platforms/workers-for-platforms/)  
#### Workers Routes API  
Previously, a request to the Workers [Create Route API](https://edgetunnel-b2h.pages.dev/api/resources/workers/subresources/routes/methods/create/) always returned `null` for "script" and an empty string for "pattern" even if the request was successful.

**Example request**  
```bash  
curl https://api.cloudflare.com/client/v4/zones/$CF_ACCOUNT_ID/workers/routes \
-X PUT \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H 'Content-Type: application/json' \
--data '{ "pattern": "example.com/*", "script": "hello-world-script" }'  
```

**Example bad response**  
```json  
{  
  "result": {  
    "id": "bf153a27ba2b464bb9f04dcf75de1ef9",  
    "pattern": "",  
    "script": null,  
    "request_limit_fail_open": false  
  },  
  "success": true,  
  "errors": [],  
  "messages": []  
}  
```  
Now, it properly returns all values!

**Example good response**  
```json  
{  
  "result": {  
    "id": "bf153a27ba2b464bb9f04dcf75de1ef9",  
    "pattern": "example.com/*",  
    "script": "hello-world-script",  
    "request_limit_fail_open": false  
  },  
  "success": true,  
  "errors": [],  
  "messages": []  
}  
```  
#### Workers Secrets API  
The [Workers](https://edgetunnel-b2h.pages.dev/api/resources/workers/subresources/scripts/subresources/secrets/) and [Workers for Platforms](https://edgetunnel-b2h.pages.dev/api/resources/workers%5Ffor%5Fplatforms/subresources/dispatch/subresources/namespaces/subresources/scripts/subresources/secrets/) secrets APIs are now properly documented in the Cloudflare OpenAPI docs. Previously, these endpoints were not publicly documented, leaving users confused on how to directly manage their secrets via the API. Now, you can find the proper endpoints in our public documentation, as well as in our API Library SDKs such as [cloudflare-typescript ↗](https://github.com/cloudflare/cloudflare-typescript) (>4.2.0) and [cloudflare-python ↗](https://github.com/cloudflare/cloudflare-python) (>4.1.0).  
Note the `cloudflare_workers_secret` and `cloudflare_workers_for_platforms_script_secret` [Terraform resources ↗](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs) are being removed in a future release. This resource is not recommended for managing secrets. Users should instead use the:

  * [Secrets Store](https://edgetunnel-b2h.pages.dev/api/resources/secrets%5Fstore/) with the "Secrets Store Secret" binding on Workers and Workers for Platforms Script Upload
  * "Secret Text" Binding on [Workers Script Upload](https://edgetunnel-b2h.pages.dev/api/resources/workers/subresources/scripts/methods/update/) and [Workers for Platforms Script Upload](https://edgetunnel-b2h.pages.dev/api/resources/workers%5Ffor%5Fplatforms/subresources/dispatch/subresources/namespaces/subresources/scripts/methods/update/)
  * Workers (and WFP) Secrets API

Apr 11, 2025
1. ### [Signed URLs and Infrastructure Improvements on Stream Live WebRTC Beta](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-14-webrtc-beta-signed-urls/)  
[ Stream ](https://edgetunnel-b2h.pages.dev/stream/)  
Cloudflare [Stream](https://edgetunnel-b2h.pages.dev/stream/) has completed an infrastructure upgrade for our [Live WebRTC beta](https://edgetunnel-b2h.pages.dev/stream/webrtc-beta/) support which brings increased scalability and improved playback performance to all customers. WebRTC allows broadcasting directly from a browser (or supported WHIP client) with ultra-low latency to tens of thousands of concurrent viewers across the globe.  
Additionally, as part of this upgrade, the WebRTC beta now supports Signed URLs to protect playback, just like our standard live stream options (HLS/DASH).  
For more information, learn about the [Stream Live WebRTC beta](https://edgetunnel-b2h.pages.dev/stream/webrtc-beta/).

Apr 11, 2025
1. ### [Workers AI for Developer Week - faster inference, new models, async batch API, expanded LoRA support](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-11-new-models-faster-inference/)  
[ Workers AI ](https://edgetunnel-b2h.pages.dev/workers-ai/)  
Happy Developer Week 2025! Workers AI is excited to announce a couple of new features and improvements available today. Check out our [blog ↗](https://blog.cloudflare.com/workers-ai-improvements) for all the announcement details.  
#### Faster inference + New models  
We’re rolling out some in-place improvements to our models that can help speed up inference by 2-4x! Users of the models below will enjoy an automatic speed boost starting today:

  * [@cf/meta/llama-3.3-70b-instruct-fp8-fast](https://edgetunnel-b2h.pages.dev/workers-ai/models/llama-3.3-70b-instruct-fp8-fast/) gets a speed boost of 2-4x, leveraging techniques like speculative decoding, prefix caching, and an updated inference backend.
  * [@cf/baai/bge-small-en-v1.5](https://edgetunnel-b2h.pages.dev/workers-ai/models/bge-small-en-v1.5/), [@cf/baai/bge-base-en-v1.5](https://edgetunnel-b2h.pages.dev/workers-ai/models/bge-base-en-v1.5/), [@cf/baai/bge-large-en-v1.5](https://edgetunnel-b2h.pages.dev/workers-ai/models/bge-large-en-v1.5/) get an updated back end, which should improve inference times by 2x.  
    * With the `bge` models, we’re also announcing a new parameter called `pooling` which can take `cls` or `mean` as options. We highly recommend using `pooling: cls` which will help generate more accurate embeddings. However, embeddings generated with cls pooling are not backwards compatible with mean pooling. For this to not be a breaking change, the default remains as mean pooling. Please specify `pooling: cls` to enjoy more accurate embeddings going forward.  
We’re also excited to launch a few new models in our catalog to help round out your experience with Workers AI. We’ll be deprecating some older models in the future, so stay tuned for a deprecation announcement. Today’s new models include:

  * [@cf/mistralai/mistral-small-3.1-24b-instruct](https://edgetunnel-b2h.pages.dev/workers-ai/models/mistral-small-3.1-24b-instruct/): a 24B parameter model achieving state-of-the-art capabilities comparable to larger models, with support for vision and tool calling.
  * [@cf/google/gemma-3-12b-it](https://edgetunnel-b2h.pages.dev/workers-ai/models/gemma-3-12b-it/): well-suited for a variety of text generation and image understanding tasks, including question answering, summarization and reasoning, with a 128K context window, and multilingual support in over 140 languages.
  * [@cf/qwen/qwq-32b](https://edgetunnel-b2h.pages.dev/workers-ai/models/qwq-32b/): a medium-sized reasoning model, which is capable of achieving competitive performance against state-of-the-art reasoning models, e.g., DeepSeek-R1, o1-mini.
  * [@cf/qwen/qwen2.5-coder-32b-instruct](https://edgetunnel-b2h.pages.dev/workers-ai/models/qwen2.5-coder-32b-instruct/): the current state-of-the-art open-source code LLM, with its coding abilities matching those of GPT-4o.  
#### Batch Inference  
Introducing a new batch inference feature that allows you to send us an array of requests, which we will fulfill as fast as possible and send them back as an array. This is really helpful for large workloads such as summarization, embeddings, etc. where you don’t have a human-in-the-loop. Using the batch API will guarantee that your requests are fulfilled eventually, rather than erroring out if we don’t have enough capacity at a given time.  
Check out the [tutorial](https://edgetunnel-b2h.pages.dev/workers-ai/features/batch-api/) to get started! Models that support batch inference today include:

  * [@cf/meta/llama-3.3-70b-instruct-fp8-fast](https://edgetunnel-b2h.pages.dev/workers-ai/models/llama-3.3-70b-instruct-fp8-fast/)
  * [@cf/baai/bge-small-en-v1.5](https://edgetunnel-b2h.pages.dev/workers-ai/models/bge-small-en-v1.5/)
  * [@cf/baai/bge-base-en-v1.5](https://edgetunnel-b2h.pages.dev/workers-ai/models/bge-base-en-v1.5/)
  * [@cf/baai/bge-large-en-v1.5](https://edgetunnel-b2h.pages.dev/workers-ai/models/bge-large-en-v1.5/)
  * [@cf/baai/bge-m3](https://edgetunnel-b2h.pages.dev/workers-ai/models/bge-m3/)
  * [@cf/meta/m2m100-1.2b](https://edgetunnel-b2h.pages.dev/workers-ai/models/m2m100-1.2b/)  
#### Expanded LoRA support  
We’ve upgraded our LoRA experience to include 8 newer models, and can support ranks of up to 32 with a 300MB safetensors file limit (previously limited to rank of 8 and 100MB safetensors) Check out our [LoRAs page](https://edgetunnel-b2h.pages.dev/workers-ai/features/fine-tunes/loras/) to get started. Models that support LoRAs now include:

  * [@cf/meta/llama-3.2-11b-vision-instruct](https://edgetunnel-b2h.pages.dev/workers-ai/models/llama-3.2-11b-vision-instruct/)
  * [@cf/meta/llama-3.3-70b-instruct-fp8-fast](https://edgetunnel-b2h.pages.dev/workers-ai/models/llama-3.3-70b-instruct-fp8-fast/)
  * [@cf/meta/llama-guard-3-8b](https://edgetunnel-b2h.pages.dev/workers-ai/models/llama-guard-3-8b/)
  * [@cf/meta/llama-3.1-8b-instruct-fast](https://edgetunnel-b2h.pages.dev/workers-ai/models/llama-3.1-8b-instruct-fast/) (coming soon)
  * [@cf/deepseek-ai/deepseek-r1-distill-qwen-32b](https://edgetunnel-b2h.pages.dev/workers-ai/models/deepseek-r1-distill-qwen-32b/) (coming soon)
  * [@cf/qwen/qwen2.5-coder-32b-instruct](https://edgetunnel-b2h.pages.dev/workers-ai/models/qwen2.5-coder-32b-instruct/)
  * [@cf/qwen/qwq-32b](https://edgetunnel-b2h.pages.dev/workers-ai/models/qwq-32b/)
  * [@cf/mistralai/mistral-small-3.1-24b-instruct](https://edgetunnel-b2h.pages.dev/workers-ai/models/mistral-small-3.1-24b-instruct/)
  * [@cf/google/gemma-3-12b-it](https://edgetunnel-b2h.pages.dev/workers-ai/models/gemma-3-12b-it/)

Apr 10, 2025
1. ### [D1 Read Replication Public Beta](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-10-d1-read-replication-beta/)  
[ D1 ](https://edgetunnel-b2h.pages.dev/d1/)[ Workers ](https://edgetunnel-b2h.pages.dev/workers/)  
D1 read replication is available in public beta to help lower average latency and increase overall throughput for read-heavy applications like e-commerce websites or content management tools.  
Workers can leverage read-only database copies, called read replicas, by using D1 [Sessions API](https://edgetunnel-b2h.pages.dev/d1/best-practices/read-replication). A session encapsulates all the queries from one logical session for your application. For example, a session may correspond to all queries coming from a particular web browser session. With Sessions API, D1 queries in a session are guaranteed to be [sequentially consistent](https://edgetunnel-b2h.pages.dev/d1/best-practices/read-replication/#replica-lag-and-consistency-model) to avoid data consistency pitfalls. D1 [bookmarks](https://edgetunnel-b2h.pages.dev/d1/reference/time-travel/#bookmarks) can be used from a previous session to ensure logical consistency between sessions.

**TypeScript**  
```ts  
// retrieve bookmark from previous session stored in HTTP header  
const bookmark = request.headers.get("x-d1-bookmark") ?? "first-unconstrained";  
const session = env.DB.withSession(bookmark);  
const result = await session  
  .prepare(`SELECT * FROM Customers WHERE CompanyName = 'Bs Beverages'`)  
  .run();  
// store bookmark for a future session  
response.headers.set("x-d1-bookmark", session.getBookmark() ?? "");  
```  
Read replicas are automatically created by Cloudflare (currently one in each supported [D1 region](https://edgetunnel-b2h.pages.dev/d1/best-practices/read-replication/#read-replica-locations)), are active/inactive based on query traffic, and are transparently routed to by Cloudflare at no additional cost.  
To checkout D1 read replication, deploy the following Worker code using Sessions API, which will prompt you to create a D1 database and enable read replication on said database.  
[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/templates/tree/main/d1-starter-sessions-api)  
To learn more about how read replication was implemented, go to our [blog post ↗](https://blog.cloudflare.com/d1-read-replication-beta).

Apr 10, 2025
1. ### [Cloudflare Pipelines now available in beta](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-10-launching-pipelines/)  
[ Pipelines ](https://edgetunnel-b2h.pages.dev/pipelines/)[ R2 ](https://edgetunnel-b2h.pages.dev/r2/)[ Workers ](https://edgetunnel-b2h.pages.dev/workers/)  
[Cloudflare Pipelines](https://edgetunnel-b2h.pages.dev/pipelines) is now available in beta, to all users with a [Workers Paid](https://edgetunnel-b2h.pages.dev/workers/platform/pricing) plan.  
Pipelines let you ingest high volumes of real time data, without managing the underlying infrastructure. A single pipeline can ingest up to 100 MB of data per second, via HTTP or from a [Worker](https://edgetunnel-b2h.pages.dev/workers). Ingested data is automatically batched, written to output files, and delivered to an [R2 bucket](https://edgetunnel-b2h.pages.dev/r2) in your account. You can use Pipelines to build a data lake of clickstream data, or to store events from a Worker.  
Create your first pipeline with a single command:

**Create a pipeline**  
```bash  
$ npx wrangler@latest pipelines create my-clickstream-pipeline --r2-bucket my-bucket  
🌀 Authorizing R2 bucket "my-bucket"  
🌀 Creating pipeline named "my-clickstream-pipeline"  
✅ Successfully created pipeline my-clickstream-pipeline  
Id:    0e00c5ff09b34d018152af98d06f5a1xvc  
Name:  my-clickstream-pipeline  
Sources:  
  HTTP:  
    Endpoint:        https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/  
    Authentication:  off  
    Format:          JSON  
  Worker:  
    Format:  JSON  
Destination:  
  Type:         R2  
  Bucket:       my-bucket  
  Format:       newline-delimited JSON  
  Compression:  GZIP  
Batch hints:  
  Max bytes:     100 MB  
  Max duration:  300 seconds  
  Max records:   100,000  
🎉 You can now send data to your pipeline!  
Send data to your pipeline's HTTP endpoint:  
curl "https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/" -d '[{ ...JSON_DATA... }]'  
To send data to your pipeline from a Worker, add the following configuration to your config file:  
{  
  "pipelines": [  
    {  
      "pipeline": "my-clickstream-pipeline",  
      "binding": "PIPELINE"  
    }  
  ]  
}  
```  
Head over to our [getting started guide](https://edgetunnel-b2h.pages.dev/pipelines/getting-started) for an in-depth tutorial to building with Pipelines.

Apr 10, 2025
1. ### [R2 Data Catalog is a managed Apache Iceberg data catalog built directly into R2 buckets](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-10-r2-data-catalog-beta/)  
[ R2 ](https://edgetunnel-b2h.pages.dev/r2/)  
Today, we're launching [R2 Data Catalog](https://edgetunnel-b2h.pages.dev/r2/data-catalog/) in open beta, a managed Apache Iceberg catalog built directly into your [Cloudflare R2](https://edgetunnel-b2h.pages.dev/r2/) bucket.  
If you're not already familiar with it, [Apache Iceberg ↗](https://iceberg.apache.org/) is an open table format designed to handle large-scale analytics datasets stored in object storage, offering ACID transactions and schema evolution. R2 Data Catalog exposes a standard Iceberg REST catalog interface, so you can connect engines like [Spark](https://edgetunnel-b2h.pages.dev/r2/data-catalog/config-examples/spark-scala/), [Snowflake](https://edgetunnel-b2h.pages.dev/r2/data-catalog/config-examples/snowflake/), and [PyIceberg](https://edgetunnel-b2h.pages.dev/r2/data-catalog/config-examples/pyiceberg/) to start querying your tables using the tools you already know.  
To enable a data catalog on your R2 bucket, find **R2 Data Catalog** in your buckets settings in the dashboard, or run:  
```bash  
npx wrangler r2 bucket catalog enable my-bucket  
```  
And that's it. You'll get a catalog URI and warehouse you can plug into your favorite Iceberg engines.  
Visit our [getting started guide](https://edgetunnel-b2h.pages.dev/r2/data-catalog/get-started/) for step-by-step instructions on enabling R2 Data Catalog, creating tables, and running your first queries.

Apr 09, 2025
1. ### [Hyperdrive now supports custom TLS/SSL certificates](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-09-hyperdrive-custom-certificate-support/)  
[ Hyperdrive ](https://edgetunnel-b2h.pages.dev/hyperdrive/)  
Hyperdrive now supports more SSL/TLS security options for your database connections:

  * Configure Hyperdrive to verify server certificates with `verify-ca` or `verify-full` SSL modes and protect against man-in-the-middle attacks
  * Configure Hyperdrive to provide client certificates to the database server to authenticate itself (mTLS) for stronger security beyond username and password  
Use the new `wrangler cert` commands to create certificate authority (CA) certificate bundles or client certificate pairs:  
```bash  
# Create CA certificate bundle  
npx wrangler cert upload certificate-authority --ca-cert your-ca-cert.pem --name your-custom-ca-name  
# Create client certificate pair  
npx wrangler cert upload mtls-certificate --cert client-cert.pem --key client-key.pem --name your-client-cert-name  
```  
Then create a Hyperdrive configuration with the certificates and desired SSL mode:  
```bash  
npx wrangler hyperdrive create your-hyperdrive-config \
  --connection-string="postgres://user:password@hostname:port/database" \
  --ca-certificate-id <CA_CERT_ID> \
  --mtls-certificate-id <CLIENT_CERT_ID>
  --sslmode verify-full  
```  
Learn more about [configuring SSL/TLS certificates for Hyperdrive](https://edgetunnel-b2h.pages.dev/hyperdrive/configuration/tls-ssl-certificates-for-hyperdrive/) to enhance your database security posture.

Apr 09, 2025
1. ### [Cloudflare Secrets Store now available in Beta](https://edgetunnel-b2h.pages.dev/changelog/post/2025-04-09-secrets-store-beta/)  
[ Secrets Store ](https://edgetunnel-b2h.pages.dev/secrets-store/)[ SSL/TLS ](https://edgetunnel-b2h.pages.dev/ssl/)  
Cloudflare Secrets Store is available today in Beta. You can now store, manage, and deploy account level secrets from a secure, centralized platform to your Workers.  
![Import repo or choose template](https://edgetunnel-b2h.pages.dev/_astro/secrets-store-landing-page.BQoEWsq8_ZUrGq1.webp)  
To spin up your Cloudflare Secrets Store, simply click the new Secrets Store tab [in the dashboard ↗](http://dash.cloudflare.com/?to=/:account/secrets-store) or use this Wrangler command:  
```sh  
wrangler secrets-store store create <name> --remote  
```  
The following are supported in the Secrets Store beta:

  * Secrets Store UI & API: create your store & create, duplicate, update, scope, and delete a secret
  * Workers UI: bind a new or existing account level secret to a Worker and deploy in code
  * Wrangler: create your store & create, duplicate, update, scope, and delete a secret
  * Account Management UI & API: assign Secrets Store permissions roles & view audit logs for actions taken in Secrets Store core platform  
For instructions on how to get started, visit our [developer documentation](https://edgetunnel-b2h.pages.dev/secrets-store/).

```json
{"@context":"https://schema.org","@type":"BlogPosting","@id":"https://edgetunnel-b2h.pages.dev/changelog/product-group/developer-platform/16/#page","headline":"Developer platform Changelog | Cloudflare Docs","url":"https://edgetunnel-b2h.pages.dev/changelog/product-group/developer-platform/16/","inLanguage":"en","image":"https://edgetunnel-b2h.pages.dev/cf-twitter-card.png","publisher":{"@type":"Organization","name":"Cloudflare","url":"https://www.cloudflare.com/"},"isPartOf":{"@type":"WebSite","@id":"https://edgetunnel-b2h.pages.dev/#website","name":"Cloudflare Docs","url":"https://edgetunnel-b2h.pages.dev/"}}
```
