0.3.4

google/magika0.3.4Jul 1, 2026by github-actions[bot]

AI Summary

This release introduces multi-page session support and new Web APIs, alongside significant improvements to CSS styling and network stability. It includes updates to core dependencies like V8 and libcurl, along with fixes for memory corruption and crash issues.

Key Highlights

  • Added multi-page sessions with concurrent page navigations
  • Introduced new Web APIs such as `Navigator.sendBeacon`, `HTMLSelectElement.add`, and `Node.moveBefore`
  • Enhanced CSS styling with `getComputedStyle` support and performance optimizations
  • Fixed stability issues including iframe handle scope corruption and double-free on context deinit
  • Updated V8 engine and networking libraries (libcurl and nghttp2)

New Features

  • Multi-page sessions and runner support for multiple pages
  • New Web APIs (sendBeacon, add, moveBefore, hashchange, document.domain setter)
  • Worker as a proper `DedicatedWorkerGlobalScope`
  • CLI options: `LIGHTPANDA_DISABLE_CORE_DUMP` and `--strip-mode invisible`
  • Automatic `versions.json` file generation in build/CI

Full Release Notes

## Multi-page sessions
- Concurrent page navigations in the script runtime
- Runner and session support for multiple pages
- `cli`: fetch multiple URLs in one invocation

## New Web APIs
- `Navigator.sendBeacon`
- `HTMLSelectElement.add`
- `Node.moveBefore`
- `HashChangeEvent` + `Window` `hashchange` event
- `document.domain` setter
- `Worker` is now a proper `DedicatedWorkerGlobalScope`

## Web API behavior / fixes
- `replaceWith` with a `DocumentFragment` appends its children
- `innerHTML` parsing respects the target element
- Reject `XMLHttpRequest.send()` when a send is already active
- Cookie accessor moved from `HTMLDocument` to `Document`
- `innerText` uses the `StyleManager`'s visibility

## CSS / styling
- `getComputedStyle` resolves inline `style=` declarations
- Normalize fractions without a leading `0`
- Skip inline-style allocation for elements without inline styles (perf)
- Skip `CSSStyleProperty` creation when there is no `style` attribute (perf)

## URL
- Reworked `URL.resolve` on top of the new URL implementation

## CDP (Chrome DevTools Protocol)
- Follow redirects on request-interception fulfillment
- Fix `Page.frameAttached` params double-wrapping that broke sub-frame interception
- `Page.getLayoutMetrics` returns the browser's viewport
- Store viewport override at the browser level

## HTTP / Networking
- Update libcurl and nghttp2
- Work around libcurl Brotli trailing-byte rejection (`CURLE_WRITE_ERROR`)
- Fix cross-origin `MessageEvent.source` `WindowProxy` identity

## Telemetry
- Smaller telemetry payload
- Telemetry worker moved to its own thread

## Stability / crash fixes
- Fix handlescope corruption on iframe load
- Prevent double-free on `BrowserContext` deinit with pending interception (UAF)
- Fix crash on `requestAnimationFrame` from a `Worker`
- Flush deferred transfers after a synchronous stylesheet fetch

## CLI / Ops
- `LIGHTPANDA_DISABLE_CORE_DUMP` to suppress crash core dumps
- New `--strip-mode invisible`

## Build / CI
- Update V8
- Generate a `versions.json` file
- Release: Docker registry login + read permissions, homebrew workflow fixes, trigger homebrew-browser formula update after release