// DOCUMENTATION

Profiles & fingerprints

Browser profiles for consistent UA, Sec-CH-UA, canvas, WebGL, fonts, and cookies.

Protocols

Koko browser profiles bundle fingerprint signals — user agent, Client Hints, canvas/audio/WebGL probes, fonts, voices, and cookie seeds — so automation sessions present consistent identity across runs.

Profile location

browser/profiles/
  chrome-macos-catalina.json
  chrome-macos-sonoma.json
  chrome-windows-11.json
  chrome-local-huys-macbook-pro.json
  assets/          # per-profile probe baselines
  sessions/        # persisted cookie jars

Profile structure

Each profile JSON includes:

  • navigator — userAgent, platform, hardwareConcurrency, languages
  • userAgentData — Sec-CH-UA brands and platform metadata
  • screen — viewport and color depth
  • webgl, canvas, audio — probe references into assets/
  • policies — e.g. google-search transport rules

Launch with profile

# CDP server
zig-out/bin/koko serve \
  --browser-profile chrome-macos-catalina \
  --host 127.0.0.1 --port 9222

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

Cookie persistence

Use --cookie-jar to read/write session cookies across runs. Pair with captureSessionState() / restoreSessionState() for storage snapshots.

Fingerprint probes

ProbeCommand
CreepJS vs Chromenpm run test:creepjs:compare
CreepJS local sectionsnpm run test:creepjs:local
BrowserLeaksnpm run test:browserleaks
Profile CDP smokenpm run test:profile -- --profile chrome-macos-catalina

Google Search policy

Profiles with google-search policy use real Chrome network transport via scripts/chrome-google-transport.mjs. See repo docs/tls-impersonate.md and google-search-debug/.