← Back to all sparks
C

chromote

INFRA · APIS
Velocity0.0

Drive headless Chrome from R using the Chrome DevTools Protocol

chromote turned the browser itself into a pinned, downloadable dependency.

headless chromebrowser automationreproducibilitydevtools protocolr testing
Current state
chromote drives headless Chrome from R over the DevTools Protocol and underpins the R screenshot and app-testing stack. The visible history is shaped almost entirely by Chrome's own changes: old headless mode removed, DevTools URLs moved, viewport APIs deprecated. Version 0.5.0 answered that by letting chromote fetch and pin specific Chrome builds itself.
Where it's heading
The package has moved from reacting to Chrome upgrades to controlling them. The 0.3.0 and 0.4.0 pair tracked the headless-mode transition by first adding an option and then flipping the default; 0.5.0 removed the need to track it at all by managing versioned binaries through Chrome for Testing. Alongside that, the session API keeps accumulating helpers that collapse multi-step DevTools call sequences, such as $go_to() and $set_viewport_size().
Prediction
The version-management features shipped marked experimental, so the likely next step is stabilizing that API and extending the session helpers that wrap common DevTools sequences.

Recent moves

  1. 1y ago

    $go_to() helper added; DevTools view fixed for Chrome 135

    Adds $go_to(), which reliably waits for page load instead of pairing Page$navigate() with Page$loadEventFired(), and updates $view() for the DevTools frontend URL Chrome 135 introduced. Both continue the pattern of wrapping fragile protocol sequences.

    View source ↗
  2. 1y ago

    Versioned Chrome downloads and viewport control arrive

    ⚡ SPARK

    The release that made the browser a managed dependency rather than an ambient one, adding versioned Chrome downloads, per-block version pinning, viewport sizing and mobile emulation. Everything since has been refinement on this base.

    View source ↗
  3. 1y ago

    Default switches to new headless mode for Chrome v132+

    Drops the --headless=old default now that Chrome v132 no longer supports it, and adds chromote_info() for debugging plus consistent log file naming. Completes the headless transition that 0.3.0 opened.

    View source ↗
  4. 1y ago

    Headless mode now selectable via option or env var

    Exposes the headless mode as a chromote.headless option or CHROMOTE_HEADLESS variable while keeping the old mode as the default, letting users test Chrome v128's new engine ahead of the switch. A deliberately staged migration.

    View source ↗
  5. 1y ago

    Fix launch_chrome() error caused by a typo

    A same-day patch for a typo that made launch_chrome() throw. No functional change beyond the repair.

    View source ↗
  6. 2y ago

    is_active() redefined; adds respawn() and screenshot options

    A broad session-API pass with a breaking redefinition of Chromote$is_active() to mean connection rather than liveness, a new is_alive() taking the old meaning, session $respawn() via a recorded targetId, and screenshot format inference plus a pass-through options argument.

    View source ↗