WebDriver BiDi is a W3C browser-automation protocol that lets a client send commands to a browser and receive browser events over a bidirectional connection. Puppeteer supports it with Firefox and Chrome: Firefox uses BiDi by default, while Chrome uses Chrome DevTools Protocol (CDP) unless you explicitly select BiDi. Support is not feature-complete, so check the APIs your project relies on before switching.
What WebDriver BiDi is
WebDriver BiDi (bidirectional) is a protocol for remotely controlling browsers. Traditional WebDriver is organized around commands and responses. BiDi adds a channel through which the browser can send events to the automation client as they occur. That makes event-driven workflows possible without requiring every observation to be requested through a separate polling command. It does not mean every operation is faster, or that every browser supports every protocol module equally.
| # | Preview | Product | Price | |
|---|---|---|---|---|
| 1 |
|
Ultimate Selenium WebDriver for Test Automation: Build and Implement Automated Web Testing... | $37.95 | Buy on Amazon |
| 2 |
|
The C Programming Language | $15.87 | Buy on Amazon |
| 3 |
|
The SQL Programming Language: . | $4.23 | Buy on Amazon |
As an Amazon Associate I earn from qualifying purchases.
The W3C specification describes BiDi as a way for events to stream from the user agent to controlling software, reflecting the evented nature of the browser DOM. The specification is currently a Working Draft, not a finalized Recommendation; its status and contents can change.
How the BiDi connection works
BiDi organizes browser commands and events into protocol modules and uses a WebSocket connection for two-way communication. In a WebDriver session, the client requests the webSocketUrl capability with the value true. The remote end then creates the connection and returns its URL in the session capabilities. The specification also describes BiDi-only sessions, where the WebSocket endpoint is provided out of band.
#1 Best Overall
- The automation client starts or connects to a browser session and requests BiDi access.
- The browser provides a WebSocket endpoint for the session.
- The client sends commands over that connection; browser events can also arrive over it.
That model is useful when automation needs to react to browser events, but the protocol alone does not guarantee that a given browser implements every module or command.
Enable WebDriver BiDi in Puppeteer
Puppeteer’s current Next documentation says it supports WebDriver BiDi automation with Firefox and Chrome. The launch defaults differ: Firefox uses BiDi by default, while Chrome uses CDP unless you select BiDi explicitly.
import puppeteer from 'puppeteer';
const firefoxBrowser = await puppeteer.launch({
browser: 'firefox', // WebDriver BiDi is used by default.
});
const chromeBrowser = await puppeteer.launch({
browser: 'chrome',
protocol: 'webDriverBiDi', // CDP would be used by default for Chrome.
});
Use the same page APIs you otherwise use in Puppeteer, but confirm that each API is supported over the selected protocol. If a Puppeteer operation is unavailable over BiDi, Puppeteer may throw UnsupportedOperation. Consult the Puppeteer WebDriver BiDi support guide for its current supported and unsupported method lists; the Next documentation can change.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Rank #2
What works—and what may not
The Puppeteer guide lists support for many common workflows, including navigation, page evaluation, selectors and locators (with an ARIA exception), input, dialog handling, screenshots and PDF generation with parameter limits, permissions, and request interception. It also identifies unsupported operations and gaps involving areas such as emulation, CDP-specific APIs, accessibility, coverage, tracing, and request or response helpers.
- Check API-level coverage: Match the guide’s supported and unsupported lists against methods your test suite actually calls. A broad feature category may still have parameter limits or exceptions.
- Check browser and protocol together: Firefox’s default and Chrome’s default are different; selecting BiDi for Chrome does not imply identical support across browsers.
- Keep the standard’s status in mind: the W3C document is a Working Draft and may be updated, replaced, or obsoleted.
For a project that depends on CDP-only features, retaining Chrome’s default CDP protocol may be more practical. If you need BiDi, test the exact browser versions and Puppeteer methods used by your application rather than assuming full parity.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Or skip the browser setup
If your goal is simply to capture website screenshots, ScreenshotNeo offers a one-request screenshot API rather than requiring you to launch and configure a browser through Puppeteer. For example, this cURL request saves a WebP screenshot of Stripe:
Rank #3
- Used Book in Good Condition
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for request options. ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, and failed loads are never billed. It also provides an MCP server so AI agents can take screenshots. The free plan includes 1,000 screenshots a month with no card, and paid plans start at $5 for 3,000 screenshots. Sign up for free.
Frequently Asked Questions
Does enabling WebDriver BiDi in Puppeteer make every browser operation event-driven?
No. BiDi provides a bidirectional command-and-event connection, but individual operations and events depend on the browser and Puppeteer’s support for the selected protocol.
Is WebDriver BiDi a finalized W3C standard?
No. The W3C specification identified here is a Working Draft.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




