v0.2.6
lightpanda-io/browserv0.2.6Mar 14, 2026by github-actions[bot]
AI Summary
Introduces native semantic tree extraction for AI agents and the FontFace API. It also adds support for HTMLDetailsElement and TextEncoderStream.
Key Highlights
- Native Semantic Tree extraction engine
- FontFace API and FontFaceSet improvements
- HTMLDetailsElement support
- TextEncoderStream and TextDecoderStream
New Features
- AI agent / semantic extraction tools
- window.structuredClone support
- Custom elements dynamic markup fixes
- Navigation improvements and blob URL support
Full Release Notes
## AI agent / semantic extraction - **Native Semantic Tree extraction engine for AI agents** - MCP: `interactiveElements` and `structuredData` tools - CDP: `LP.getStructuredData`, `LP.getInteractiveElements` - Web Bot Auth ## New Web APIs - `window.structuredClone` - `TextEncoderStream` / `TextDecoderStream` - `HTMLDetailsElement` - `FontFace` constructor + `FontFaceSet.add()`; `FontFaceSet` is now an EventTarget; optimized FontFace - `FileList` Web API stub; dummy `getImageData` on canvas - `Form.action` getter/setter; `target` attribute on anchors and forms - `URL.username` / `URL.password` setters - `Range.getBoundingClientRect` / `getClientRects` + Range cleanup - New `Response` and `Request` methods - `body.onload` aliases to `window.onload` - `Track`: implement `kind` and constants ## CSS / selectors - CSS value normalization extended to cover more properties - Empty `:is()` / `:where()` are valid (return nothing) - Fix crash in `consumeName()` on UTF-8 multibyte sequences; handle commas inside quoted attributes - Node matching via tag-name string comparison on non-HTML nodes ## Custom elements - Throw on dynamic markup in custom-element callbacks during parsing - Fix cloning custom element with constructor that attaches the element - Execute dynamically inserted inline script elements ## Navigation / frames - Target-aware(ish) navigation; improved frame sub-navigation - Optimize about:blank loading (general + frames); iframe `src="about:blank"` handling - Allow navigation from a blob URL; fix page re-navigate - Force dynamic module instantiation/re-import when previous compilation failed ## CDP (Chrome DevTools Protocol) - Dummy `Page.getLayoutMetrics`, `Page.captureScreenshot`; resize screenshot to 1920x1080 - Fix request id resolver (`REQ-` not `RID-`); don't dispatch `executionContextsCleared` on frame navigation - Fix sending CDP raw command with Playwright ## Memory / runtime - Context origins (use origin.arena for origin-tied values); `resetContextGroup` on page removal - ArenaPool arenas for Blob/File; pool arena for ReadableStream (later reverted then re-applied) - Use Zig allocator for libcurl; enable tsan for C libs - Global/network connection poll runtime; run the message loop more - Single HandleScope for event dispatch; terminate isolate on `Client.stop` ## Stability fixes - Fix `TrackingAllocator` reallocation_count on failed/unsuccessful resizes - Resolve memory leak in `Option.getText()`; leak in inner-navigation refactoring - Ensure valid cookie isn't interpreted as null; parse cookies on redirection - Halt tests (`@panic`) on ArenaLeak or double-free; initialize all App fields after create - Handle auth challenge for non-proxy auth ## Build / CI / dev - Add code formatting check; testing `LogFilter` utility for scoped log suppression - WPT: browser pool, increased concurrency (`--concurrency=3`) - Update zig-v8 (action.yml + Dockerfile); remove git submodule init from Dockerfile