0.3.5
rishikanthc/Scriberr0.3.5Jul 17, 2026by github-actions[bot]
AI Summary
This release significantly expands browser capabilities by adding new Web APIs like SharedWorker and EventSource, improves DOM and CSS conformance, and enhances the Agent/MCP scripting features with Vertex AI support and HTTP transport.
Key Highlights
- New Web APIs including SharedWorker, EventSource, IndexedDB, and GamepadEvent
- Enhanced DOM and CSS conformance with improved Range, TreeWalker, and @layer support
- Improved Agent/MCP scripting with Vertex AI support and HTTP transport
- Performance optimizations including HTML pre-parsing and caching selectors
- Stability fixes for memory management and UAF (Use-After-Free) issues
Breaking Changes
- Handler returning `false` now cancels the event
- All interfaces are now non-enumerable
- DOMException flag removed (always on)
- Default max HTTP size limited to 1GB (was unlimited)
New Features
- SharedWorker, EventSource, IndexedDB, DOMPoint, SVG types
- MCP HTTP transport and multi-session support
- Agent text streaming and markdown rendering
- New `update` command and Prometheus metrics
- WebSocket delivery queue and lazy iframe loading
Full Release Notes
## New Web APIs - `SharedWorker` - `EventSource` (including relative URLs) - `IndexedDB` (base implementation) - `DOMPoint` / `DOMPointReadOnly`; improved `DOMRect` - Various SVG types; `SVGAElement.relList` - Static `Response.json`, `Response.error`, `Response.redirect` - `GamepadEvent`, new event interfaces - `HTMLScriptElement.supports`, `DOMTokenList.supports` - `Accessibility.getPartialAXTree` (CDP) - 6 more interfaces exposed on `Worker` - `structuredClone` for host (Zig) objects ## Events - Handler returning `false` cancels the event; `window.event` rules; `createEvent`; `timeStamp` - Event interface conformance: `isTrusted`, constructor defaults, `handleEvent` - Click activation, shadow retargeting, passive-by-default listeners - Listener option validation, window-reflecting handlers, exception propagation - Dispatch passes, trusted clicks; listener exceptions routed to `onerror` - `Page.navigatedWithinDocument` emitted for same-document navigations (CDP) ## DOM - `Range`: `cloneContents`/`extractContents`/`createRange`/`collapse`/`deleteContents`; `replaceChild` live-range ordering - `TreeWalker`, `NodeFilter`, `NodeIterator` spec conformance - Pre-insert validity, `Attr` adoption, fragment/`replaceChild` mutation records - Insert-adjacent semantics; combined mutation records - `moveBefore` reactions, script insertion steps, cookie-averse documents, `outerText` - `HTMLCollection` & named-collection property semantics; table row collections - `document.head`, `getElementsByName`, `lastModified`, `wholeText`, UTF-16 offsets - Class-token whitespace handling; foreign-element attribute matching - `AbortSignal` conformance (dependent signals, null reason, timeout after detach) - Custom elements can extend any `HTMLElement` interface; fix constructor parser endless recursion - Attribute reflection for `HTMLAreaElement` - All interfaces made non-enumerable; more (and better) replaceable properties - `DOMException` flag removed (always on) ## CSS / selectors - `@layer` block rules applied to the cascade - Fix class selector doing a substring match - Quirks-mode class matching; `:link`/`:lang`/`:empty` semantics - `getPropertyValue` special `width`/`height` handling - `ResizeObserver` box option default - Reject `focus()` on non-rendered elements (`display:none`) ## CDP (Chrome DevTools Protocol) - Emit non-UTF-8 header values as Latin-1 strings rather than byte arrays - Support explicit browser-context `session_id`; expose the Lightpanda version - Send a going-away close frame (1001) on pending terminate - Don't warn "unimplemented" when `deviceScaleFactor == 1` ## Agent / MCP / scripting - MCP: HTTP transport and multi-session support - Agent: assistant text streaming, markdown rendering in REPL output, Google Vertex AI support - Agent: multi-line slash commands, `--save` `.js` extension, intent comments in saved scripts - Generate the PandaScript skill from the tool schemas - Agent regression suite added to CI (consumed from `lightpanda-io/demo`), published to Slack, run nightly - Script: reject failed `goto` starts outside the browser isolate; fix two replay crashes ## HTTP / Networking - `HttpClient` refactor; `curl_easy_setopt` refactor - Cache: simple heuristic caching - `fetch` honors the `redirect` option (`manual` and `error` modes) - Faster certificate loading on Linux/BSD; prefer `X509_STORE` over `ca_blob` - Default max HTTP size set to 1GB (was unlimited); `u32` → `usize` for very large content lengths - Disable `Expect: 100-continue` with curl; increase default max connections - WebSocket messages processed through the delivery queue; reclaim large WS buffers - Cookies allowed on a bare domain matching the public suffix list - Don't buffer the body on a non-200 robots response - Handle `text/markdown` as plain text; fix `charset=unicode` HTML prescan fallback ## Performance / memory - Pre-parse HTML to find and preload scripts - Embed element attributes; replace the attribute linked list with an array - Cache parsed selectors per frame; cache the computed-style object per element - Use `cachedParse` for `closest` and `waitForSelector` - Iframes with `loading=lazy` no longer delay the parent's `load` event - Enforce a minimum timer delay on nested timers - Bound scroll task allocations; tighten DOM allocation lifetimes - `local_arena` added; `Request`/`URLSearchParams` and more non-DOM types finalized - V8 configuration option + heap-limit protection; more headroom at `nearHeapLimit` ## Stability fixes - Watchdog for JS hangs - Increase `HTMLCollection` refcount from `u8` to `u32` (crash) - Dupe blobs before use to survive `revokeObjectURL` (UAF) - Fix crash when `MessageEvent.source` is called from a worker - Rework how `v8::Global`s are managed; detach from the original context when re-using a window - Use the element's owner frame when mutating attributes; fix broken cross-frame attribute lookup - Don't strip a leading BOM for non-document parsing ## CLI / Ops - New `update` command - Help output paged through `$PAGER` when stdout is a tty; standardized help options - Prometheus metrics - `networkIdle` lifecycle events emitted for child frames - Reduced logging of `JsException` on event dispatch; stop logging `TryCatchRethrow` errors - Use the `getrandom` syscall for `std.crypto.random`