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
NetworkTrackerprunes completed requests and resets on navigation