Lightweight browser automation without Chromium.
JavaScript automation and web scraping with Playwright, Puppeteer and CDP.
Quick start · Benchmarks · Download · Documentation · CDP support
mimic optimize --name shop -- node scraper.js
mimic --profile shopOptimize searches locally for unnecessary network acquisition using your ordinary workload assertions, then saves a reusable empirical profile. See the getting-started guide and safety limits. No language-specific SDK is required.
Mimic is a source-available public beta for JavaScript automation and web scraping. It is a lightweight browser execution runtime that loads resources, executes JavaScript in V8, maintains DOM/style/layout state and exposes it through the Chrome DevTools Protocol—without embedding Chromium, opening a window or rendering pixels.
MIMIC stands for “Mimic Implements Modern Internet Compatibility.”
- Use familiar Playwright, Puppeteer and CDP clients.
- Run independent Pages concurrently with one event loop per Page.
- Observe canonical DOM, navigation, CSSOM and geometry state.
- Use native HTTP, HTTPS and SOCKS5 proxy profiles.
- Capture camera/microphone streams and transport H264/Opus through WebRTC.
- Bind private capture sources to coherent camera profiles, including seeded physical-class presets.
- Ship one standalone executable; users do not need Chrome, Go or Rust.
Mimic targets observable Chrome 152 behavior. It is a public beta: compatibility is workload-dependent, and unsupported browser surfaces remain explicit.
Download a binary from the latest release, then start the CDP endpoint:
./mimic.exe -listen 127.0.0.1:9222./mimic -listen 127.0.0.1:9222Or run a clean source checkout on Windows or Linux amd64:
git clone https://github.com/moreveal/mimic.git
cd mimic
go run ./tools/runmimic -listen 127.0.0.1:9222The source build requires Go 1.26.4+, Rust/Cargo, CGO and a C compiler. The released executable has no Go/Rust/Cargo dependency. See setup and platform requirements or the release build guide.
import { chromium } from "playwright-core";
const browser = await chromium.connectOverCDP("http://127.0.0.1:9222");
const context = browser.contexts()[0];
const page = await context.newPage();
await page.goto("https://books.toscrape.com/", { waitUntil: "load" });
console.log(await page.locator("h1").innerText());
await browser.close();This example reads All products from Books to Scrape,
a public web-scraping sandbox. External sites can change or become unavailable;
check the response and DOM if the expected element is missing.
The runnable profile example processes 100 URLs
through separate Contexts. Each job gets a freshly generated profile, its own
cookies and optionally its own proxy. It closes its Context after extraction.
Eight live Pages is the default. Set CONCURRENCY=100 HOLD_ALL_LIVE=1 to hold all
100 Pages simultaneously until every extraction finishes; this requires much
more RAM.
// Inside a CDP browser connection; see examples/profile-contexts.mjs for the
// complete connection, navigation, extraction and error-handling code.
const jobs = Array.from({ length: 100 }, (_, index) => ({
cookie: { name: "session", value: accountSessions[index], url: targetURL },
proxy: proxies[index], // { server: "socks5://host:1080", username, password }
}));
await Promise.all(jobs.map(async (job) => {
const { browserContextId, profileId } = await cdp.send("Mimic.createContext", {
...(job.proxy ? { proxy: job.proxy } : {}),
disposeOnDetach: true,
});
try {
await cdp.send("Storage.setCookies", {
browserContextId,
cookies: [job.cookie],
});
await scrapeInContext(cdp, browserContextId, profileId);
} finally {
await cdp.send("Target.disposeBrowserContext", { browserContextId });
}
}));Provide one proxy per job if every route must differ. profile is an opaque,
portable token that can be saved and reused; manual settings require explicit
Mimic.importProfile with mode: "manual". See the
profile contract and limits. Generated profiles
select paired GPU/font observation recipes, while Chrome 152 identity and the
network wire recipe remain fixed. Different seeds can select the same recipe.
See the runnable examples, supported CDP surface, and snapshot/capture guide. The Crawlee compatibility checkpoint links to the tested fork and its bounded crawler example.
September 29 checkpoint against headless Chrome 152.0.7977.82 on Windows 11 x64, Intel i7-14700KF, 31.83 GiB RAM:
8.3× less ready RSS. 5.5× less active RSS and 6.0× throughput at 50 static Pages. All 12 correctness gates and 360 measured single-Page attempts passed. The headline compares the completed 50-Page static series. These are fixture- and machine-specific results, not universal claims; the full matrix includes workloads where Chrome is faster.
Results and methodology · Full report · Reproduce · Performance history
Mimic reproduces browser observations needed by automation; it is not a visual browser. It does not render screenshots or provide a complete Chromium/Web API surface. Host fonts and OS services can affect observable results. CDP has no authentication and is intended for trusted local clients.
Evaluate your workload against the compatibility notes and CDP matrix.
- Getting started and troubleshooting
- Product vision
- Architecture
- CDP compatibility
- Chrome oracle policy
- Performance report
- Contributing
Website: mimic.boo
Feedback: DM moreveal on Discord.
Mimic is source-available under the Prosperity Public License 3.0.0. Noncommercial use is free; commercial use has a 30-day trial. Third-party components retain their own licenses. Contributions require acceptance of the Mimic CLA.

