0.4.0

calesthio/OpenMontage0.4.0Aug 31, 2026by github-actions[bot]

AI Summary

A major update focusing on resource loading control, WebDriver BiDi support, and new Web APIs. The release introduces a new resource loading model where iframes and workers are disabled by default, along with new screenshot and PDF capabilities.

Key Highlights

  • WebDriver BiDi support with protocol selection and improved keyboard/mouse handling
  • New `--load-resources` flags replace deprecated flags for iframes, workers, and stylesheets
  • New Web APIs: `URLPattern`, `navigator.geolocation`, `WorkerNavigator`, and canvas methods
  • New features include Screenshot and PDF support, EasyList Ad blocker, and Exa search engine

Breaking Changes

  • Iframes and workers no longer load by default
  • Deprecated flags: `--disable_subframes`, `--disable_workers`, `--enable_external_stylesheets` (use `--load-resources` instead)
  • Comma-separated list values for flags like `--adblock-lists` are deprecated (use multiple flags instead)

New Features

  • WebDriver BiDi support
  • Screenshot support (`--dump png`, `screenshot` tool)
  • PDF support (`--dump pdf`, `Page.printToPDF`)
  • Ad blocker: EasyList parsing
  • New `--load-resources` flag (image parameter)
  • New `--http-header` flag to send headers on every request
  • New `--http-version` flag (1.1/auto)
  • Optional HTTP rate limit
  • Exa search engine support
  • New Web APIs: `URLPattern`, `navigator.geolocation`, `WorkerNavigator`, `canvas.toDataURL`, `HTMLElement.draggable`

Full Release Notes

## Breaking changes

Iframes and workers no longer load by default. This makes resource loading
consistent: nothing loads unless you ask for it.

- Restore the old behavior with `--load-resources iframe` and `--load-resources worker`.
- External stylesheets stay off by default too: use `--load-resources stylesheet`.

Deprecated flags (they still work, but now print a warning):

- `--disable_subframes` → iframes are off by default; use `--load-resources iframe` to turn them on.
- `--disable_workers` → workers are off by default; use `--load-resources worker` to turn them on.
- `--enable_external_stylesheets` → use `--load-resources stylesheet`.
- `--log-filter-scopes` → renamed to `--log-filter`.
- Comma-separated list values (e.g. `--adblock-lists a,b`) → pass the option multiple times instead (`--adblock-lists a --adblock-lists b`). Affects `--strip-mode`, `--adblock-lists`, `--block-cidrs`, `--block-urls`.

## Protocols
- WebDriver BiDi support (with a `[classic]` WebDriver start); protocol selection via CLI; both CDP and BiDi can be served on the same port
- WebDriver: better keyboard and mouse handling

## New Web APIs
- `URLPattern`
- `navigator.geolocation` + `Emulation.setGeolocationOverride`
- `WorkerNavigator`
- `canvas.toDataURL` / `toBlob` (returns a 1x1 PNG)
- `HTMLElement.draggable` IDL attribute
- Many element getters/setters added and reworked; improved XPath support

## New features
- Screenshot support (`--dump png`, `screenshot` tool): renders the page's markdown
- PDF support (`--dump pdf`, `Page.printToPDF`): renders the page's markdown
- Ad blocker: EasyList parsing (initial)
- `--load-resources` with an `image` parameter (mimics image fetches)
- `--http-header` to send headers on every HTTP request
- `--http-version 1.1` / `auto` flag
- Optional HTTP rate limit
- `exa` search engine support; `Keenable` engine with a keyless option

## Web API behavior / fixes
- `searchParams` keeps a linked `URL` in sync; `URLSearchParams` iterator and percent-escape fixes
- `FormData` encoding
- `FileReader` is now asynchronous with proper text decoding
- Blob / File conformance; correct content-type for blobs; `application/octet-stream` MIME
- XHR: sync requests, Blob response type
- Edit-key support in `input`/`textarea`; improved hover events
- Prevent `click()` from triggering `click()`
- Re-parse `element.style` when the `style` attribute changes
- Promise-returning operations reject (not throw) on a bad receiver
- Reject XML documents that are not well-formed
- `DOMParser` captures the owning frame for the correct URL
- Handle immediate `meta refresh` navigation

## Rendering / CSS
- `clientHeight`/`clientWidth` return the viewport for the body
- `device-width` / `device-height` media features
- Compare visibility and CSS keyword values case-insensitively
- Reuse storage for updated property values
- Markdown dump separates flex and grid items; skips hidden elements

## HTTP / Networking
- Strip `Authorization` on cross-origin redirects
- Send `Sec-Ch-Ua-Full-Version-List` header
- Better `robots.txt` status handling
- Fix WebSocket data send on a small buffer
- Guarantee a single-outcome callback contract for `Transfer`

## CDP (Chrome DevTools Protocol)
- Answer unknown methods with `-32601`, like Chrome
- Enforce `Network.enable` limits
- Accept the emulation and setup calls drivers send at context creation
- Pass more `Runtime` methods through to the inspector; fill all `DOM.getBoxModel` quads
- `obeyRobots` added to `LP.configureCDP`

## MCP / tools
- Negotiate the protocol version on initialize; enforce HTTP conditions; close the connection after `keep_alive=false`
- Add title and annotations to `tools/list`; logfmt is now a config default
- Add `maxBytes` and `strip` to the `html` tool; `--selector` / `--max-bytes` for `fetch`
- Interactive/links/markdown: skip hidden elements, take roles and names from the AXNode, dedup links by href

## Agent
- List all agent providers and gateway examples in the README
- Fix agent history in JS mode

## Stability / memory
- Disconnect runaway mutation observers; drop async module completions after termination
- Fix double-release and other edge-case memory issues
- Fix UAF when a `PerformanceObserver` disconnects in its callback
- Fix arena leak on page shutdown with live animations
- Several crash fixes: null deref on cross-context `ReadableStream`, unsafe element cast, label click
- `Node.flags` for lookup short-circuit (perf)

## Build
- Simplify `build.zig`; pin `dev_fast` to the host glibc; use an orderfile on Linux CI builds
- `-Ddev_fast` speeds up Linux debug builds: shared V8 + Zig's self-hosted backend (instead of LLVM)