All notable changes to Rover are documented here. The format follows Keep a Changelog, and the project aims to adhere to Semantic Versioning against Rover's own Elixir API (not Servo's).
The ## [Unreleased] section is rolled into a dated, versioned heading by
scripts/release.exs (just release) when a release is cut.
[Unreleased]
0.1.0 - 2026-08-23
Initial release. Drive the Servo web engine from Elixir — one OS process per browser, with per-instance proxy config, cookies, JS evaluation, and input automation.
Added
Rover.fetch/2(one-shot) andRover.start_link/1(long-lived, supervisable) browser instances, each backed by a dedicatedrover_runtimeOS subprocess spoken to over length-prefixed MessagePack (Port,packet: 4).- Navigation, rendered content, title;
wait_for/3polling for JS-rendered nodes. - JavaScript evaluation (
evaluate/2) round-tripping strings, numbers, arrays, and maps. - Text/attribute extraction (
get_text,get_texts,get_attribute). - Real input automation:
click,fill,hover,select_optiondispatching genuine DOM events. - PNG/JPEG screenshots (
screenshot/2). - Cookie management via Servo's
SiteDataManager(get_cookies,set_cookie,clear_*). - Per-instance proxy routing — the point of Rover.
- Precompiled
rover_runtimebinaries: a:rover_downloadMix compiler fetches the prebuilt binary for the host target from the GitHub release atmix compileand verifies it againstchecksum-rover_runtime.exs, so consumers install without a Rust toolchain or a Servo build. SetROVER_BUILD=1to skip the download and use a localcargobuild instead. - End-to-end integration coverage proving two concurrent browsers preserve independent proxy routing.
Fixed
- Graceful browser shutdown now waits for
rover_runtimeto acknowledge and exit before closing its Port, avoiding falseBroken pipeerrors. Default runtime logging also suppresses Servo's expected memory-profiler teardown warnings.