BrowserGateway
Operating

Client & Provider Compatibility

Which clients and provider categories are known to work end-to-end through the gateway.

Which clients and provider categories are known to work end-to-end through the gateway. The gateway is protocol-agnostic at the byte level, so anything speaking CDP or the Playwright wire protocol over WebSocket should work, this page lists what is exercised in the release suite.

Clients

ClientSupportNotes
Puppeteer (puppeteer-core)Fullpuppeteer.connect({ browserWSEndpoint }) works against every provider category below.
Playwright (playwright-core)FullUse chromium.connect(wsEndpoint) for Playwright-server providers, chromium.connectOverCDP(wsEndpoint) for CDP endpoints. Version pinning still applies for Playwright-server.
StagehandFullUses Playwright under the hood, so anything true of Playwright is true here.
browser-useFullUses Playwright.
chromedp (Go)FullUses raw CDP. Point at ws://gateway:9500/v1/connect like any other CDP endpoint.
MCP clients (Claude Code, Cursor, Windsurf)Full via the built-in MCP serverAlso works via Playwright MCP pointed at the gateway.

Providers

Provider categorySupportNotes
Self-hosted runtime (browserserve)FullThe only category safe for multi-profile write-back on a single slot. Auto-detected, capacity is host-derived.
Self-hosted Chrome (--remote-debugging-port)FullPoint at http://host:9222, the gateway auto-discovers the CDP path.
Self-hosted Playwright serverFullClient and server Playwright versions must match exactly.
Any WebSocket CDP endpointFull, including saving profilesOn a provider that reuses browsers, leftovers from earlier sessions can be saved with a profile. See Profiles → Providers And Profiles.

Any provider that speaks CDP over WebSocket should work. The gateway probes each provider on registration and surfaces detected capabilities in the dashboard under Providers.

Feature Support By Provider Category

FeatureSelf-hosted runtimeExternal CDP
Byte-level relay + routingYesYes
Failover / cooldown / weighted routingYesYes
Profile inject (cookies + localStorage)Yes, any profileYes, only the pinned profile
Profile inject (IndexedDB + service workers)YesNo, CDP has no wire format for these
Profile capture-on-navigate (multi-origin)YesYes
multiProfile: true (many profiles per slot)YesRejected when added or edited, turned off at startup
Session replay (?session_record=true)YesYes when the provider supports Page.startScreencast
Live playground (WS /v1/live)YesYes
Read-only profile sessions (?readOnly=1)YesYes
Automatic residue detectionN/A (fresh session by construction)Yes, HTTP 409 on cross-profile residue

Known Limitations

  • Session reconnection works with Puppeteer and raw CDP clients. Playwright destroys contexts on disconnect, so it does not survive a reconnect. See Session Reconnection.
  • REST endpoints (/v1/screenshot, /v1/content, /v1/scrape) get their browsers by connecting to the gateway's own /v1/connect, so they are routed, queued and failed over like any other connection. A request that names a provider is pinned to it and does not fail over. The pool keeps those browsers open between requests (see Session Pool).
  • Non-Chromium engines (Firefox, WebKit) are not supported. CDP is Chromium-specific.

On this page