
Anyone who’s done large-scale web scraping knows that sinking feeling. Fire up 10 Chrome headless instances, and your 32GB RAM starts screaming for mercy.
The analogy is hard to miss. You want to make instant noodles, but somehow you’ve set the entire kitchen on fire. Great heat. Terrible trade-off.
A Rust project that popped up recently flips this dynamic on its head. It’s called Obscura, a headless browser purpose-built for AI agents and web scraping. It hit 12K GitHub stars in under a month.
Raw numbers first:
| Metric | Headless Chrome | Obscura |
|---|---|---|
| Memory Usage | 200MB+ | 30MB |
| Binary Size | 300MB+ | 70MB |
| Page Load | 500ms | 85ms |
| Startup Time | ~2 seconds | Instant |
An 85% memory cut. Not from tuning — from not shipping things you never needed in the first place.
Replacing the Supermarket With a Vending Machine
Chrome is a general-purpose browser. Video decoding. PDF rendering. Extension store. Sync service. Auto-update.
These features matter when you’re browsing the web. For scraping, they’re dead weight. You walk into a convenience store for a bottle of water, and Chrome hauls in the entire Walmart inventory.
Obscura takes a cleaner approach. Write a browser kernel from scratch in Rust. Keep the rendering engine and JavaScript runtime. Ditch everything else.
The result is a 70MB standalone binary. No Node.js. No Chrome dependencies. No runtime of any kind. Download, extract, run. Three steps and you’re done.
Why Rust Matters Here
Chrome’s multi-process architecture gives good isolation, but each process carries fixed overhead. It’s like putting every worker in a private office — looks professional, but the rent is brutal.
Rust’s async runtime and zero-cost abstractions let Obscura pack multiple browsing contexts into far fewer system threads. Private offices become a shared floor plan.
The numbers tell the story: a 32GB server maxes out at roughly 160 Chrome instances. Switch to Obscura, and you’re looking at over 1,000.
This isn’t incremental optimization. Different architecture, different outcome.
# Installation: download one file, extract, run
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-aarch64-macos.tar.gz
tar xzf obscura-aarch64-macos.tar.gz
./obscura fetch https://example.com --eval "document.title"
Anti-Detection: A Different Face Every Visit
The scariest thing in scraping isn’t bad performance. It’s getting caught.
Headless Chrome looks like a real browser but leaves fingerprints everywhere. Check navigator.webdriver. Inspect GPU fingerprints. Compare Canvas rendering differences. Probe the audio stack. Websites have a thousand ways to spot automation.
Obscura goes hard on stealth:
- Randomized browser fingerprints per session. GPU, Canvas, audio context, battery status — all different every time
- Blocks 3,520 tracking domains by default
- Hides
navigator.webdriver, masquerading as a real Chrome instance - Rewrites native JavaScript functions so behavior-detection scripts come up empty
Translation: every time you walk into the same store, you wear different clothes, change your gait, and speak with a different accent. The security guard stands no chance.
CLI-First When You Just Need Data
No need for a full Playwright API when you’re doing quick extractions. The CLI has you covered:
# Get the page title
obscura fetch https://example.com --eval "document.title"
# Dump all links
obscura fetch https://example.com --dump links
# Wait for dynamic content, then grab rendered HTML
obscura fetch https://news.ycombinator.com --dump html --wait-until networkidle0
# Parallel scrape 25 pages, output as JSON
obscura scrape url1 url2 url3 ... \
--concurrency 25 \
--eval "document.querySelector('h1').textContent" \
--format json
--concurrency 25 is a number you wouldn’t dream of with Chrome. Obscura handles it without breaking a sweat.
Keep Your Playwright Code
Here’s the best part: Obscura speaks Chrome DevTools Protocol natively.
Your existing Playwright or Puppeteer scripts work with minimal changes:
import { chromium } from 'playwright-core';
const browser = await chromium.connectOverCDP({
endpointURL: 'ws://127.0.0.1:9222',
});
const page = await browser.newContext().then(ctx => ctx.newPage());
await page.goto('https://en.wikipedia.org/wiki/Web_scraping');
console.log(await page.title());
await browser.close();
Start with obscura serve --port 9222 --stealth, then connect as usual. Same API surface. Different engine — a 30MB Rust binary under the hood.
The Browser in the Age of AI Agents
Browser automation is one of 2026’s defining AI agent workloads. Agents browse pages, fill forms, extract data, click through search results — just like a human would.
In this world, you’re not running three or five browser instances. You’re running dozens, maybe hundreds, in parallel. One agent scans search results, another drills into detail pages, a third fills out forms in the background.
Chrome’s resource footprint collapses under this concurrency. Adding RAM helps, but with a 32GB cap you’re stuck at 160 instances. The ceiling is low.
Obscura lands right at this intersection. Light enough to spawn without thinking. Fast enough that startup latency is invisible. And stealthy enough that agents don’t get blocked on arrival.
Keep Your Cool
Obscura is at v0.1.2, Apache 2.0 licensed, with 49 open issues. It’s moving fast but still young.
For production use, start with non-critical workloads. CDP compatibility is solid overall, but edge-case APIs may have gaps. The project is barely a month old — give it a little runway.
Enjoyed this? Follow “Mengshou Programming” for weekly Rust and AI engineering deep dives.
Also check out Mengshou Programming’s AI Coding Assistant Service to put AI-powered development tools to work in production.
FAQ
Q: Can Obscura fully replace Headless Chrome right now?
A: It depends on the job. For screenshots, PDF export, or extension testing, Chrome is still the safer bet. For web scraping, test automation, and AI agent browsing, Obscura offers a generational leap in resource efficiency and stealth.
Q: How’s JavaScript compatibility in a Rust-based browser?
A: Obscura’s JS engine targets ES2024 compliance. Mainstream sites render fine. Pages relying on bleeding-edge Web APIs (like WebGPU) may hit compatibility gaps. The project is a month old — edge cases need time.
Q: Does the anti-detection actually work?
A: It’s effective against mainstream anti-bot services like Cloudflare and DataDome. But anti-detection is a cat-and-mouse game — no silver bullet exists. Obscura’s randomized fingerprinting strategy represents the current frontier, and it’s an order of magnitude better than running Headless Chrome unmodified.
