// DOCUMENTATION

CDP server

Chrome DevTools Protocol server for WebSocket automation clients.

Protocols

Koko implements a CDP-compatible runtime so standard automation clients can attach over WebSocket without custom drivers.

Starting the server

For everyday use, prefer Browser.launch() from the SDK — see Quick start. Run a standalone server when you need a long-lived CDP endpoint:

koko serve --host 127.0.0.1 --port 9222

From a dev checkout: zig build run -- serve --host 127.0.0.1 --port 9222

HTTP discovery

EndpointPurpose
GET /json/versionBrowser metadata + WebSocket debugger URL
GET /json/listList open page targets
GET /json/newCreate new page target

WebSocket session

Clients connect to the webSocketDebuggerUrl from /json/version. Messages follow standard CDP JSON-RPC framing with method names like Page.navigate, Runtime.evaluate, DOM.getDocument.

Flattened target tracking

The Koko SDK enables flattened session routing by default on Browser.connect() — multiple targets can share one WebSocket with session IDs, matching modern Chromium CDP behavior.

Standard domains

  • Page — navigation, screenshots, PDF
  • Runtime — JavaScript evaluation
  • DOM — node queries, performSearch
  • Input — keyboard and mouse dispatch
  • Network — request tracking

Koko-specific domain

The custom LP namespace provides agent-oriented APIs. See LP CDP domain.

Third-party clients

Any CDP client can connect — including Playwright chromium.connectOverCDP(), Puppeteer, or raw WebSocket scripts. For Playwright-shaped ergonomics, prefer the Koko SDK.