---
title: Browser Run Changelog
image: https://developers.cloudflare.com/cf-twitter-card.png
---

> Documentation Index  
> Fetch the complete documentation index at: https://developers.cloudflare.com/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://developers.cloudflare.com/changelog/rss/index.xml) [ View RSS feeds ](https://developers.cloudflare.com/fundamentals/new-features/available-rss-feeds/) 

Browser Run

![hero image](https://developers.cloudflare.com/_astro/hero.CVYJHPAd_26AMqX.svg) 

May 28, 2026
1. ### [Use Browser Run Quick Actions directly from Workers](https://developers.cloudflare.com/changelog/post/2026-05-28-use-browser-run-quick-actions-directly-from-workers/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
You can now call [Browser Run Quick Actions](https://developers.cloudflare.com/browser-run/quick-actions/) directly from a [Cloudflare Worker](https://developers.cloudflare.com/workers/) using the `quickAction()` method on the browser binding. This simplifies how Workers interact with Browser Run by removing the need for API tokens or external HTTP requests. Your Worker communicates with Browser Run directly over Cloudflare's network, resulting in simpler code and lower latency.  
With the `quickAction()` method you can:  
   * [Capture screenshots](https://developers.cloudflare.com/browser-run/quick-actions/screenshot-endpoint/) from URLs or HTML  
   * [Generate PDFs](https://developers.cloudflare.com/browser-run/quick-actions/pdf-endpoint/) with custom styling, headers, and footers  
   * [Extract HTML content](https://developers.cloudflare.com/browser-run/quick-actions/content-endpoint/) from fully rendered pages  
   * [Convert pages to Markdown](https://developers.cloudflare.com/browser-run/quick-actions/markdown-endpoint/)  
   * [Extract structured JSON](https://developers.cloudflare.com/browser-run/quick-actions/json-endpoint/) using AI  
   * [Scrape elements](https://developers.cloudflare.com/browser-run/quick-actions/scrape-endpoint/) with CSS selectors  
   * [Get all links](https://developers.cloudflare.com/browser-run/quick-actions/links-endpoint/) from a page  
   * [Capture snapshots](https://developers.cloudflare.com/browser-run/quick-actions/snapshot/) (HTML + screenshot in one request)  
To get started, add a browser binding to your Wrangler configuration:  
   * [  wrangler.jsonc ](#tab-panel-2086)  
   * [  wrangler.toml ](#tab-panel-2087)  
JSONC  
```  
{  
  "compatibility_date": "2026-03-24",  
  "browser": {  
    "binding": "BROWSER"  
  }  
}  
```  
TOML  
```  
compatibility_date = "2026-03-24"  
[browser]  
binding = "BROWSER"  
```  
Then call any Quick Action directly from your Worker. For example, to capture a screenshot:  
   * [  JavaScript ](#tab-panel-2088)  
   * [  TypeScript ](#tab-panel-2089)  
JavaScript  
```  
const screenshot = await env.BROWSER.quickAction("screenshot", {  
  url: "https://www.cloudflare.com/",  
});  
```  
TypeScript  
```  
const screenshot = await env.BROWSER.quickAction("screenshot", {  
  url: "https://www.cloudflare.com/",  
});  
```  
The `quickAction()` method requires a compatibility date of `2026-03-24` or later.  
For setup instructions and the full list of available actions, refer to [Browser Run Quick Actions](https://developers.cloudflare.com/browser-run/quick-actions/).

Apr 15, 2026
1. ### [Browser Rendering is now Browser Run](https://developers.cloudflare.com/changelog/post/2026-04-15-br-rename/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
We are renaming Browser Rendering to **[Browser Run](https://developers.cloudflare.com/browser-run/)**. The name Browser Rendering never fully captured what the product does. Browser Run lets you run full browser sessions on Cloudflare's global network, drive them with code or AI, record and replay sessions, crawl pages for content, debug in real time, and let humans intervene when your agent needs help.  
Along with the rename, we have increased limits for Workers Paid plans and redesigned the Browser Run dashboard.  
We have 4x-ed concurrency limits for Workers Paid plan users:  
   * **Concurrent browsers per account**: 30 → **120 per account**  
   * **New browser instances**: 30 per minute → **1 per second**  
   * **REST API rate limits**: recently increased from [3 to 10 requests per second](https://developers.cloudflare.com/changelog/post/2026-03-04-br-rest-api-limit-increase/)  
Rate limits across the [limits page](https://developers.cloudflare.com/browser-run/limits/) are now expressed in per-second terms, matching how they are enforced. No action is needed to benefit from the higher limits.  
The [redesigned dashboard ↗](https://dash.cloudflare.com/?to=/:account/workers/browser-run) now shows every request in a single Runs tab, not just browser sessions but also quick actions like screenshots, PDFs, markdown, and crawls. Filter by endpoint, view target URLs, status, and duration, and expand any row for more detail.  
![Browser Run dashboard Runs tab with browser sessions and quick actions visible in one list, and an expanded crawl job showing its progress](https://developers.cloudflare.com/images/browser-run/BRdashboardredesign.png)  
We are also shipping several new features:  
   * **[Live View, Human in the Loop, and Session Recordings](https://developers.cloudflare.com/changelog/post/2026-04-15-br-observability/)** \- See what your agent is doing in real time, let humans step in when automation hits a wall, and replay any session after it ends.  
   * **[WebMCP](https://developers.cloudflare.com/changelog/post/2026-04-15-br-webmcp/)** \- Websites can expose structured tools for AI agents to discover and call directly, replacing slow screenshot-analyze-click loops.  
For the full story, read our Agents Week blog [Browser Run: Give your agents a browser ↗](https://blog.cloudflare.com/browser-run-for-ai-agents).

Apr 15, 2026
1. ### [Browser Run adds Live View, Human in the Loop, and Session Recordings](https://developers.cloudflare.com/changelog/post/2026-04-15-br-observability/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
When browser automation fails or behaves unexpectedly, it can be hard to understand what happened. We are shipping three new features in [Browser Run](https://developers.cloudflare.com/browser-run/) (formerly Browser Rendering) to help:  
   * **[Live View](https://developers.cloudflare.com/browser-run/features/live-view/)** for real-time visibility  
   * **[Human in the Loop](https://developers.cloudflare.com/browser-run/features/human-in-the-loop/)** for human intervention  
   * **[Session Recordings](https://developers.cloudflare.com/browser-run/features/session-recording/)** for replaying sessions after they end  
#### Live View  
[Live View](https://developers.cloudflare.com/browser-run/features/live-view/) lets you see what your agent is doing in real time. The page, DOM, console, and network requests are all visible for any active browser session. Access Live View from the Cloudflare dashboard, via the hosted UI at `live.browser.run`, or using native Chrome DevTools.  
#### Human in the Loop  
When your agent hits a snag like a login page or unexpected edge case, it can hand off to a human instead of failing. With [Human in the Loop](https://developers.cloudflare.com/browser-run/features/human-in-the-loop/), a human steps into the live browser session through Live View, resolves the issue, and hands control back to the script.  
Today, you can step in by opening the Live View URL for any active session. Next, we are adding a handoff flow where the agent can signal that it needs help, notify a human to step in, then hand control back to the agent once the issue is resolved.  
![Browser Run Human in the Loop demo where an AI agent searches Amazon, selects a product, and requests human help when authentication is needed to buy](https://developers.cloudflare.com/images/browser-run/liveview.gif)  
#### Session Recordings  
[Session Recordings](https://developers.cloudflare.com/browser-run/features/session-recording/) records DOM state so you can replay any session after it ends. Enable recordings by passing `recording: true` when launching a browser. After the session closes, view the recording in the Cloudflare dashboard under **Browser Run** \> **Runs**, or retrieve via API using the session ID. Next, we are adding the ability to inspect DOM state and console output at any point during the recording.  
![Browser Run session recording showing an automated browser navigating the Sentry Shop and adding a bomber jacket to the cart](https://developers.cloudflare.com/images/browser-run/sessionrecording.gif)  
To get started, refer to the documentation for [Live View](https://developers.cloudflare.com/browser-run/features/live-view/), [Human in the Loop](https://developers.cloudflare.com/browser-run/features/human-in-the-loop/), and [Session Recording](https://developers.cloudflare.com/browser-run/features/session-recording/).

Apr 15, 2026
1. ### [Browser Run adds WebMCP support](https://developers.cloudflare.com/changelog/post/2026-04-15-br-webmcp/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
[Browser Run](https://developers.cloudflare.com/browser-run/) (formerly Browser Rendering) now supports [WebMCP ↗](https://webmachinelearning.github.io/webmcp/) (Web Model Context Protocol), a new browser API from the Google Chrome team.  
The Internet was built for humans, so navigating as an AI agent today is unreliable. WebMCP lets websites expose structured tools for AI agents to discover and call directly. Instead of slow screenshot-analyze-click loops, agents can call website functions like `searchFlights()` or `bookTicket()` with typed parameters, making browser automation faster, more reliable, and less fragile.  
![Browser Run lab session showing WebMCP tools being discovered and executed in the Chrome DevTools console to book a hotel](https://developers.cloudflare.com/images/browser-run/webMCP.gif)  
With WebMCP, you can:  
   * **Discover website tools** \- Use `navigator.modelContextTesting.listTools()` to see available actions on any WebMCP-enabled site  
   * **Execute tools directly** \- Call `navigator.modelContextTesting.executeTool()` with typed parameters  
   * **Handle human-in-the-loop interactions** \- Some tools pause for user confirmation before completing sensitive actions  
WebMCP requires Chrome beta features. We have an experimental pool with browser instances running Chrome beta so you can test emerging browser features before they reach stable Chrome. To start a WebMCP session, add `lab=true` to your `/devtools/browser` request:  
Terminal window  
```  
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/browser-rendering/devtools/browser?lab=true&keep_alive=300000" \  
  -H "Authorization: Bearer {api_token}"  
```  
Combined with the recently launched [CDP endpoint](https://developers.cloudflare.com/browser-run/cdp/), AI agents can also use WebMCP. Connect an [MCP client](https://developers.cloudflare.com/browser-run/cdp/mcp-clients/) to Browser Run via CDP, and your agent can discover and call website tools directly. Here's the same hotel booking demo, this time driven by an AI agent through OpenCode:  
![Browser Run Live View showing an AI agent navigating a hotel booking site in real time](https://developers.cloudflare.com/images/browser-run/webMCPagent.gif)  
For a step-by-step guide, refer to the [WebMCP documentation](https://developers.cloudflare.com/browser-run/features/webmcp/).

Apr 14, 2026
1. ### [Manage Browser Rendering sessions with Wrangler CLI](https://developers.cloudflare.com/changelog/post/2026-04-14-browser-wrangler-commands/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
[Browser Rendering](https://developers.cloudflare.com/browser-run/) now supports `wrangler browser` commands, letting you create, manage, and view browser sessions directly from your terminal, streamlining your workflow. Since Wrangler handles authentication, you do not need to pass API tokens in your commands.  
The following commands are available:  
| Command                 | Description                  |  
| ----------------------- | ---------------------------- |  
| wrangler browser create | Create a new browser session |  
| wrangler browser close  | Close a session              |  
| wrangler browser list   | List active sessions         |  
| wrangler browser view   | View a live browser session  |  
The `create` command spins up a browser instance on Cloudflare's network and returns a session URL. Once created, you can connect to the session using any [CDP](https://developers.cloudflare.com/browser-run/cdp/)\-compatible client like [Puppeteer](https://developers.cloudflare.com/browser-run/cdp/puppeteer/), [Playwright](https://developers.cloudflare.com/browser-run/cdp/playwright/), or [MCP clients](https://developers.cloudflare.com/browser-run/cdp/mcp-clients/) to automate browsing, scrape content, or debug remotely.  
Terminal window  
```  
wrangler browser create  
```  
Use `--keepAlive` to set the session keep-alive duration (60-600 seconds):  
Terminal window  
```  
wrangler browser create --keepAlive 300  
```  
The `view` command auto-selects when only one session exists, or prompts for selection when multiple sessions are available.  
All commands support `--json` for structured output, and because these are CLI commands, you can incorporate them into scripts to automate session management.  
For full usage details, refer to the [Wrangler commands documentation](https://developers.cloudflare.com/browser-run/reference/wrangler-commands/).

Apr 10, 2026
1. ### [Browser Rendering adds Chrome DevTools Protocol (CDP) and MCP client support](https://developers.cloudflare.com/changelog/post/2026-04-10-browser-rendering-cdp-endpoint/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
[Browser Rendering](https://developers.cloudflare.com/browser-run/) now exposes the [Chrome DevTools Protocol (CDP)](https://developers.cloudflare.com/browser-run/cdp/), the low-level protocol that powers browser automation. The growing ecosystem of CDP-based agent tools, along with existing CDP automation scripts, can now use Browser Rendering directly.  
Any CDP-compatible client, including [Puppeteer](https://developers.cloudflare.com/browser-run/cdp/puppeteer/) and [Playwright](https://developers.cloudflare.com/browser-run/cdp/playwright/), can connect from any environment, whether that is [Cloudflare Workers](https://developers.cloudflare.com/workers/), your local machine, or a cloud environment. All you need is your Cloudflare API key.  
For any existing CDP script, switching to Browser Rendering is a one-line change:  
JavaScript  
```  
const puppeteer = require("puppeteer-core");  
const browser = await puppeteer.connect({  
  browserWSEndpoint: `wss://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/browser-rendering/devtools/browser?keep_alive=600000`,  
  headers: { Authorization: `Bearer ${API_TOKEN}` },  
});  
const page = await browser.newPage();  
await page.goto("https://example.com");  
console.log(await page.title());  
await browser.close();  
```  
Additionally, MCP clients like Claude Desktop, Claude Code, Cursor, and OpenCode can now use Browser Rendering as their remote browser via the [chrome-devtools-mcp ↗](https://github.com/ChromeDevTools/chrome-devtools-mcp) package.  
Here is an example of how to configure Browser Rendering for Claude Desktop:  
```  
{  
  "mcpServers": {  
    "browser-rendering": {  
      "command": "npx",  
      "args": [  
        "-y",  
        "chrome-devtools-mcp@latest",  
        "--wsEndpoint=wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-rendering/devtools/browser?keep_alive=600000",  
        "--wsHeaders={\"Authorization\":\"Bearer <API_TOKEN>\"}"  
      ]  
    }  
  }  
}  
```  
To get started, refer to the [CDP documentation](https://developers.cloudflare.com/browser-run/cdp/).

Mar 10, 2026
1. ### [Crawl entire websites with a single API call using Browser Rendering](https://developers.cloudflare.com/changelog/post/2026-03-10-br-crawl-endpoint/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
_Edit: this post has been edited to clarify crawling behavior with respect to site guidance._  
You can now crawl an entire website with a single API call using [Browser Rendering](https://developers.cloudflare.com/browser-run/)'s new [/crawl endpoint](https://developers.cloudflare.com/browser-run/quick-actions/crawl-endpoint/), available in open beta. Submit a starting URL, and pages are automatically discovered, rendered in a headless browser, and returned in multiple formats, including HTML, Markdown, and structured JSON. The endpoint is a [signed-agent ↗](https://developers.cloudflare.com/bots/concepts/bot/signed-agents/) that respects robots.txt and [AI Crawl Control ↗](https://www.cloudflare.com/ai-crawl-control/) by default, making it easy for developers to comply with website rules, and making it less likely for crawlers to ignore web-owner guidance. This is great for training models, building RAG pipelines, and researching or monitoring content across a site.  
Crawl jobs run asynchronously. You submit a URL, receive a job ID, and check back for results as pages are processed.  
Terminal window  
```  
# Initiate a crawl  
curl -X POST 'https://api.cloudflare.com/client/v4/accounts/{account_id}/browser-rendering/crawl' \  
  -H 'Authorization: Bearer <apiToken>' \  
  -H 'Content-Type: application/json' \  
  -d '{  
    "url": "https://blog.cloudflare.com/"  
  }'  
# Check results  
curl -X GET 'https://api.cloudflare.com/client/v4/accounts/{account_id}/browser-rendering/crawl/{job_id}' \  
  -H 'Authorization: Bearer <apiToken>'  
```  
Key features:  
   * **Multiple output formats** \- Return crawled content as HTML, Markdown, and structured JSON (powered by [Workers AI](https://developers.cloudflare.com/workers-ai/))  
   * **Crawl scope controls** \- Configure crawl depth, page limits, and wildcard patterns to include or exclude specific URL paths  
   * **Automatic page discovery** \- Discovers URLs from sitemaps, page links, or both  
   * **Incremental crawling** \- Use `modifiedSince` and `maxAge` to skip pages that haven't changed or were recently fetched, saving time and cost on repeated crawls  
   * **Static mode** \- Set `render: false` to fetch static HTML without spinning up a browser, for faster crawling of static sites  
   * **Well-behaved bot** \- Honors `robots.txt` directives, including `crawl-delay`  
Available on both the Workers Free and Paid plans.  
**Note**: the /crawl endpoint cannot bypass Cloudflare bot detection or captchas, and self-identifies as a bot.  
To get started, refer to the [crawl endpoint documentation](https://developers.cloudflare.com/browser-run/quick-actions/crawl-endpoint/). If you are setting up your own site to be crawled, review the [robots.txt and sitemaps best practices](https://developers.cloudflare.com/browser-run/reference/robots-txt/).

Mar 04, 2026
1. ### [Browser Rendering: 3x higher REST API request rate](https://developers.cloudflare.com/changelog/post/2026-03-04-br-rest-api-limit-increase/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
[Browser Rendering](https://developers.cloudflare.com/browser-run/) REST API rate limits for Workers Paid plans have been increased from 3 requests per second (180/min) to **10 requests per second (600/min)**. No action is needed to benefit from the higher limit.  
![Browser Rendering REST API rate limit increased from 3 to 10 requests per second](https://developers.cloudflare.com/_astro/rest-api-limit-increase.DJHY7xYF_1U7IJn.webp)  
The [REST API](https://developers.cloudflare.com/browser-run/quick-actions/) lets you perform common browser tasks with a single API call, and you can now do it at a higher rate.  
   * [/content - Fetch HTML](https://developers.cloudflare.com/browser-run/quick-actions/content-endpoint/)  
   * [/screenshot - Capture screenshot](https://developers.cloudflare.com/browser-run/quick-actions/screenshot-endpoint/)  
   * [/pdf - Render PDF](https://developers.cloudflare.com/browser-run/quick-actions/pdf-endpoint/)  
   * [/markdown - Extract Markdown from a webpage](https://developers.cloudflare.com/browser-run/quick-actions/markdown-endpoint/)  
   * [/snapshot - Take a webpage snapshot](https://developers.cloudflare.com/browser-run/quick-actions/snapshot/)  
   * [/scrape - Scrape HTML elements](https://developers.cloudflare.com/browser-run/quick-actions/scrape-endpoint/)  
   * [/json - Capture structured data using AI](https://developers.cloudflare.com/browser-run/quick-actions/json-endpoint/)  
   * [/links - Retrieve links from a webpage](https://developers.cloudflare.com/browser-run/quick-actions/links-endpoint/)  
If you use the [Browser Sessions](https://developers.cloudflare.com/browser-run/#integration-methods) method, increases to concurrent browser and new browser limits are coming soon. Stay tuned.  
For full details, refer to the [Browser Rendering limits page](https://developers.cloudflare.com/browser-run/limits/).

Oct 31, 2025
1. ### [Workers WebSocket message size limit increased from 1 MiB to 32 MiB](https://developers.cloudflare.com/changelog/post/2025-10-31-increased-websocket-message-size-limit/)  
[ Workers ](https://developers.cloudflare.com/workers/)[ Durable Objects ](https://developers.cloudflare.com/durable-objects/)[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
Workers, including those using [Durable Objects](https://developers.cloudflare.com/durable-objects/) and [Browser Rendering](https://developers.cloudflare.com/browser-run/), may now process WebSocket messages up to 32 MiB in size. Previously, this limit was 1 MiB.  
This change allows Workers to handle use cases requiring large message sizes, such as processing Chrome Devtools Protocol messages.  
For more information, please see the [Durable Objects startup limits](https://developers.cloudflare.com/durable-objects/platform/limits/#sqlite-backed-durable-objects-general-limits).

Sep 25, 2025
1. ### [Browser Rendering Playwright GA, Stagehand support (Beta), and higher limits](https://developers.cloudflare.com/changelog/post/2025-09-25-br-playwright-ga-stagehand-limits/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
We’re shipping three updates to Browser Rendering:  
   * Playwright support is now Generally Available and synced with [Playwright v1.55 ↗](https://playwright.dev/docs/release-notes#version-155), giving you a stable foundation for critical automation and AI-agent workflows.  
   * We’re also adding [Stagehand support (Beta)](https://developers.cloudflare.com/browser-run/stagehand/) so you can combine code with natural language instructions to build more resilient automations.  
   * Finally, we’ve tripled [limits](https://developers.cloudflare.com/browser-run/limits/#workers-paid) for paid plans across both the [REST API](https://developers.cloudflare.com/browser-run/quick-actions/) and [Browser Sessions](https://developers.cloudflare.com/browser-run/#integration-methods) to help you scale.  
To get started with Stagehand, refer to the [Stagehand](https://developers.cloudflare.com/browser-run/stagehand/) example that uses Stagehand and [Workers AI](https://developers.cloudflare.com/workers-ai/) to search for a movie on this [example movie directory ↗](https://demo.playwright.dev/movies), extract its details using natural language (title, year, rating, duration, and genre), and return the information along with a screenshot of the webpage.  
Stagehand example  
```  
const stagehand = new Stagehand({  
  env: "LOCAL",  
  localBrowserLaunchOptions: { cdpUrl: endpointURLString(env.BROWSER) },  
  llmClient: new WorkersAIClient(env.AI),  
  verbose: 1,  
});  
await stagehand.init();  
const page = stagehand.page;  
await page.goto("https://demo.playwright.dev/movies");  
// if search is a multi-step action, stagehand will return an array of actions it needs to act on  
const actions = await page.observe('Search for "Furiosa"');  
for (const action of actions) await page.act(action);  
await page.act("Click the search result");  
// normal playwright functions work as expected  
await page.waitForSelector(".info-wrapper .cast");  
let movieInfo = await page.extract({  
  instruction: "Extract movie information",  
  schema: z.object({  
    title: z.string(),  
    year: z.number(),  
    rating: z.number(),  
    genres: z.array(z.string()),  
    duration: z.number().describe("Duration in minutes"),  
  }),  
});  
await stagehand.close();  
```  
![Stagehand video](https://developers.cloudflare.com/images/browser-run/speedystagehand.gif)

Jul 28, 2025
1. ### [Introducing pricing for the Browser Rendering API — $0.09 per browser hour](https://developers.cloudflare.com/changelog/post/2025-07-28-br-pricing/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
We’ve launched pricing for [Browser Rendering](https://developers.cloudflare.com/browser-run/), including a free tier and a pay-as-you-go model that scales with your needs. Starting **August 20, 2025**, Cloudflare will begin billing for Browser Rendering.  
There are two ways to use Browser Rendering. Depending on the method you use, here’s how billing will work:  
   * [**REST API**](https://developers.cloudflare.com/browser-run/quick-actions/): Charged for **Duration** only ($/browser hour)  
   * [**Browser Sessions**](https://developers.cloudflare.com/browser-run/#integration-methods): Charged for both **Duration** and **Concurrency** ($/browser hour and # of concurrent browsers)  
Included usage and pricing by plan  
| Plan             | Included duration  | Included concurrency                      | Price (beyond included)                                                                                                                                  |  
| ---------------- | ------------------ | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |  
| **Workers Free** | 10 minutes per day | 3 concurrent browsers                     | N/A                                                                                                                                                      |  
| **Workers Paid** | 10 hours per month | 10 concurrent browsers (averaged monthly) | **1\. REST API**: $0.09 per additional browser hour **2\. Workers Bindings**: $0.09 per additional browser hour  $2.00 per additional concurrent browser |  
What you need to know:  
   * **Workers Free Plan:** 10 minutes of browser usage per day with 3 concurrent browsers at no charge.  
   * **Workers Paid Plan:** 10 hours of browser usage per month with 10 concurrent browsers (averaged monthly) at no charge. Additional usage is charged as shown above.  
You can monitor usage via the [Cloudflare dashboard ↗](https://dash.cloudflare.com/?to=/:account/workers/browser-run). Go to **Compute** \> **Browser Run**.  
![Browser Rendering dashboard](https://developers.cloudflare.com/_astro/dashboard.BQnX87lT_39GAT.webp)  
If you've been using Browser Rendering and do not wish to incur charges, ensure your usage stays within your plan's [included usage](https://developers.cloudflare.com/browser-run/pricing/). To estimate costs, take a look at these [example pricing scenarios](https://developers.cloudflare.com/browser-run/pricing/#examples-of-workers-paid-pricing).

Jul 22, 2025
1. ### [Browser Rendering now supports local development](https://developers.cloudflare.com/changelog/post/2025-07-22-br-local-dev/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
You can now run your Browser Rendering locally using `npx wrangler dev`, which spins up a browser directly on your machine before deploying to Cloudflare's global network. By running tests locally, you can quickly develop, debug, and test changes without needing to deploy or worry about usage costs.  
Get started with this [example guide](https://developers.cloudflare.com/browser-run/how-to/deploy-worker/) that shows how to use Cloudflare's [fork of Puppeteer](https://developers.cloudflare.com/browser-run/puppeteer/) (you can also use [Playwright](https://developers.cloudflare.com/browser-run/playwright/)) to take screenshots of webpages and store the results in [Workers KV](https://developers.cloudflare.com/kv/).

May 28, 2025
1. ### [Playwright MCP server is now compatible with Browser Rendering](https://developers.cloudflare.com/changelog/post/2025-05-28-playwright-mcp/)  
[ Browser Run ](https://developers.cloudflare.com/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://developers.cloudflare.com/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://developers.cloudflare.com/_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  
```  
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://developers.cloudflare.com/browser-run/playwright/playwright-mcp/).

Apr 07, 2025
1. ### [Browser Rendering REST API is Generally Available, with new endpoints and a free tier](https://developers.cloudflare.com/changelog/post/2025-04-07-br-free-ga-playwright/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
We’re excited to announce Browser Rendering is now available on the [Workers Free plan ↗](https://www.cloudflare.com/plans/developer-platform/), making it even easier to prototype and experiment with web search and headless browser use-cases when building applications on Workers.  
The Browser Rendering **[REST API](https://developers.cloudflare.com/browser-run/quick-actions/) is now Generally Available**, allowing you to control browser instances from outside of Workers applications. We've added three new endpoints to help automate more browser tasks:  
   * **Extract structured data** – Use `/json` to retrieve structured data from a webpage.  
   * **Retrieve links** – Use `/links` to pull all links from a webpage.  
   * **Convert to Markdown** – Use `/markdown` to convert webpage content into Markdown format.  
For example, to fetch the Markdown representation of a webpage:  
Markdown example  
```  
curl -X 'POST' 'https://api.cloudflare.com/client/v4/accounts/<accountId>/browser-rendering/markdown' \  
  -H 'Content-Type: application/json' \  
  -H 'Authorization: Bearer <apiToken>' \  
  -d '{  
    "url": "https://example.com"  
  }'  
```  
For the full list of endpoints, check out our [REST API documentation](https://developers.cloudflare.com/browser-run/quick-actions/). You can also interact with Browser Rendering via the [Cloudflare TypeScript SDK ↗](https://github.com/cloudflare/cloudflare-typescript).  
We also recently landed support for [Playwright](https://developers.cloudflare.com/browser-run/playwright/) in Browser Rendering for browser automation from Cloudflare [Workers](https://developers.cloudflare.com/workers/), in addition to [Puppeteer](https://developers.cloudflare.com/browser-run/puppeteer/), giving you more flexibility to test across different browser environments.  
Visit the [Browser Rendering docs](https://developers.cloudflare.com/browser-run/) to learn more about how to use headless browsers in your applications.

Apr 04, 2025
1. ### [Playwright for Browser Rendering now available](https://developers.cloudflare.com/changelog/post/2025-04-04-playwright-beta/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
We're excited to share that you can now use Playwright's browser automation [capabilities ↗](https://playwright.dev/docs/api/class-playwright) from Cloudflare [Workers](https://developers.cloudflare.com/workers/).  
[Playwright ↗](https://playwright.dev/) is an open-source package developed by Microsoft that can do browser automation tasks; it's commonly used to write software tests, debug applications, create screenshots, and crawl pages. Like [Puppeteer](https://developers.cloudflare.com/browser-run/puppeteer/), we [forked ↗](https://github.com/cloudflare/playwright) Playwright and modified it to be compatible with Cloudflare Workers and [Browser Rendering](https://developers.cloudflare.com/browser-run/).  
Below is an example of how to use Playwright with Browser Rendering to test a TODO application using assertions:  
Assertion example  
```  
import { launch, type BrowserWorker } from "@cloudflare/playwright";  
import { expect } from "@cloudflare/playwright/test";  
interface Env {  
  MYBROWSER: BrowserWorker;  
}  
export default {  
  async fetch(request: Request, env: Env) {  
    const browser = await launch(env.MYBROWSER);  
    const page = await browser.newPage();  
    await page.goto("https://demo.playwright.dev/todomvc");  
    const TODO_ITEMS = [  
      "buy some cheese",  
      "feed the cat",  
      "book a doctors appointment",  
    ];  
    const newTodo = page.getByPlaceholder("What needs to be done?");  
    for (const item of TODO_ITEMS) {  
      await newTodo.fill(item);  
      await newTodo.press("Enter");  
    }  
    await expect(page.getByTestId("todo-title")).toHaveCount(TODO_ITEMS.length);  
    await Promise.all(  
      TODO_ITEMS.map((value, index) =>  
        expect(page.getByTestId("todo-title").nth(index)).toHaveText(value),  
      ),  
    );  
  },  
};  
```  
Playwright is available as an npm package at [@cloudflare/playwright ↗](https://www.npmjs.com/package/@cloudflare/playwright) and the code is at [GitHub ↗](https://github.com/cloudflare/playwright).  
Learn more in our [documentation](https://developers.cloudflare.com/browser-run/playwright/).

Feb 27, 2025
1. ### [New REST API is in open beta!](https://developers.cloudflare.com/changelog/post/2025-02-27-br-rest-api-beta/)  
[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
We've released a new REST API for [Browser Rendering](https://developers.cloudflare.com/browser-run/) in open beta, making interacting with browsers easier than ever. This new API provides endpoints for common browser actions, with more to be added in the future.  
With the **REST API** you can:  
   * **Capture screenshots** – Use `/screenshot` to take a screenshot of a webpage from provided URL or HTML.  
   * **Generate PDFs** – Use `/pdf` to convert web pages into PDFs.  
   * **Extract HTML content** – Use `/content` to retrieve the full HTML from a page.**Snapshot (HTML + Screenshot)** – Use `/snapshot` to capture both the page's HTML and a screenshot in one request  
   * **Scrape Web Elements** – Use `/scrape` to extract specific elements from a page.  
For example, to capture a screenshot:  
Screenshot example  
```  
curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<accountId>/browser-rendering/screenshot' \  
  -H 'Authorization: Bearer <apiToken>' \  
  -H 'Content-Type: application/json' \  
  -d '{  
    "html": "Hello World!",  
    "screenshotOptions": {  
      "type": "webp",  
      "omitBackground": true  
    }  
  }' \  
  --output "screenshot.webp"  
```  
Learn more in our [documentation](https://developers.cloudflare.com/browser-run/quick-actions/).

Jan 30, 2025
1. ### [Increased Browser Rendering limits!](https://developers.cloudflare.com/changelog/post/2025-01-30-browser-rendering-more-instances/)  
[ Workers ](https://developers.cloudflare.com/workers/)[ Browser Run ](https://developers.cloudflare.com/browser-run/)  
[Browser Rendering](https://developers.cloudflare.com/browser-run/) now supports 10 concurrent browser instances per account _and_ 10 new instances per minute, up from the previous limits of 2.  
This allows you to launch more browser tasks from [Cloudflare Workers](https://developers.cloudflare.com/workers).  
To manage concurrent browser sessions, you can use [Queues](https://developers.cloudflare.com/queues/) or [Workflows](https://developers.cloudflare.com/workflows/):  
   * [  JavaScript ](#tab-panel-2090)  
   * [  TypeScript ](#tab-panel-2091)  
index.js  
```  
export default {  
  async queue(batch, env) {  
    for (const message of batch.messages) {  
      const browser = await puppeteer.launch(env.BROWSER);  
      const page = await browser.newPage();  
      try {  
        await page.goto(message.url, {  
          waitUntil: message.waitUntil,  
        });  
        // Process page...  
      } finally {  
        await browser.close();  
      }  
    }  
  },  
};  
```  
index.ts  
```  
interface QueueMessage {  
  url: string;  
  waitUntil: number;  
}  
export interface Env {  
  BROWSER_QUEUE: Queue<QueueMessage>;  
  BROWSER: Fetcher;  
}  
export default {  
  async queue(batch: MessageBatch<QueueMessage>, env: Env): Promise<void> {  
    for (const message of batch.messages) {  
      const browser = await puppeteer.launch(env.BROWSER);  
      const page = await browser.newPage();  
      try {  
        await page.goto(message.url, {  
          waitUntil: message.waitUntil,  
        });  
        // Process page...  
      } finally {  
        await browser.close();  
      }  
    }  
  },  
};  
```