Skip to content

Releases

v0.1.3 | Lands the `deno_core` 0.408 bump deferred from 0.1.2 — a V8 isolate must now be constructed inside an entered tokio runtime or the process aborts — and makes the V8 heap ceiling environment-tunable.

@github-actions github-actions released this 28 Jul 04:03
9cd4af3

Fixed

  • A V8 isolate constructed outside a tokio runtime aborted the process
    (#37). deno_core
    0.408 captures tokio::runtime::Handle::try_current() when it registers an
    isolate and spawns V8's delayed foreground tasks — GC memory-reducer work —
    on that handle; with no handle it prints a diagnostic and calls
    std::process::abort(). The synchronous constructors
    (BrowserJsRuntime::new / with_profile / with_options) are public API
    callable from a plain fn main or a #[test], so they now enter a
    process-lifetime fallback runtime when the caller has none. Applies to both
    the page and worker realms.

    Worth being precise, because it shaped the 0.1.2 release: the abort is
    not debug-gated and not platform-specific. Release builds passed only
    while V8 happened not to post a delayed task inside the window under test —
    i.e. a latent production abort, which is why the bump was held back from
    0.1.2 rather than shipped. Reproduced on Linux, macOS and Windows.

Added

  • Environment-tunable V8 heap limits. The right ceiling is a property of
    the deployment, not of the engine, and the previous hard-coded 4 GB silently
    over-committed small containers.

    • BROWSER_OXIDE_HEAP_MAX_MB — default 4096 (4 GB)
    • BROWSER_OXIDE_HEAP_INITIAL_MB — default 1024 (1 GB)

    Unparseable or zero values fall back to the defaults with a warning rather
    than failing; an initial above the ceiling is clamped, since V8 rejects that
    pairing. Both are per-isolate, so a PagePool of N pages can commit up
    to N × the ceiling — see docs/CONFIGURATION.md.

Dependencies

  • deno_core 0.404 → 0.408 (V8 149.2.0 → 149.4.0), the bump deferred from
    0.1.2.

Changed

  • CI runs cargo test with --nocapture. Not cosmetic: libtest captures each
    test's output and replays it only on failure, so when a test aborts the
    reason dies with it. That is why #37 first surfaced as a bare
    signal: 6, SIGABRT with no diagnosis. Any future abort-on-construction
    would otherwise be undiagnosable from CI logs alone.

Verified

  • Canvas fingerprint byte-identical across the V8 bump —
    examples/canvas_fp_probe.rs reports len=17502 fnv1a=5b1d42ee9bdc9713, the
    same value as 0.1.1 and 0.1.2.
  • Real-site regression vs main, 15 open sites, both engine paths: zero
    regressions; the warm-reuse fix from 0.1.2 still holds (pool 11/15 → 12/15).
  • Full CI matrix green on ubuntu (stable/beta/nightly), macOS and Windows —
    including the debug jobs that previously aborted.

Installation

Rust (crates.io)

cargo add browser_oxide

Python (PyPI)

pip install browser-oxide

MCP Server (for AI assistants)

cargo install browser_oxide_mcp

Or download a pre-built browser-oxide-mcp binary for Linux, macOS, or Windows
from the assets below.

Platform Support (MCP binary)

Platform Architecture Archive
Linux x86_64 (glibc) browser-oxide-mcp-x86_64-unknown-linux-gnu.tar.gz
macOS ARM64 (Apple Silicon) browser-oxide-mcp-aarch64-apple-darwin.tar.gz
macOS x86_64 (Intel) browser-oxide-mcp-x86_64-apple-darwin.tar.gz
Windows x86_64 browser-oxide-mcp-x86_64-pc-windows-msvc.tar.gz

Changelog

See CHANGELOG.md for full details.

v0.1.0 | First open-source release of BrowserOxide — a from-scratch stealth headless browser engine in Rust: own HTTP/1+2+3 + BoringSSL TLS stack, V8 via deno_core, from-scratch CSS/DOM/layout/canvas, configurable browser-identity profiles, and a CDP-compatible debugging surface. Dual-licensed MIT OR Apache-2.0.

@github-actions github-actions released this 14 Jun 03:03

Added

  • From-scratch browser engine: HTML parser, arena-allocated DOM + Shadow DOM +
    iframes, CSS parser/selectors/values/cascade, layout, and Canvas 2D / WebGL
    rendering — no Chromium, no fork.
  • Stealth networking stack: HTTP/1, HTTP/2, and HTTP/3 with Chrome-identical
    TLS ClientHello + HTTP/2 fingerprint via boring2 (Cloudflare BoringSSL fork).
  • Native (not injected) browser fingerprint via configurable stealth profiles
    (Chrome 148 / Firefox 135 / Safari 18 desktop + mobile presets), loadable
    from YAML/JSON.
  • JavaScript runtime on V8 (deno_core 0.403) with Web-platform APIs, workers,
    and an event loop.
  • ChallengeSolver trait + Page::navigate_with_solvers hook for embedders;
    no per-vendor bypass code ships in the public crate (see SCOPE.md).
  • Python bindings (PyO3), published to PyPI as browser-oxide.
  • MCP server (browser_oxide_mcp) for AI assistants.
  • CDP-compatible debugging/automation surface (Puppeteer/Playwright drop-in).

Performance

  • Single-process architecture: ~60–135 MB peak RSS per page vs a headless-Chrome
    process tree's 1–2 GB — roughly 15× lighter (see docs/MEMORY.md).
  • Warm PagePool amortizes V8 isolate + snapshot setup across navigations.

Notes

  • Anti-bot corpus: routed 118/126 commercially-protected sites to a real render
    in a same-machine, same-IP cleanroom run, with zero per-vendor bypass code
    (see docs/BENCHMARK.md).
  • Python wheels ship for macOS (Apple Silicon + Intel) and Windows. The Linux
    wheel is deferred to 0.1.1: the prebuilt V8 uses a local-exec TLS model that
    can't link into a -shared CPython extension, and a from-source rebuild isn't
    possible from the crates.io v8 tarball. The Linux package will land via a
    sidecar (engine binary + thin Python client). The Rust crate and the MCP server
    are unaffected and support Linux, macOS, and Windows.

Installation

Rust (crates.io)

cargo add browser_oxide

Python (PyPI)

pip install browser-oxide

MCP Server (for AI assistants)

cargo install browser_oxide_mcp

Or download a pre-built browser-oxide-mcp binary for Linux, macOS, or Windows
from the assets below.

Platform Support (MCP binary)

Platform Architecture Archive
Linux x86_64 (glibc) browser-oxide-mcp-x86_64-unknown-linux-gnu.tar.gz
macOS ARM64 (Apple Silicon) browser-oxide-mcp-aarch64-apple-darwin.tar.gz
macOS x86_64 (Intel) browser-oxide-mcp-x86_64-apple-darwin.tar.gz
Windows x86_64 browser-oxide-mcp-x86_64-pc-windows-msvc.tar.gz

Changelog

See CHANGELOG.md for full details.