What Is WebDriver BiDi?
WebDriver BiDi is the W3C standard for bidirectional browser automation that powers Vibium. Here's what it is, where it came from, and why it matters.
WebDriver BiDi is the W3C standard for bidirectional browser automation that powers Vibium. It blends the standardization of classic WebDriver with the real-time, event-driven communication of the Chrome DevTools Protocol — using WebSockets and JSON so a client can both command the browser and receive events it pushes back.
Where did WebDriver BiDi come from?
Browser automation has gone through three eras, and BiDi is the synthesis of the first two.
Classic WebDriver (2004 → today). Selenium pioneered browser automation, and WebDriver refined it into a clean model: a separate driver process controls the browser through a native API. It became a W3C standard in 2018, using HTTP and JSON — send a request to click a button, get a response. Simple, but fundamentally one-way: the client asks, the browser answers.
The CDP era (2017 → today). The Chrome DevTools Protocol used WebSockets instead of HTTP, enabling bidirectional communication — the browser could push events like console logs and network requests as they happened. Puppeteer (2017) and Playwright (2020) were built on it. But CDP is Chrome-specific, internal, and changes without warning — not ideal for a standard.
WebDriver BiDi (2021 → today). The W3C asked: what if we combined both? BiDi is bidirectional like CDP, standardized like WebDriver, and cross-browser by design.
How does WebDriver BiDi work?
A BiDi client and the browser hold an open WebSocket connection and exchange JSON messages in both directions:
┌─────────────┐ ┌─────────────┐
│ Client │◄───WebSocket──────►│ Browser │
│ (Vibium) │ (JSON msgs) │ │
└─────────────┘ └─────────────┘
The client sends a command:
{"id": 1, "method": "browsingContext.navigate", "params": {"url": "https://example.com"}}The browser responds:
{"id": 1, "result": {"navigation": "123", "url": "https://example.com"}}And — this is the bidirectional part — the browser can push events without being asked:
{"method": "log.entryAdded", "params": {"level": "error", "text": "Uncaught TypeError..."}}That last message is what classic WebDriver could never do. The automation tool learns about a console error the instant it happens, instead of polling for it.
Which browsers support WebDriver BiDi?
BiDi is shipping today, with support maturing across vendors:
| Browser | Status |
|---|---|
| Chrome / Chromium | Supported via chromedriver |
| Firefox | Native support (no separate driver) |
| Safari | In development |
| Edge | Supported (Chromium-based) |
The ecosystem is converging on it: Puppeteer added BiDi support in 2023, and Selenium is integrating it too.
Why does this matter for Vibium?
Building Vibium on WebDriver BiDi is a deliberate bet on standards over proprietary protocols:
- Standards-based. BiDi is governed by the W3C with input from every major browser vendor — not controlled by a single company the way CDP is by Google or Playwright is by Microsoft.
- Future-proof. As browsers improve their BiDi support, Vibium gets better for free.
- Cross-browser potential. One API, multiple browsers, as vendor support matures.
- Real-time events. Console logs, network activity, and DOM changes are pushed to the tool as they happen — which is what powers Vibium's auto-waiting and its richer data collection for AI agents.
In short, the protocol handles the hard parts; Vibium focuses on making it accessible to agents and developers. That same event-driven foundation is why Vibium can auto-wait for elements instead of sprinkling sleeps through your scripts.
Next steps
Frequently asked questions
What is WebDriver BiDi?
WebDriver BiDi is a W3C standard for bidirectional browser automation. It combines the standardization of classic WebDriver with the real-time, event-driven communication of the Chrome DevTools Protocol, using WebSockets and JSON to let a client both command a browser and receive pushed events.
How is WebDriver BiDi different from classic WebDriver?
Classic WebDriver is one-way: the client sends an HTTP request and the browser answers. WebDriver BiDi is bidirectional over WebSockets, so the browser can also push events like console logs and network activity to the client in real time, without being polled.
Why does Vibium use WebDriver BiDi?
Vibium is built on WebDriver BiDi because it is a W3C standard, not a proprietary protocol. That makes it future-proof and cross-browser by design, and its real-time events power features like auto-waiting and richer data collection for AI agents and tests.
Vibium is created by Jason Huggins. This is an independent tutorial — see the official Vibium site and GitHub repo for canonical docs.