Obscura: The 70MB Headless Browser That Gained 15K Stars in 2 Months and Has Chrome in Its Sights

Obscura headless browser benchmark comparison with Chrome showing performance and memory usage

Writing a web scraper? Your server memory gets eaten alive — 200MB just to start. Run 10 concurrent instances? That’s 2GB gone. Try 100? 20GB of RAM, straight to the drain. And don’t forget you’re packing an entire Chrome binary into your Docker image — 500MB+ easily.

Let’s be honest: all we want is a tool that executes JavaScript and extracts page data. Why are we hauling around a full desktop browser to do it?

Meet Obscura.

What Is Obscura?

One sentence: a headless browser engine written from scratch in Rust, purpose-built for AI agents and web scraping.

Three things make it special:

  • Embedded V8 engine — runs real JavaScript, not simulations
  • Full Chrome DevTools Protocol implementation — your existing Puppeteer and Playwright code works with almost no changes
  • Single 70MB binary — no Chrome, no Node.js required. Download and run.

The project launched in April this year. In less than three months, it’s racked up 15,000+ stars and 1,000+ forks. The growth trajectory is steep.

Obscura headless browser benchmark comparison with Chrome showing performance and memory usage
Obscura vs Headless Chrome — benchmark comparison in memory usage and page load speed

By the Numbers: How Does It Stack Up Against Chrome?

Official benchmarks tell the story:

Metric Obscura Headless Chrome
Memory usage (idle) ~30 MB 200+ MB
Memory usage (loaded) ~50 MB 300+ MB
Static page load ~50 ms ~500 ms
JS dynamic page ~120 ms ~800 ms

The gap is massive. Obscura uses one-seventh the memory of Chrome and loads pages 6 to 10 times faster. Startup is essentially instant.

Run 100 scraper instances: Obscura needs 3GB of RAM. Chrome needs 20GB. At scale, that’s the difference between “it works” and “it’s not feasible.”

Why the gap? Headless Chrome was designed for human browsing — it carries the rendering pipeline, sandbox isolation, extension system, GPU processes, and everything else. Obscura was designed from day one to do one thing: execute JavaScript and extract data. No pixels need to hit a screen.

Stealth Mode: Anti-Detection Built Into the Engine

Anyone who’s done scraping knows the pain of getting caught by anti-bot detection.

Headless Chrome exposes navigator.webdriver = true by default. Sites with even basic anti-scraping measures detect it in a second. The old solution was puppeteer-extra-plugin-stealth — essentially a JavaScript patch on top of the browser. It works, barely, and has clear limits.

Obscura takes a fundamentally different approach: anti-detection is baked into the engine itself.

Compile with --features stealth and it activates a complete stealth suite:

  • Fingerprint randomization — GPU info, screen resolution, Canvas and Audio fingerprints are all randomized per session
  • WebDriver hidingnavigator.webdriver = undefined, identical to a real Chrome
  • Event spoofing — all dispatched events are marked isTrusted = true, undetectable as synthetic events
  • Native function maskingFunction.prototype.toString() returns [native code], leaving no wrapper traces
  • Tracker blocking — built-in blacklist of 3,520 tracking domains, intercepted at the request layer

These aren’t JavaScript-level patches. They’re implemented at the browser engine level. The reliability and stealth are in a completely different league.

Native AI Agent Integration

Obscura has another killer feature: a built-in MCP (Model Context Protocol) Server.

Run a single command, and Claude Desktop, Cursor, and other AI tools can directly connect with a full browser capability. It exposes 12 browser tools — navigation, click, fill forms, execute JavaScript, get page content, intercept network requests — covering virtually everything an AI agent needs to browse the web.

The old approach was Playwright MCP, which still ran a Chromium instance underneath — heavy and slow. Now, a single 70MB binary gives your AI agent web access.

Docker deployment is even simpler — the image is only 57MB.

Getting Started

Installation is straightforward, with support for Linux, macOS, and Windows:

Your existing Puppeteer code needs just one line change to switch over — modify the connection address:

Building from source is equally simple: cargo build --release. The first build takes about 5 minutes (V8 compiles from source), subsequent builds are cached.

Is It Production-Ready?

The project is still early — version v0.1.x, with the API not yet stable.

It doesn’t support Service Workers, WebAssembly, iframes, or Shadow DOM yet. CDP protocol coverage isn’t as comprehensive as Chrome’s. Complex SPAs may run into compatibility issues. Community ecosystem and documentation are still being built.

That said, for a project that hit 15K stars in two months, the growth rate says everything. The market desperately needs a lightweight headless browser solution.

The author has committed to keeping the open-source version fully featured forever (Apache 2.0 license), while also developing Obscura Cloud — a hosted version with residential proxies and infrastructure. Proxy providers like Swiftproxy and ProxyEmpire are already sponsoring the project.

If you’re doing browser automation, web scraping, or browser-based AI agents, Obscura is worth an afternoon of your time.

It doesn’t aim to replace Chrome as a full browser. It focuses on one thing: making automated browsing lighter, faster, and harder to detect. 30MB of memory, instant startup, and built-in anti-fingerprinting — in batch scraping and AI agent scenarios, these translate directly to cost savings and operational reliability.

Looking back a year from now, the lightweight headless browser space might well have Obscura out in front.

Project repo: github.com/h4ckf0r0day/obscura

By peter_lzh

Author of in-depth reviews of AI open-source tools; focuses on identifying high-value open-source projects and providing practical testing results as well as guidance for making choices.

Leave a Reply

Your email address will not be published. Required fields are marked *