| 
 | 1 | +---  | 
 | 2 | +title: Browser Rendering Playwright GA, Stagehand support (Beta), and higher limits  | 
 | 3 | +description: Browser Rendering birthday week announcements  | 
 | 4 | +products:  | 
 | 5 | +  - browser-rendering  | 
 | 6 | +date: 2025-09-25T12:00:00Z  | 
 | 7 | +---  | 
 | 8 | + | 
 | 9 | +We’re shipping three updates to Browser Rendering.   | 
 | 10 | +- 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.   | 
 | 11 | +- We’re also adding [Stagehand support (Beta)](/browser-rendering/platform/stagehand/) so you can combine code with natural language instructions to build more resilient automations.   | 
 | 12 | +- Finally, we’ve tripled [limits](/browser-rendering/platform/limits/#workers-paid) for paid plans across both the [REST API](https://developers.cloudflare.com/browser-rendering/rest-api/) and [Workers Bindings](https://developers.cloudflare.com/browser-rendering/workers-bindings/) to help you scale.  | 
 | 13 | + | 
 | 14 | +To get started with Stagehand, check out this [example guide](/browser-rendering/platform/stagehand) that uses Stagehand and [Workers AI](/workers-ai) to search for a movie on [The Movie Database](https://www.themoviedb.org/), extract its details using natural language (title, year, rating, duration, and genre), and return the information along with a screenshot of the webpage.  | 
 | 15 | + | 
 | 16 | +```ts title="stagehand example"  | 
 | 17 | +const stagehand = new Stagehand({  | 
 | 18 | +				env: "LOCAL",  | 
 | 19 | +				localBrowserLaunchOptions: { cdpUrl: endpointURLString(env.BROWSER) },  | 
 | 20 | +				llmClient: new new WorkersAIClient(env.AI),  | 
 | 21 | +				verbose: 1,  | 
 | 22 | +			});  | 
 | 23 | + | 
 | 24 | +			await stagehand.init();  | 
 | 25 | +			const page = stagehand.page;  | 
 | 26 | + | 
 | 27 | +			await page.goto('https://demo.playwright.dev/movies');  | 
 | 28 | + | 
 | 29 | +			// if search is a multi-step action, stagehand will return an array of actions it needs to act on  | 
 | 30 | +			const actions = await page.observe('Search for "Furiosa"');  | 
 | 31 | +			for (const action of actions)  | 
 | 32 | +				await page.act(action);  | 
 | 33 | + | 
 | 34 | +			await page.act('Click the search result');  | 
 | 35 | + | 
 | 36 | +			// normal playwright functions work as expected  | 
 | 37 | +			await page.waitForSelector('.info-wrapper .cast');  | 
 | 38 | + | 
 | 39 | +			let movieInfo = await page.extract({  | 
 | 40 | +				instruction: 'Extract movie information',  | 
 | 41 | +				schema: z.object({  | 
 | 42 | +					title: z.string(),  | 
 | 43 | +					year: z.number(),  | 
 | 44 | +					rating: z.number(),  | 
 | 45 | +					genres: z.array(z.string()),  | 
 | 46 | +					duration: z.number().describe("Duration in minutes"),  | 
 | 47 | +				}),  | 
 | 48 | +			});  | 
 | 49 | + | 
 | 50 | +			await stagehand.close();  | 
 | 51 | +```  | 
 | 52 | + | 
 | 53 | +  | 
0 commit comments