Back to Blog
Original

Obscura: The Rust Headless Browser Built for AI Agents (Tested)

Obscura is an open-source Rust headless browser for AI agents and web scraping: 34MB of memory, a single binary, V8 JavaScript and Chrome DevTools Protocol compatibility. We benchmarked it live on a production VPS and traced how it inspired Cloudflare's agent-first Kitesurf browser.

5 September 202616 min read
Obscura: The Rust Headless Browser Built for AI Agents (Tested)

Last Updated: 5 September 2026

Obscura is an open-source headless browser engine written in Rust, designed for AI agents and web scraping, and it costs about one-sixth the memory of headless Chrome: we measured 34MB of peak RAM in our own live test on 5 September 2026, against the 200+MB that headless Chrome typically consumes per instance. Since its repository appeared on 13 April 2026, it has collected 24,998 GitHub stars, 1,834 forks and 60 contributors, according to the GitHub API. That is an average of roughly 170 new stars every day for five months.

The project matters beyond its raw numbers because of who leaned on it. According to Cloudflare's engineering blog, the team behind Kitesurf, Cloudflare's new agent-first browser, "got the initial inspiration from obscura" and began by porting it to Cloudflare Workers with the help of an AI agent. When a company that operates one of the world's largest edge networks credits a five-month-old Rust project as the seed of its browser strategy, the underlying thesis deserves a close look.

So we gave it one. This deep dive covers what Obscura is, why AI agents need a different kind of browser, how its numbers hold up under independent testing on a production VPS, what its architecture looks like inside, and where it fits for growing businesses running agent workloads. All benchmark figures are attributed, and every test result in the live sections is ours.

What Is Obscura?

Obscura is a headless browser engine for web scraping and AI agent automation, written in Rust and released as a single roughly 70MB binary with no dependency on Chrome or Node.js. It runs real JavaScript through V8, supports the Chrome DevTools Protocol, and works as a drop-in replacement for headless Chrome with Puppeteer and Playwright. It captures screenshots, screencasts live pages and exports PDFs without starting Chromium, and it is licensed Apache-2.0 with no feature gating.

The feature list reads like a direct answer to agentic workloads. A CLI fetch command for one-page extraction with JavaScript evaluation. A scrape command that fans out across many URLs with a concurrency of 25 through a separate worker process. A serve command that exposes a Chrome DevTools Protocol endpoint so existing Puppeteer and Playwright scripts connect without rewrites. An MCP server so AI agents can drive pages natively. Built-in SSRF protection that blocks fetches to private and internal IP addresses by default, including DNS-resolution-time checks.

According to the GitHub API, the repository was created on 13 April 2026, reached 24,998 stars and 1,834 forks by 5 September 2026, has 60 contributors, and its current stable release is v0.2.1, published 23 August 2026. The project also carries a Trendshift trending-repository badge and lists proxy sponsors such as NodeMaven and ProxyEmpire, which signals where its commercial gravity lies: scraping fleets and agent runtimes.

Why Do AI Agents Need a Different Browser?

Standard browser engines were designed for humans, not agents. They carry tabs, themes, extensions and visual polish that an AI does not need, and that overhead makes giving every agent its own browser instance prohibitively expensive. Agents instead need low token counts, machine-readable structure, scalability and low cost. This is the core argument Cloudflare made when launching Kitesurf, and it is the design brief Obscura was built against.

Cloudflare's engineering blog put it bluntly in its Kitesurf announcement: "browser engines like Chromium were built for humans, not agents, and they come with overhead that AI models simply do not need. They consume so much memory and compute that providing every agent with its own instance is prohibitively expensive." The post adds that agents do not care about 60-fps scrolling, and that structured, machine-readable content matters more than pixel-perfect rendering.

Read that against what agents actually do when they browse. An agent fetching a page wants the text, the links, maybe a screenshot for a vision model. It does not want a compositor, a GPU pipeline, an extension host and a settings sync service idling through 200MB of RAM each time. When your agent fleet scales from 10 pages a day to 10,000, memory per instance becomes the number that sets your infrastructure bill.

