Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions public/__redirects
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,11 @@
/browser-rendering/workers-binding-api/screenshots/ /browser-rendering/workers-bindings/screenshots/ 301
/browser-rendering/workers-binding-api/browser-rendering-with-do/ /browser-rendering/workers-bindings/browser-rendering-with-do/ 301
/browser-rendering/workers-binding-api/reuse-sessions/ /browser-rendering/workers-bindings/reuse-sessions/ 301
/browser-rendering/platform/puppeteer/ /browser-rendering/puppeteer/ 301
/browser-rendering/platform/playwright/ /browser-rendering/playwright/ 301
/browser-rendering/platform/wrangler/ /browser-rendering/reference/wrangler/ 301
/browser-rendering/platform/limits/ /browser-rendering/limits/ 301
/browser-rendering/platform/pricing/ /browser-rendering/pricing/ 301

# byoip
/byoip/about/dynamic-advertisement/ /byoip/concepts/dynamic-advertisement/ 301
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ If you have Security rules configured to block bot activity, you can add a rule
You can choose how pages are parsed during crawling:

- **Static sites**: Downloads the raw HTML for each page.
- **Rendered sites**: Loads pages with a headless browser and downloads the fully rendered version, including dynamic JavaScript content. Note that the [Browser Rendering](/browser-rendering/platform/pricing/) limits and billing apply.
- **Rendered sites**: Loads pages with a headless browser and downloads the fully rendered version, including dynamic JavaScript content. Note that the [Browser Rendering](/browser-rendering/pricing/) limits and billing apply.

## Storage
During setup, AI Search creates a dedicated R2 bucket in your account to store the pages that have been crawled and downloaded as HTML files. This bucket is automatically managed and is used only for content discovered by the crawler. Any files or objects that you add directly to this bucket will not be indexed.
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/ai-search/platform/limits-pricing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ During the open beta, AI Search is **free to enable**. When you create an AI Sea
| [**Vectorize**](/vectorize/platform/pricing/) | Stores vector embeddings and powers semantic search |
| [**Workers AI**](/workers-ai/platform/pricing/) | Handles image-to-Markdown conversion, embedding, query rewriting, and response generation |
| [**AI Gateway**](/ai-gateway/reference/pricing/) | Monitors and controls model usage |
| [**Browser Rendering**](/browser-rendering/platform/pricing/) | Loads dynamic JavaScript content during [website](/ai-search/configuration/data-source/website/) crawling with the Render option |
| [**Browser Rendering**](/browser-rendering/pricing/) | Loads dynamic JavaScript content during [website](/ai-search/configuration/data-source/website/) crawling with the Render option |

For more information about how each resource is used within AI Search, reference [How AI Search works](/ai-search/concepts/how-ai-search-works/).

Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/browser-rendering/changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ title: Changelog
release_notes_file_name:
- browser-rendering
sidebar:
order: 9
order: 14
head: []
description: Review recent changes to Worker Browser Rendering.
---
Expand Down
10 changes: 5 additions & 5 deletions src/content/docs/browser-rendering/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: FAQ
pcx_content_type: faq
sidebar:
order: 8
order: 11
head:
- tag: title
content: Frequently asked questions about Cloudflare Browser Rendering
Expand All @@ -12,8 +12,8 @@ import { GlossaryTooltip, Render } from "~/components";

Below you will find answers to our most commonly asked questions about Browser Rendering.

