// DOCUMENTATION

Browser.connect()

Attach to a running CDP server or launch Koko with Browser.launch().

SDK Reference

The SDK entry point is Browser — connect to an existing CDP server or spawn Koko with a profile.

Browser.connect()

import { Browser } from "koko-sdk";

const browser = await Browser.connect("http://127.0.0.1:9222");
const page = await browser.newPage();
await page.goto("https://example.com");
await browser.close();

Equivalent to Playwright chromium.connectOverCDP(). Enables flattened target tracking by default.

Browser.launch()

Spawn Koko as a child process with profile and cookie jar — no manual serve step.

const launched = await Browser.launch({
  profile: "chrome-macos-catalina",
  cookieJar: "browser/profiles/sessions/my-session-cookies.json",
});

const page = await launched.browser.newPage();
await page.goto("https://example.com");
await launched.close();

Contexts

const context = await browser.newContext({
  viewport: { width: 1280, height: 720 },
});
const page = await context.newPage();

// Cookies
const cookies = await context.cookies();
await context.addCookies([...]);
await context.clearCookies();

// Init scripts
await context.addInitScript("window.__KOKO__ = true");

Contexts are client-side page groupings — useful for isolating cookies and init scripts across logical sessions.

Crawl worker

import { createCrawlWorker } from "koko-sdk";

const worker = await createCrawlWorker("http://127.0.0.1:9222");
const result = await worker.crawl({
  url: "https://en.wikipedia.org/wiki/Earth",
});
console.log(result.ttfexMs, result.title);

Performance notes

  • Flattened session routing reduces WebSocket overhead for multi-target workflows
  • NetworkTracker prunes completed requests and resets on navigation