0.3.0

CL-lau/SQL-GPT0.3.0May 13, 2026by github-actions[bot]

AI Summary

A major feature release adding comprehensive Web APIs including XPath 1.0, Web Workers, Custom Elements, and extensive DOM/HTTP/CSS support.

Key Highlights

  • XPath 1.0 support (Document.evaluate, XPathResult).
  • Web Worker loading and APIs (SubtleCrypto, Fetch, XHR).
  • Custom Elements support.
  • Layered HTTP client implementation.
  • Extensive stability fixes (UAF, segfaults).

New Features

  • XPath 1.0 support.
  • Web Worker loading and APIs.
  • Custom Elements support.
  • DialogElement API.
  • AbortSignal improvements.
  • FormData and form submission fixes.
  • CSS selector improvements.
  • Chrome DevTools Protocol implementation.
  • Layered HTTP client.
  • Storage and cookie improvements.
  • Navigation and CLI improvements.
  • Performance and memory optimizations.
  • Stability fixes (UAF, double-free).

Full Release Notes

## New Web APIs
- **XPath 1.0**: `Document.evaluate`, `XPathResult`, `DOM.performSearch`
- **Custom Elements**: custom element reactions, DOM mutations protected against custom-element callbacks
- `HTMLDialogElement.{show, showModal, close}`; `<summary>` click toggles `<details>`
- `window.open`, `window.frameElement`, deferred `window.close()`
- `AbortSignal.any` static + `AbortSignal.reason` can be a DOMException
- `HTMLInputElement.pattern` + `patternMismatch` validity
- `HTMLElement.isContentEditable`; label activation behavior on click
- `KeyboardEvent.keyCode` / `charCode` legacy attributes
- `HTMLFrameSetElement` stub, `WorkerLocation`
- File input foundation; `<input type=image>` routes into form submission

## Workers
- Web Worker loading with `LP.configureLoading` worker + `--disable-workers` opt-out
- `Worker.importScripts`; module imports (split ScriptManager)
- `ImageData` and `OffscreenCanvasRenderingContext2D` on Worker
- `SubtleCrypto`, Fetch and XHR usable from Worker; extracted/reused Window scheduling in Worker

## Forms
- Honor `formaction` / `formmethod` / `formenctype` on submit button
- `<input type=range>`: round to nearest step, clamp to min/max
- Normalize CR/LF to CRLF in form-data encoding; multipart XHR formdata fix
- `SubmitEvent.submitter` fix for `requestSubmit()` with no argument; submitter only overrides for submit inputs
- Skip FormData entry for `<select>` with no selectedness candidate

## CSS / selectors
- Apply UA stylesheet `display:none` defaults for unrendered elements
- `:disabled` walks fieldset/optgroup ancestors; decode CSS escapes in quoted attribute values
- `HTMLLinkElement`: `crossorigin` attribute fix, `media` getter/setter
- Optimize `elementFromPoint`; fix `CSS.escape` binding

## CDP (Chrome DevTools Protocol)
- Implement `Console` domain
- `Page.getNavigationHistory` / `Page.navigateToHistoryEntry`; POST replay on `Page.reload`
- `--disable-iframes`; per-subcommand help via `help`/`--help`
- Renamed `Audit` → `Audits`; fall back to dialog `defaultText` when promptText is null
- `LP.handleJavaScriptDialog` to drive confirm/prompt return values
- `Network`: accept empty params on `clearBrowserCookies`, add `getAllCookies`

## HTTP / Networking
- **Layered HTTP client** (InterceptionLayer only on `.serve` mode; RobotsLayer/CacheLayer)
- Send `Referer` on cross-page navigation; encode script URLs before request
- Inherit request URL fragment across fragment-less redirect
- Initial IDN support (`strchrnul` shim for libidn2 on macOS)
- Cache/FsCache `Clear`; HttpClient improvements

## Storage / cookies
- Add and default to Blackhole storage
- `Cookie`: don't allow JS context to mutate HttpOnly cookies; SameSite JSON case fix

## Navigation
- Keep existing page active until pending one loads; fast-path navigation on unloaded page
- Trigger navigation when `Location.pathname`/`.search` assigned; fix same-url navigate
- Replace active page on synthetic root navigation

## CLI / build
- `fetch`: `--inject-script` / `--inject-script-file`; `--terminate-ms` + ctrl-c improvements
- `--log-level` custom validator; CLI `variants` + `--wait-script-file` regression fix; propagate CLI parsing errors
- Display actual port when binding `--port 0`; version banner to stderr (not stdout)
- Release `.deb` package; README homebrew + AUR install; Nix/NixOS WPT support
- Update V8 dependency

## Performance / memory
- Bound per-tick memory growth on JS-heavy pages; defer raw-text merge to bound memory growth
- Use ArenaPool arena for main page; scheduler timeslice; track DOM version per owning frame
- More aggressive popup cleanup, more efficient load tick

## Stability fixes
- Numerous UAF / double-free / segfault fixes: fetch sync failure, XHR teardown, Frame deinit, worker-after-frame-context clearing, response double-free, V8 crash, test-only UAF
- Thread-safe sighandler; mutex for `Isolate.Terminate`; abort http_client before destroying context
- Protect against custom-element callbacks and `document.write` breaking DOM assumptions
- Report listener exceptions instead of halting event dispatch