For pricing questions, visit the [pricing FAQ](/browser-rendering/platform/pricing/#faq).
For usage limits questions, visit the [limits FAQ](/browser-rendering/platform/limits/#faq).
For pricing questions, visit the [pricing FAQ](/browser-rendering/pricing/#faq).
For usage limits questions, visit the [limits FAQ](/browser-rendering/limits/#faq).
If you cannot find the answer you are looking for, join us on [Discord](https://discord.cloudflare.com).

---
Expand Down Expand Up @@ -85,9 +85,9 @@ It may be because you increased the height and width of the viewport. To fix thi

### `Error processing the request: Unable to create new browser: code: 429: message: Browser time limit exceeded for today`

This error indicates you have hit the daily browser-instance limit on the Workers Free plan. [Free-plan accounts are capped at free plan limit is 10 minutes of browser use a day](/browser-rendering/platform/limits/#workers-free) once you exceed those, further creation attempts return a 429 until the next UTC day.
This error indicates you have hit the daily browser-instance limit on the Workers Free plan. [Free-plan accounts are capped at free plan limit is 10 minutes of browser use a day](/browser-rendering/limits/#workers-free) once you exceed those, further creation attempts return a 429 until the next UTC day.

To resolve: [Upgrade to a Workers Paid plan](/workers/platform/pricing/) which allows for more than 10 minutes of usage a day and has higher [limits](/browser-rendering/platform/limits/#workers-paid). If you recently upgraded but still see this error, try redeploying your Worker to ensure your usage is correctly associated with your new plan.
To resolve: [Upgrade to a Workers Paid plan](/workers/platform/pricing/) which allows for more than 10 minutes of usage a day and has higher [limits](/browser-rendering/limits/#workers-paid). If you recently upgraded but still see this error, try redeploying your Worker to ensure your usage is correctly associated with your new plan.

### `422 Unprocessable Entity`

Expand Down
8 changes: 4 additions & 4 deletions src/content/docs/browser-rendering/get-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Cloudflare Browser Rendering allows you to programmatically control a headless b

There are two ways to use Browser Rendering:
- [REST API](/browser-rendering/rest-api/) for simple, one-off actions, like taking a screenshot, fetching HTML, or generating a PDF.
- [Workers Bindings](/browser-rendering/workers-bindings/) for more complex, multi-step browser automation using [Puppeteer](/browser-rendering/platform/puppeteer/) and [Playwright](/browser-rendering/platform/playwright/).
- [Workers Bindings](/browser-rendering/workers-bindings/) for more complex, multi-step browser automation using [Puppeteer](/browser-rendering/puppeteer/) and [Playwright](/browser-rendering/playwright/).

This guide will help you choose the right path for your needs and get you started with your first Browser Rendering project.

Expand All @@ -37,7 +37,7 @@ The REST API can also be used to:

## Workers Bindings

Workers Bindings are best for situations where you need to build more complex, multi-step browser automation workflows. You can use familiar tools like [Puppeteer](/browser-rendering/platform/puppeteer/) and [Playwright](/browser-rendering/platform/playwright/).
Workers Bindings are best for situations where you need to build more complex, multi-step browser automation workflows. You can use familiar tools like [Puppeteer](/browser-rendering/puppeteer/) and [Playwright](/browser-rendering/playwright/).

### Prerequisites
<Render file="prereqs" product="workers" />
Expand All @@ -53,5 +53,5 @@ Workers Bindings are best for situations where you need to build more complex, m
If you have any feature requests or notice any bugs, share your feedback directly with the Cloudflare team by joining the [Cloudflare Developers community on Discord](https://discord.cloudflare.com/).

- Check out all the [REST API endpoints](/browser-rendering/rest-api/)
- Try out the [Playwright MCP](/browser-rendering/platform/playwright-mcp/)
- Learn more about Browser Rendering [limits](/browser-rendering/platform/limits/) and [pricing](/browser-rendering/platform/pricing/).
- Try out the [Playwright MCP](/browser-rendering/playwright-mcp/)
- Learn more about Browser Rendering [limits](/browser-rendering/limits/) and [pricing](/browser-rendering/pricing/).
2 changes: 1 addition & 1 deletion src/content/docs/browser-rendering/how-to/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Tutorials
pcx_content_type: navigation
sidebar:
order: 4
order: 9
group:
hideIndex: true
---
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ As seen in [this Workers bindings guide](/browser-rendering/workers-bindings/scr
You can generate PDFs with Browser Rendering in two ways:

- **[REST API](/browser-rendering/rest-api/)**: Use the the [/pdf endpoint](/browser-rendering/rest-api/pdf-endpoint/). This is ideal if you don't need to customize rendering behavior.
- **[Workers Bindings](/browser-rendering/workers-bindings/)**: Use [Puppeteer](/browser-rendering/platform/puppeteer/) or [Playwright](/browser-rendering/platform/playwright/) with Workers Bindings for additional control and customization.
- **[Workers Bindings](/browser-rendering/workers-bindings/)**: Use [Puppeteer](/browser-rendering/puppeteer/) or [Playwright](/browser-rendering/playwright/) with Workers Bindings for additional control and customization.

Choose the method that best fits your use case.

The following example shows you how to generate a PDF using [Puppeteer](/browser-rendering/platform/puppeteer/).
The following example shows you how to generate a PDF using [Puppeteer](/browser-rendering/puppeteer/).

## Prerequisites

Expand Down
4 changes: 2 additions & 2 deletions src/content/docs/browser-rendering/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ Build and deploy AI-powered agents that can autonomously perform tasks.

<LinkTitleCard
title="Limits"
href="/browser-rendering/platform/limits/"
href="/browser-rendering/limits/"
icon="document"
>
Learn about Browser Rendering limits.
Expand All @@ -93,7 +93,7 @@ Build and deploy AI-powered agents that can autonomously perform tasks.
<LinkTitleCard
title="Pricing"
icon="seti:shell"
href="/browser-rendering/platform/pricing/"
href="/browser-rendering/pricing/"
>
Learn about Browser Rendering pricing.
</LinkTitleCard>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pcx_content_type: configuration
title: Limits
description: Learn about the limits associated with Browser Rendering.
sidebar:
order: 30
order: 12
---

import { Render, Plan, Tabs, TabItem, DashButton } from "~/components";
Expand All @@ -30,7 +30,7 @@ To increase this limit, go to the **Compute (Workers) > Workers plans** page in
[^1]: Rate limits are enforced with a fixed **per-second fill rate**. For example, a limit of 60 requests per minute translates to **1 request per second**. This means you cannot send all 60 requests at once; the API expects them to be spread evenly over the minute. If your account has a custom higher limit, it will also be enforced as a per-second rate.

:::note[Note on browser timeout]
By default, a browser will time out if it does not get any [devtools](https://chromedevtools.github.io/devtools-protocol/) command for 60 seconds, freeing one instance. Users can optionally increase this by using the [`keep_alive` option](/browser-rendering/platform/puppeteer/#keep-alive). `browser.close()` releases the browser instance.
By default, a browser will time out if it does not get any [devtools](https://chromedevtools.github.io/devtools-protocol/) command for 60 seconds, freeing one instance. Users can optionally increase this by using the [`keep_alive` option](/browser-rendering/puppeteer/#keep-alive). `browser.close()` releases the browser instance.
:::

## Workers Paid
Expand All @@ -50,7 +50,7 @@ The limits for Browser Rendering will continue to be raised over time. In the me
[^2]: Contact our team to request increases to this limit.

:::note[Note on browser timeout]
By default, a browser will time out if it does not get any [devtools](https://chromedevtools.github.io/devtools-protocol/) command for 60 seconds, freeing one instance. Users can optionally increase this by using the [`keep_alive` option](/browser-rendering/platform/puppeteer/#keep-alive). `browser.close()` releases the browser instance.
By default, a browser will time out if it does not get any [devtools](https://chromedevtools.github.io/devtools-protocol/) command for 60 seconds, freeing one instance. Users can optionally increase this by using the [`keep_alive` option](/browser-rendering/puppeteer/#keep-alive). `browser.close()` releases the browser instance.
:::

## Note on concurrency
Expand All @@ -70,11 +70,11 @@ To upgrade, go to the **Compute (Workers) > Workers plans** page in the Cloudfla

### Can I increase the browser timeout?

By default, a browser instance will time out after 60 seconds of inactivity. If you want to keep the browser open longer, you can use the [`keep_alive` option](/browser-rendering/platform/puppeteer/#keep-alive) which allows you to extend the timeout to up to 10 minutes.
By default, a browser instance will time out after 60 seconds of inactivity. If you want to keep the browser open longer, you can use the [`keep_alive` option](/browser-rendering/puppeteer/#keep-alive) which allows you to extend the timeout to up to 10 minutes.

### Is there a maximum session duration?

There is no fixed maximum lifetime for a browser session as long as it remains active. By default, Browser Rendering closes sessions after 1 minute of inactivity to prevent unintended usage. You can [increase this inactivity timeout](/browser-rendering/platform/puppeteer/#keep-alive) to up to 10 minutes.
There is no fixed maximum lifetime for a browser session as long as it remains active. By default, Browser Rendering closes sessions after 1 minute of inactivity to prevent unintended usage. You can [increase this inactivity timeout](/browser-rendering/puppeteer/#keep-alive) to up to 10 minutes.

If you need sessions to remain open longer, keep them active by sending a command at least once within your configured inactivity window (for example, every 10 minutes). Sessions also close when Browser Rendering rolls out a new release.

Expand All @@ -85,7 +85,7 @@ If you recently upgraded to the [Workers Paid plan](/workers/platform/pricing/)
### Error: `429 Too many requests`

When you make too many requests in a short period of time, Browser Rendering will respond with HTTP status code `429 Too many requests`.
The response includes a `Retry-After` header, which specifies how many seconds to wait before retrying. You can view your account's rate limits on the [Limits](/browser-rendering/platform/limits/) page.
The response includes a `Retry-After` header, which specifies how many seconds to wait before retrying. You can view your account's rate limits on the [Limits](/browser-rendering/limits/) page.

The example below demonstrates how to handle rate limiting gracefully by reading the `Retry-After` value and retrying the request after that delay.

Expand Down Expand Up @@ -141,9 +141,9 @@ try {

### Error: `429 Browser time limit exceeded for today`

This `Error processing the request: Unable to create new browser: code: 429: message: Browser time limit exceeded for today` indicates you have hit the daily browser limit on the Workers Free plan. [Workers Free plan accounts are limited](/browser-rendering/platform/limits/#workers-free) to 10 minutes of browser rendering usage per day. If you exceed that limit, you will receive a `429` error until the next UTC day.
This `Error processing the request: Unable to create new browser: code: 429: message: Browser time limit exceeded for today` indicates you have hit the daily browser limit on the Workers Free plan. [Workers Free plan accounts are limited](/browser-rendering/limits/#workers-free) to 10 minutes of browser rendering usage per day. If you exceed that limit, you will receive a `429` error until the next UTC day.

You can [increase your limits](/browser-rendering/platform/limits/#workers-paid) by upgrading to a Workers Paid plan on the **Workers plans** page of the Cloudflare dashboard:
You can [increase your limits](/browser-rendering/limits/#workers-paid) by upgrading to a Workers Paid plan on the **Workers plans** page of the Cloudflare dashboard:

<DashButton url="/?to=/:account/workers/plans" />

Expand Down
12 changes: 0 additions & 12 deletions src/content/docs/browser-rendering/platform/index.mdx

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ If you want to skip the steps and get started quickly, select **Deploy to Cloudf

[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/playwright/tree/main/packages/playwright-cloudflare/examples/todomvc)

Make sure you have the [browser binding](/browser-rendering/platform/wrangler/#bindings) configured in your `wrangler.toml` file:
Make sure you have the [browser binding](/browser-rendering/reference/wrangler/#bindings) configured in your `wrangler.toml` file:

:::note
To use the latest version of `@cloudflare/playwright`, your Worker configuration must include the `nodejs_compat` compatibility flag and a `compatibility_date` of 2025-09-15 or later. This change is necessary because the library's functionality requires the native `node.fs` API.
Expand Down Expand Up @@ -340,7 +340,7 @@ Notice that the session `478f4d7d-e943-40f6-a414-837d3736a1dc` has an active wor
]
```

Session `2be00a21-9fb6-4bb2-9861-8cd48e40e771` was closed explicitly with `browser.close()` by the client, while session `478f4d7d-e943-40f6-a414-837d3736a1dc` was closed due to reaching the maximum idle time (check [limits](/browser-rendering/platform/limits/)).
Session `2be00a21-9fb6-4bb2-9861-8cd48e40e771` was closed explicitly with `browser.close()` by the client, while session `478f4d7d-e943-40f6-a414-837d3736a1dc` was closed due to reaching the maximum idle time (check [limits](/browser-rendering/limits/)).

You should also be able to access this information in the dashboard, albeit with a slight delay.

Expand All @@ -362,7 +362,7 @@ You should also be able to access this information in the dashboard, albeit with

- `activeSessions` lists the IDs of the current open sessions
- `maxConcurrentSessions` defines how many browsers can be open at the same time
- `allowedBrowserAcquisitions` specifies if a new browser session can be opened according to the rate [limits](/browser-rendering/platform/limits/) in place
- `allowedBrowserAcquisitions` specifies if a new browser session can be opened according to the rate [limits](/browser-rendering/limits/) in place
- `timeUntilNextAllowedBrowserAcquisition` defines the waiting period before a new browser can be launched.

## Playwright API
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pcx_content_type: configuration
title: Pricing
sidebar:
order: 31
order: 13
---
import { DashButton } from "~/components"

Expand Down Expand Up @@ -60,7 +60,7 @@ You can monitor Browser Rendering usage in two ways:
const browserMsUsed = parseInt(contentRes.headers.get('X-Browser-Ms-Used') || '');
```

Then, you can use [the pricing page](/browser-rendering/platform/pricing/) to estimate your costs based on your usage.
Then, you can use [the pricing page](/browser-rendering/pricing/) to estimate your costs based on your usage.

### Do failed API calls, such as those that time out, add to billable browser hours?
No. If a request to the Browser Rendering REST API fails with a `waitForTimeout` error, the browser session is not charged.
Expand Down
Loading