That reframing is why 2026 suddenly has an "agent-first browser" category at all: Cloudflare's Kitesurf runs in V8 isolates on Workers, and Obscura runs as a single lean binary on your own hardware. Same thesis, two deployment models.

Obscura vs Headless Chrome: What the Numbers Say

According to the Obscura README's comparison table, Obscura uses about 30MB of memory versus 200+MB for headless Chrome, ships a 70MB binary versus 300+MB, loads pages in 85ms versus roughly 500ms, and starts instantly versus Chrome's roughly 2 seconds. It also lists built-in anti-detection where stock Chrome has none, plus Puppeteer and Playwright support on both sides. These are the project's own benchmarks, so we treated them as claims to verify, not facts.

MetricObscura (README)Headless Chrome
Memory per instance30 MB200+ MB
Binary size70 MB300+ MB
Page load85 ms~500 ms
StartupInstant~2 s
Anti-detectionBuilt-in (stealth builds)None stock
Puppeteer / PlaywrightYes, via CDPYes
JavaScript engineReal V8V8
Obscura versus headless Chrome benchmark comparison: memory 30MB versus 200MB, binary 70MB versus 300MB, page load 85ms versus 500ms, startup instant versus 2 seconds, with Flowtivity verification markers
README benchmarks on the left of each pair, our verified results marked in gold.

Two caveats keep this honest. First, these are the project's own numbers from its own benchmark suite, which lives in a separate repository. Second, microbenchmarks measure best-case pages. Our real-world tests, next, show seconds rather than milliseconds once JavaScript and rendering enter the picture. The memory claims, however, held up precisely.

We Tested It: Live Results on a Production VPS

We downloaded the Obscura v0.2.1 x86_64 Linux binary and ran four tests on a production VPS on 5 September 2026, measuring wall-clock time and peak resident memory with GNU time. Results: a cold fetch with JavaScript evaluation completed in 0.13 seconds at 34MB peak RAM, a JavaScript-heavy Hacker News text dump took 1.65 seconds at 41MB, a full-page screenshot of a real business site took 10.0 seconds at 99MB, and a three-URL parallel scrape finished in 16.5 seconds at 68MB total. The memory claims verified. Speed claims are best-case numbers.

TestCommandWall clockPeak RSS
Cold fetch + JS evalfetch example.com --eval0.13 s34 MB
JS-heavy page dumpfetch news.ycombinator.com --dump text1.65 s41 MB
Full render + screenshotfetch flowtivity.ai -s shot.png10.0 s99 MB
Parallel scrape, 3 URLsscrape u1 u2 u3 --concurrency 316.5 s total68 MB
Flowtivity live benchmark results for Obscura: cold fetch 0.13 seconds at 34MB, JavaScript page 1.65 seconds, screenshot render 10 seconds at 99MB, parallel scrape 16.5 seconds
Four tests, one afternoon, one conclusion: the memory claims are real, and rendering costs more.

Three observations worth flagging. The cold-fetch number is the headline: process start, DNS, TLS, fetch, JavaScript evaluation and exit in 130 milliseconds. The rendering test is the honest counterweight: full CSS layout and paint pushed memory to 99MB and took 10 seconds on a real site, though still roughly half of typical headless Chrome. And in the parallel scrape, the slowest URL was our own website, not the engine: the JSON output arrived clean and structured with per-URL timings and worker assignments.

How Did a Five-Month-Old Project End Up Inside Cloudflare?

According to Cloudflare's engineering blog for Kitesurf, the Cloudflare team "got the initial inspiration from obscura, a headless engine written in Rust for AI automation," then ported it to Cloudflare Workers with the help of an AI agent to prove the concept. That prototype evolved into Kitesurf, an agent-first browser that runs entirely on Workers and is free while in beta inside Cloudflare's Browser Run product. Obscura's quiet Hacker News launches and its starring role in a 221-point Cloudflare launch tell the story of infrastructure credibility travelling through adoption.

Obscura timeline from April 2026 repository creation to 25K stars in September 2026, including the Cloudflare Kitesurf launch on 7 August 2026
Five months from zero to 25K stars, with the Cloudflare Kitesurf launch as the inflection point.

