Scraping#Web scraping#Browser automation
Obscura: a Rust headless browser without Chromium
Obscura is a Rust headless browser for AI agents and web scraping. It runs JavaScript without Chromium and exposes CDP for Puppeteer or Playwright.
Project facts
GitHub Ecosystem- License
- Apache-2.0
- Language
- Rust
- Stars
- 31,846
- Data checked
- 2026-11-10
Snapshot figures reflect the check date and may change over time.
When a crawler or browser agent needs the DOM, text, and JavaScript results, deploying a full graphical browser can feel like extra machinery. Obscura is a headless browser engine written in Rust. It runs page JavaScript with V8 without requiring Chromium, then exposes Chrome DevTools Protocol (CDP) for Puppeteer and Playwright clients. GitHub showed 31,846 stars on November 10, 2026; its latest release was v0.2.6.
Core features
- A standalone browser engine: Obscura implements its browser runtime in Rust and embeds V8; it does not ask users to install Chromium or Node.js alongside it. Cloudflare says Obscura inspired Kitesurf’s first prototype, which the team then tried to port to Workers; that was an engineering experiment, not adoption of the current full engine. Obscura may suit self-contained scraping and agent services, while browser support still depends on its own implementation rather than Chrome’s.
- Command-line extraction:
obscura fetchcan return a page title, text, HTML, links, an asset list, or the result of a JavaScript expression. It can also write output to a file, so a simple extraction task does not need a separate automation framework. - Dynamic-page controls: the CLI accepts page-state waits, navigation timeouts, HTTP or SOCKS proxies, and screenshot output. The README distinguishes a raw response body from content handled through the DOM and JavaScript layer, which is useful when downloading non-HTML resources such as images or JSON.
- CDP compatibility: start
obscura serveand clients can control the browser over CDP. The project includes Puppeteer and Playwright examples. Existing scripts have a clear way to try the engine, although compatibility still needs to be checked against the sites and browser APIs they actually use. - Optional rendering and stealth builds: releases include packages with rendering and no-render variants. The README also describes anti-fingerprinting and tracker blocking. Those features do not make site compatibility equivalent to Chrome; use them only within the target site’s terms and your authorization.
Typical use cases
- A self-hosted scraping service: extract text, links, or structured data from public pages and ship the browser engine beside the collector. The official Docker Hub image runs as a non-root user; its README says a mounted storage directory must be writable by UID 65532.
- Page access for an agent: first test whether a target page works with the CLI, then connect an existing Puppeteer or Playwright client over CDP when the agent needs JavaScript, DOM access, or screenshots.
- An ARM64 experiment: the latest release includes aarch64 Linux and macOS archives. The project does not specifically certify Raspberry Pi 4B, so treat that board as a Linux ARM64 target to test, not an officially supported device.
Quick start
The download and first-fetch commands below follow the project README for Linux x86_64:
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz
./obscura fetch https://example.com --eval "document.title"
The command opens the page and prints its title. To list the page’s links, replace the evaluation with the README’s --dump links example. To make the browser available to multiple clients, start obscura serve and connect over CDP.
Benchmarks
Obscura’s README reports the following page-load comparison, checked on November 10, 2026. The table does not specify the test machine, version pairing, or measurement method, so treat it as a project-reported initial comparison rather than a promise for an arbitrary site.
| README scenario | Obscura | Chrome comparison |
|---|---|---|
| Static HTML | 51 ms | ~500 ms |
| JavaScript, XHR and fetch | 84 ms | ~800 ms |
| Dynamic scripts | 78 ms | ~700 ms |
Summary
Obscura is worth trying when a self-hosted scraping or agent workflow needs a headless JavaScript browser and wants to keep its Puppeteer or Playwright client through CDP. The engine is written in Rust, Docker and Linux ARM64 packages are available, and the repository uses Apache-2.0. The README’s speed table lacks test conditions, and complex-page API coverage, rendering behavior, and automation compatibility still need to be tested with your own targets. For a DOM-first engine that renders on demand, compare Moli Browser; for a broader web collection pipeline, see AnyCrawl. Playwright is one of the automation clients that can connect to Obscura.