0.2.9

DrewThomasson/ebook2audiobook0.2.9Apr 24, 2026by github-actions[bot]

AI Summary

This release introduces a new `Page` container architecture and moves finalizers to pure reference counting. It significantly expands Web API support including WebSocket, HTTP Caching, and Chrome DevTools Protocol (CDP) features.

Key Highlights

  • Introduced `Page` container with frame restructuring
  • Added WebSocket WebAPI support
  • Implemented HTTP Caching
  • Added Chrome DevTools Protocol (CDP) support
  • Added Cookie file support and parsing improvements

New Features

  • Page container architecture
  • WebSocket WebAPI
  • HTTP Caching
  • CDP support
  • Cookie support

Full Release Notes

## Architecture
- **Introduce `Page` container** (Page → frame restructuring; capture next linked-list node before releasing on cleanup)
- **Finalizers moved to pure reference counting**; improved finalizer code; clear identity before forcing finalizers
- ArenaPool gains arena buckets; non-DOM event dispatch extracted

## New Web APIs
- **WebSocket WebAPI** (basic protocol support, fixes; `WS.close` returns DOMException)
- `navigator.userAgentData`
- `XMLHttpRequest.timeout` with curl enforcement
- `EventCounts` API; `PerformanceObserver` `getEntriesByType`/`getEntriesByName`
- `document.writeln`; `document.body` setter
- `media.play()` returns a promise
- Expanded `new Response(...)` and `new Blob(...)` body/type support
- TextDecoder streaming; non-UTF-8 querystring/HTML encoding via `encoding_rs`

## Workers
- Many more Worker APIs enabled across multiple PRs (timer string handler, etc.)

## Cookies
- Cookies file support; improved parsing rules
- Require label boundary when matching domain attribute; reject Set-Cookie domains that are public suffixes; better handling of empty domains
- `Fetch` cookie jar only included for `include` + same-origin

## CDP (Chrome DevTools Protocol)
- `Emulation.setUserAgentOverride` (with restrictions); fake `Page.printToPDF`
- JSON endpoints; emit `Page.javascriptDialogOpening` events for JS dialogs
- `console.group`; console functions defined directly on console instance
- Promote `<label>` to checkbox/radio for CSS-hidden inputs
- Audit enable/disable placeholder handlers; timing fields on several CDP messages
- Improved `loaderId`/`requestId` compatibility; accept `LID-` requestId prefix
- Update WebDriver to use Page; stricter `Page.isSameOrigin`

## HTTP / Networking
- **HTTP Caching** (Cache-Control public by default; cache safety checks)
- **IP filter** support (+ improvements)
- TCP keepalive timeout setup; handle HTTP response with closed socket
- Default write callback to prevent stdout pollution; relax httpclient abort assertion

## MCP
- Add `hover`, `press`, `selectOption`, `setChecked`; improved navigation reliability + CDP support

## Forms
- Encode form data based on form/document encoding

## Build / CI / dev
- Port sqlite3 to the Zig build system; track html5ever Rust sources as cargo step inputs
- V8 snapshot caching (CI cache, WPT use, init snapshot before network, aggressive GC after creation)
- Refactored release workflow + Arch Linux package build; WPT extensions; send WPT completion
- `@import("string.zig")` → `lp.String`, `log.zig` → `lp.log` cleanups
- Docs: glibc requirement, nightly verification, WSL notes, docker localhost exposure

## Stability fixes
- Various crash fixes; UAF on empty/invalid location; double-free on decoder error
- Map Zig `error.RangeError` to JS RangeError; guard against index-out-of-bounds on invalid datetime
- Don't release un-acquired reference on CDP input event; don't release pending MutationObserver records
- Better handling of v8 callbacks with no valid context; error-callback on shared buffer clone