Use the browser automation API you already know, with a managed Mimic runtime and typed Mimic capabilities beside it. Browser, Context, Page and Locator objects come from the selected framework. The SDK does not imitate their APIs.
The latest published SDK release is 0.1.1, available from npm, PyPI, NuGet, Maven Central, crates.io, RubyGems, Packagist, and the Go module proxy. Release notes describe the current release. GitHub source installation remains available through each language's native package manager or build tool.
Install the Node package:
npm install mimic-browser playwright-core@1.63.0The command installs the optional Playwright client used below. Puppeteer uses the separate
puppeteer-core@25.10.0 client and mimic-browser/puppeteer import. Both clients
remain optional. The core package never installs a framework for you.
Git installation also works and compiles the package automatically.
import { launch } from "mimic-browser/playwright";
const session = await launch();
try {
const context = await session.newContext();
const page = await context.newPage();
await page.goto("https://example.com");
console.log(await page.title());
console.log(await session.mimic.getVersion());
} finally {
await session.close();
}The first launch installs the exact verified runtime into a persistent OS cache. Later launches verify and reuse it offline. Each launch owns a separate browser process. Importing a package neither downloads nor starts anything.
For Python:
python -m pip install mimic-browser
python -m pip install playwright==1.63.0from mimic.playwright.sync_api import launch
with launch() as session:
context = session.new_context()
page = context.new_page()
page.goto("https://example.com")
print(page.title())
print(session.mimic.get_version().version)Prefer managing the runtime yourself? Ordinary CDP remains a first-class path:
import { chromium } from "playwright-core";
const browser = await chromium.connectOverCDP("http://127.0.0.1:9222");
const context = await browser.newContext();
const page = await context.newPage();
await page.goto("https://example.com");
await context.close();
await browser.close(); // Disconnects this externally connected Playwright client.| Language | Native package / module | Optional framework integration |
|---|---|---|
| JavaScript / TypeScript | mimic-browser |
Playwright, Puppeteer |
| Python | mimic-browser, import mimic |
Playwright sync/async; optional Pyppeteer |
| C# / .NET | mimic-browser |
Playwright, PuppeteerSharp, separate adapter packages |
| Java / Kotlin | boo.mimic:mimic-browser |
Playwright; Kotlin uses the JVM API |
| Go | github.com/mimic-browser/sdk/go |
Rod, chromedp subpackages |
| Rust | mimic-browser |
chromiumoxide feature |
| Ruby | mimic-browser |
Ferrum, optional require |
| PHP | mimic-browser/sdk |
chrome-php, optional adapter |
Framework dependencies are explicit and optional. Their genuine APIs retain their own conventions; Mimic extensions use camelCase in JS/Java/PHP, snake_case in Python/Ruby/Rust, and exported PascalCase in Go/.NET.
- Pin an exact release or commit a runtime lock with original manifest bytes,
source identity and archive/executable hashes. No
latestsubstitution. - Use
MIMIC_RUNTIME_VERSION,MIMIC_EXECUTABLE_PATH,MIMIC_RUNTIME_DIR, andMIMIC_DOWNLOAD=0with the shared selection rules. - Preinstall verified archives for offline CI. All languages share the cache, installation lock, receipt and lease formats.
launchowns startup, readiness and teardown.connectattaches to an existing endpoint and preserves its process and other clients.- Inspect and verify installations; prune only explicitly selected unused artifacts. Live or unverifiable leases block pruning.
Current binary artifacts target Windows x64 and Linux x64 with glibc 2.39+. An unsupported host fails before a download. Framework client support is qualified separately from runtime host packaging.
The packaged runtime is v0.2.4. It includes the context configuration bridge used by managed environment profiles. See supported integrations for client versions and runtime capability boundaries.
The canonical schema generates models and typed commands for profiles, media, resource policy, snapshots, traces and diagnostics. Use integration context helpers to apply capabilities before user pages exist; use the page-scoped extension client for page commands.
Media factories discover private camera/microphone sources in the context being configured, then assign independent public device labels, logical identities and groups. Capture remains lazy and permission-controlled.
The experimental dispatcher is primarily for contributors testing a new runtime command before a schema/package release:
await session.mimic.experimental.newContributorCommand({ enabled: true });
await session.mimic.experimental.call("newContributorCommand", {
enabled: true,
});All eight languages provide the explicit raw call. Dynamic member syntax is an
additional convenience where the language supports it. Exact wire spelling,
omitted values, explicit null, session scope and error code/message/data survive
unchanged. It performs no schema discovery or automatic retries. A cancelled
call does not roll back a command already sent.
Contributor workflow explanations belong in contributor/API documentation; do not copy the feature proposal into runtime changelogs. A real public contract change still needs an accurate, concise release note in the owning package.
The source home is the mimic-browser/sdk monorepo. Runtime binaries
remain in mimic-browser/runtime; the website remains in mimic-browser/website.
An SDK release intentionally selects changed, qualified native packages.
A runtime release runs compatibility qualification; it does not bump, rewrite
or publish SDK packages, defaults or user locks.
Read architecture, contributing, binding conventions and the release tooling. The existing Prosperity license is included in each distribution.