SDKs
Node and Python launchers for Ant0 Browser: Playwright with a coherent identity, a raw CDP server, and helpers for geo, humanised input and rendering checks.
Updated Sep 7, 2026
Availability
Two ways to automate
Most scripts need no SDK at all: start a profile through the local API (or the desktop app) and connect Playwright, Puppeteer or any CDP client to the endpoint it returns. The profile's identity, proxy, cookies and extensions are already applied by the background service.
const res = await fetch("http://127.0.0.1:27100/v1/profiles/Shop%20DE/start", {
method: "POST",
headers: { authorization: `Bearer ${token}` },
});
const { runtime } = await res.json();
const browser = await chromium.connectOverCDP(runtime.cdp_url); // Playwright The SDKs are for the second case: launching Ant0 Browser directly from your own code, with an identity you choose, without the desktop app in the loop. They wrap Playwright's launcher and add the identity layer, the launch ticket, geo resolution and helpers.
Node SDK
import { launch } from "ant0-browser";
const browser = await launch({
executablePath: "/path/to/ant0-browser/chrome",
identity: { mode: "synthetic", key: "research-1" },
proxy: { server: "http://host:8000", username: "user", password: "pass" },
});
const page = await browser.newPage();
await page.goto("https://example.com");
await browser.close();
Set ANT0_BROWSER_BINARY instead of passing executablePath on every call.
Available entry points:
launch()andlaunchPersistentContext(): Playwright browsers with the identity applied.serve(): a raw CDP endpoint (cdpUrl,pid,isAlive(),close()) for other clients.launchPlan(): for supervisors that spawn the browser themselves; returns the executable, arguments, environment and user-data directory.- Native, captured and persisted synthetic identities; fingerprint-profile encoding, geometry and coherence warnings.
- Humanised input wrappers and rendering checks; optional geo (
resolveGeo()) and Widevine helpers.
Python SDK
from ant0browser import launch
browser = launch(
executable_path=r"C:\path\to\ant0-browser\chrome.exe",
identity={"mode": "synthetic", "key": "research-1"},
)
page = browser.new_page()
page.goto("https://example.com")
browser.close() The async API mirrors launch and persistent contexts:
from ant0browser.async_api import launch
browser = await launch(executable_path="/path/to/chrome", identity={"mode": "native"}) serve() and the ant0-browser-serve command give a local CDP endpoint; the
helper set matches the Node SDK (identities, templates, humanised input, rendering checks, geo,
Widevine).
Identity options
Omitting identity means native mode: the browser presents the machine
it runs on. { mode: "synthetic", key } derives a coherent identity from the key,
so the same key gives the same identity on every run. Explicit switches go under
overrides: platform, platformVersion, brand,
brandVersion, gpuVendor, gpuRenderer, hardware and display
fields, location, timezone, acceptLanguage, WebRTC, GPU and
noise controls, storageQuota, canvasBridge and tlsProfile
(snake_case in Python). Overrides take precedence over captured or synthetic profiles.
Network calls
Nothing in launch or serve leaves the machine on its own except one
loopback request to the local background service for the engine's launch ticket. The optional
helpers connect only when called:
| Helper | Endpoint | Purpose |
|---|---|---|
resolveGeo() | ip.ant0.link, through the configured proxy | Exit-IP echo so the proxy's exit is measured. Zero request logging. |
resolveGeo() | releases.ant0.link | Offline geo database (about 52 MB, cached 30 days), fetched directly, not through the proxy. |
| release install | ANT0_BROWSER_RELEASE_URL (opt-in) | Signed engine releases, verified against the key embedded in the SDK. |
Geo data attribution: this product uses the IP2Location LITE database (lite.ip2location.com); includes GeoLite2 data created by MaxMind (maxmind.com); IP geolocation by DB-IP (db-ip.com).
Known engine behaviours
- SOCKS5 with a username and password is not supported by the engine (Chromium has no such client). The SDKs refuse it; use an HTTP proxy with credentials, a SOCKS5 proxy that allows your IP, or the background service's relay by starting the profile through Ant0.
- The first cookie command after launch is slow. Chromium 149 answers the first
Storage.*CDP command about 25 seconds after launch; later calls are immediate. Give early cookie operations a 60-second budget. - Launch tickets. Engine releases from
ant0.2on refuse to start without a ticket issued by a signed-in background service; the SDKs fetch one automatically when the service is reachable. Without one the engine exits with code 90.