VoidCrawl
VoidCrawl is a Rust-native Chrome DevTools Protocol△ (CDP) client exposed to Python via PyO3○. It replaces Playwright◑ and Selenium◇ with a permissively-licensed (Apache-2.0) stack for rendering JavaScript-heavy pages, controlling browsers, and automating web interactions.
Built on chromiumoxide with a shared Tokio★ runtime, VoidCrawl gives you async-first browser automation with near-zero overhead tab reuse.
Used by Yosoi — an AI-powered selector discovery tool for resilient web scraping.
Why VoidCrawl?
- Rust performance, Python ergonomics. The core is written in Rust. Every method is async. Python just awaits the results.
- Tab pooling.
BrowserPoolpre-opens tabs and recycles them instead of closing and reopening. After the first warmup, acquiring a tab is near-instant. - Stealth by default. Anti-detection patches are applied automatically. No fake fingerprints; just clean Chrome flags that don’t advertise automation.
- No AGPL exposure. Every dependency is MIT or Apache-2.0 licensed.
- Composable actions. A two-tier action framework (JS and CDP) lets you build reusable browser interaction sequences.
Quick Example
import asynciofrom voidcrawl import BrowserPool, PoolConfig
async def main(): async with BrowserPool(PoolConfig()) as pool: async with pool.acquire() as tab: await tab.goto("https://qscrape.dev") print(await tab.title()) print(len(await tab.content()))
asyncio.run(main())FAQs
How is VoidCrawl different from Playwright?
Playwright bundles its own browser binaries and exposes a high-level API. VoidCrawl connects to your existing Chrome/Chromium installation via CDP, keeps the browser alive as a daemon, and recycles tabs instead of opening new ones. The Rust core makes CDP calls directly with no intermediate process.
Do I need Rust installed to use VoidCrawl?
Not if you install from PyPI (uv add voidcrawl). Pre-built wheels are available. You only need Rust if you want to build from source or contribute to the core.
Does VoidCrawl work with Firefox or Safari?
No. VoidCrawl uses the Chrome DevTools Protocol, which is specific to Chromium-based browsers. Firefox has partial CDP support but it is not tested or supported.
What Python versions are supported?
Python 3.10 and above. Earlier versions are not supported due to use of modern type hint syntax and asyncio features.
References
△ Chrome DevTools Protocol (CDP). Google. Protocol for instrumenting, inspecting, and debugging Chromium-based browsers. https://chromedevtools.github.io/devtools-protocol/
○ PyO3. PyO3 Contributors. Rust bindings for the Python interpreter. https://pyo3.rs/
◑ Playwright. Microsoft. Browser automation library for Node.js, Python, Java, and .NET. https://playwright.dev/python/
◇ Selenium. Selenium Contributors. Browser automation framework. https://www.selenium.dev/
★ Tokio. Tokio Contributors. Asynchronous runtime for Rust. https://tokio.rs/
⬡ Pydantic. Pydantic Services Inc. Data validation library for Python. https://docs.pydantic.dev/