The Hacker News record sharpens the point. According to Hacker News search data via Algolia, Obscura's own "Show HN" launch on 24 April 2026 drew 15 points, and a follow-up in May drew 5. Cloudflare's Kitesurf announcement on 7 August 2026 drew 221 points and 63 comments. The lesson for builders is uncomfortable and useful: the market rewards the validated version of an idea, and being the inspiration is still a very good position to hold, especially with the credit publicly attached in Cloudflare's post.

What Is Inside the Obscura Architecture?

Obscura is a single Rust binary containing a real V8 JavaScript engine, an independent rendering engine covering block, inline, flex, grid, table, float and transform layout, an optional stealth transport built on BoringSSL, and a default SSRF guard that blocks private and internal IP ranges. It exposes a Chrome DevTools Protocol server so Puppeteer, Playwright and MCP-connected agents can drive it, and it ships a separate worker binary for parallel scraping at a concurrency of 25.

Obscura architecture diagram: single Rust binary containing V8 JavaScript, rendering engine, stealth transport and SSRF guard, serving CLI commands and CDP clients including Puppeteer, Playwright and MCP
One binary, four subsystems, three client protocols. No Chrome, no Node.js, no dependencies.

Three design choices stand out for anyone operating agent infrastructure. First, protocol compatibility over purity: by speaking CDP, Obscura becomes a swap-in backend for the enormous body of existing Puppeteer and Playwright code, which removes the migration excuse entirely. Second, honest build variants: release archives come in four flavors, render-only, render-plus-stealth, no-render and no-render-stealth, so a text-scraping fleet never pays the rendering tax. Third, security defaults that assume misuse: SSRF protection on by default, with an explicit flag required to reach private networks, is exactly the posture you want in tooling that AI agents will drive.

The Fleet Economics: What 34MB Buys at Scale

On one 8GB VPS with roughly 7GB usable after OS overhead, headless Chrome at 200+MB per instance supports about 35 concurrent sessions, while Obscura at our measured 34MB supports roughly 200. That is approximately 6x the session density on identical hardware, which matters because memory is the binding constraint on both scraping fleets and per-agent browser sandboxes. Our arithmetic assumes text-mode instances; render-heavy pages peaked at 99MB in our test.

Fleet economics comparison: headless Chrome fits about 35 concurrent sessions on an 8GB VPS versus roughly 200 for Obscura at 34MB per instance, about 6 times the density
Our arithmetic, not their marketing. Each dot is one concurrent browser session.

Translate that into agent operations. An AI agent that browses as part of its workflow needs a browser session per task. At Chrome's weight, a modest fleet of 100 concurrent browsing agents needs three mid-size servers doing nothing but hosting Chrome. At Obscura's weight, the same fleet fits on one with headroom. For teams priced out of agent-browser products, self-hosting a lean engine is the difference between a hobby and a margin.

What Should Growing Businesses Use It For (and What Should They Avoid)?

The responsible core use cases are monitoring and extraction at your own risk tolerance: price and competitor monitoring, public-data research pipelines, SEO and content auditing, PDF generation, screenshot verification of deployments, and giving internal AI agents a browsing tool through MCP. Avoid anything that violates a site's terms of service, evades access controls unlawfully, or scrapes personal data without a lawful basis. Stealth features reduce false-positive bot blocking for compliant monitoring; they are not a licence to ignore rules.

Use caseFitNotes
Competitor and price monitoringStrongLow memory makes frequent runs cheap
Content and SEO audits at scaleStrongDump text, links and assets in structured form
Agent browsing via MCPStrongAgents get a real JS-capable browser tool
Screenshots and PDF pipelinesGoodRender engine still young; expect visual diffs
Puppeteer/Playwright migrationsGoodCDP compatibility keeps scripts unchanged
Anything against site terms or the lawAvoidStealth is not permission; respect ToS, robots and rate limits

On the stealth question, a straight position: anti-detection features exist in this category because indiscriminate bot filtering blocks legitimate monitoring, and compliant scrapers get caught in the crossfire. Using them to keep a lawful, rate-limited monitoring pipeline alive is defensible. Using them to evade a site's deliberate access controls is not something we advise, build or help with. Apache-2.0 code carries no ethics, operators do.

How Do You Get Started With Obscura in Five Minutes?

