New Web APIs
SharedWorkerEventSource(including relative URLs)IndexedDB(base implementation)DOMPoint/DOMPointReadOnly; improvedDOMRect- Various SVG types;
SVGAElement.relList - Static
Response.json,Response.error,Response.redirect GamepadEvent, new event interfacesHTMLScriptElement.supports,DOMTokenList.supportsAccessibility.getPartialAXTree(CDP)- 6 more interfaces exposed on
Worker structuredClonefor host (Zig) objects
Events
- Handler returning
falsecancels the event;window.eventrules;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.navigatedWithinDocumentemitted for same-document navigations (CDP)
DOM
Range:cloneContents/extractContents/createRange/collapse/deleteContents;replaceChildlive-range orderingTreeWalker,NodeFilter,NodeIteratorspec conformance- Pre-insert validity,
Attradoption, fragment/replaceChildmutation records - Insert-adjacent semantics; combined mutation records
moveBeforereactions, script insertion steps, cookie-averse documents,outerTextHTMLCollection& named-collection property semantics; table row collectionsdocument.head,getElementsByName,lastModified,wholeText, UTF-16 offsets- Class-token whitespace handling; foreign-element attribute matching
AbortSignalconformance (dependent signals, null reason, timeout after detach)- Custom elements can extend any
HTMLElementinterface; fix constructor parser endless recursion - Attribute reflection for
HTMLAreaElement - All interfaces made non-enumerable; more (and better) replaceable properties
DOMExceptionflag removed (always on)
CSS / selectors
@layerblock rules applied to the cascade- Fix class selector doing a substring match
- Quirks-mode class matching;
:link/:lang/:emptysemantics getPropertyValuespecialwidth/heighthandlingResizeObserverbox 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.jsextension, 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
gotostarts outside the browser isolate; fix two replay crashes
HTTP / Networking
HttpClientrefactor;curl_easy_setoptrefactor- Cache: simple heuristic caching
fetchhonors theredirectoption (manualanderrormodes)- Faster certificate loading on Linux/BSD; prefer
X509_STOREoverca_blob - Default max HTTP size set to 1GB (was unlimited);
u32→usizefor very large content lengths - Disable
Expect: 100-continuewith 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/markdownas plain text; fixcharset=unicodeHTML 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
cachedParseforclosestandwaitForSelector - Iframes with
loading=lazyno longer delay the parent'sloadevent - Enforce a minimum timer delay on nested timers
- Bound scroll task allocations; tighten DOM allocation lifetimes
local_arenaadded;Request/URLSearchParamsand more non-DOM types finalized- V8 configuration option + heap-limit protection; more headroom at
nearHeapLimit
Stability fixes
- Watchdog for JS hangs
- Increase
HTMLCollectionrefcount fromu8tou32(crash) - Dupe blobs before use to survive
revokeObjectURL(UAF) - Fix crash when
MessageEvent.sourceis called from a worker - Rework how
v8::Globals 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
updatecommand - Help output paged through
$PAGERwhen stdout is a tty; standardized help options - Prometheus metrics
networkIdlelifecycle events emitted for child frames- Reduced logging of
JsExceptionon event dispatch; stop loggingTryCatchRethrowerrors - Use the
getrandomsyscall forstd.crypto.random