Download the single binary for your platform from GitHub releases, extract it, and run a cold fetch with a JavaScript eval to verify the toolchain. Then run a real extraction with dump modes, start the CDP server on port 9222, point existing Puppeteer or Playwright scripts at it, and scale out with the parallel scrape command. No Chrome, no Node.js, no package installs. Docker users can alternatively pull the official 57MB compressed distroless image.

The full command sequence, tested by us:

  • curl -LO .../obscura-x86_64-linux.tar.gz && tar xzf obscura-x86_64-linux.tar.gz
  • ./obscura fetch https://example.com --eval "document.title"
  • ./obscura fetch https://example.com --dump text --output page.txt
  • ./obscura serve --port 9222 then point Puppeteer at ws://127.0.0.1:9222/devtools/browser
  • ./obscura scrape url1 url2 url3 --concurrency 25 --eval "document.title" --format json

One operational note from the field: keep obscura and obscura-worker in the same directory, because the parallel scrape command depends on the worker. And if you test against your own local dev servers, expect the SSRF guard to block private ranges until you pass --allow-private-network. That is a feature, not friction.

What Are the Limitations and Risks?

Obscura is a v0.2.1 project five months into its life, with an independent rendering engine whose README candidly warns that long-tail CSS, some web APIs, media playback and font rendering may differ from Chromium. It has 81 open issues, a fast-moving codebase, and its hosted cloud is still a waitlist. Treat it as excellent infrastructure for text-first extraction and agent browsing, and verify rendering output before trusting it for pixel-sensitive work.

The honest risk register for a business adoption decision: rendering fidelity is the big one, since an independent engine will not match Chromium pixel-for-pixel on every page, and the README says as much directly. Project maturity is second: five months, v0.2.x versioning and 60 contributors is remarkable momentum but not yet a decade of production hardening. Third, ecosystem dependence: if your stack needs Chrome-specific behaviours, browser extensions or media playback, this is not your engine yet.

Our suggested adoption posture is boring and effective: pilot it on text-extraction and monitoring workloads where correctness is verifiable, keep Chromium in reserve for rendering-critical paths, and benchmark both on your own pages rather than trusting either side's marketing. We did exactly that before writing this sentence.

Obscura FAQ

What is Obscura?

Obscura is an open-source headless browser engine written in Rust for web scraping and AI agent automation. It ships as a single roughly 70MB binary, runs real JavaScript through V8, speaks the Chrome DevTools Protocol and works with Puppeteer and Playwright out of the box. It is Apache-2.0 licensed.

Is Obscura free and open source?

Yes. According to the project README, the engine is Apache-2.0 with no feature gating, ever. A hosted Obscura Cloud with managed infrastructure and residential proxies is on a waitlist.

How does Obscura compare with headless Chrome?

According to the project's README: 30MB versus 200+MB memory per instance, 70MB versus 300+MB binary, 85ms versus roughly 500ms page loads, and instant versus roughly 2-second startup. Our independent test verified the memory claim at 34MB peak RSS on a cold fetch.

What is the connection between Obscura and Cloudflare Kitesurf?

Cloudflare's engineering blog states the Kitesurf team "got the initial inspiration from obscura" and ported an early version to Workers with the help of an AI agent. Kitesurf is Cloudflare's agent-first browser, free while in beta in Browser Run.

Can I use Obscura with Puppeteer or Playwright?

Yes. Start obscura serve to expose a CDP endpoint on port 9222, connect with puppeteer.connect() or Playwright's connectOverCDP(), and existing scripts generally run unmodified.


Want an agent stack like this in your business? Flowtivity designs and operates agentic workflows for growing businesses: browsing agents, monitoring pipelines and the 15/80/5 operating model that keeps humans in charge of judgment. Book a discovery call and bring the workflow that annoys you most.

Written by AJ Awan. Former EY management consultant, TOGAF certified enterprise architect, founder of Flowtivity. Live benchmarks run on a production Linux VPS on 5 September 2026 using the public v0.2.1 release. Repository and adoption data from the GitHub API and Hacker News (Algolia) on the same date.

Want AI insights for your business?

Get a free AI readiness scan and discover automation opportunities specific to your business.