Behavior changes
setImmediateandclearImmediatewere removed (deprecated, not part of the web platform).- MCP and agent modes now load external stylesheets by default.
- Max HTTP redirects raised from 10 to 20, matching the Fetch spec.
- Unsupported protocols are no longer navigated to;
javascript:URLs are run instead of navigated to.
New Web APIs
- Web Locks
- Compression Streams API
- RSA-OAEP in Web Crypto (
generateKey,importKey,encrypt,decrypt) - Custom elements:
ElementInternalsand form-associated callbacks Request.bodyandRequest.textStreamHTMLFormElement.reset, form numeric and named index,form.fieldHTMLTableElement.rows,HTMLSelectElement.remove(index),select.lengthsettertextarea.type,fieldset.type,output.type;HTMLMeterElementaccessorsGlobalEventHandlersattributes onWindowandDocument; document named index- Performance secondary buffer;
performance.timeOriginrelative to the Unix epoch ConsoleandCSSare now proper namespaces; more missing namespace methods
Forms / input
- Implicit submit on Enter; improved form submission; GET submissions replace the action's query
- Fire
changewhen typed text is committed by blur or Enter - Ctrl+A selects the whole value in text fields
- All text edits go through one gated path; better
contenteditabledetection - Single-contact touch for CDP, testdriver and BiDi
- One WebDriver key table shared by BiDi, testdriver and
press - Click press/release sequences shared across input paths and matched to Chrome
- Keydown default actions run only for trusted events
- Range and color inputs get their default value;
input.valuereflects to the attribute in default modes - Skip inputs with an empty name;
:checkedapplies to options; option text strips and collapses whitespace
Web API behavior / fixes
fetchresolves after headers are received; an abort signal aborts a fetch- XHR response header compliance; improved data-URL parsing
- Exceptions from timers, animation frames,
on*handlers, observers and microtasks go toreportError on*handler attributes behave like any other event listenerdocument.openresets loaded frame state; severaldocument.closecrash fixes- Fire
popstateon a fragment navigation; history traverses within a document by entry - Each
Windowgets its ownHistory;LocationURLs resolve against the calling document - Dynamic
<base>updates the document base URL iframereflects and reacts tosrc; sandbox token queries; iframe removal cleanupreplaceChildrenadopts nodes from another document- Classic scripts are decoded with their charset
- Timers accept any value; negative delays clamp to zero
IntersectionObserveronly intersects connected targets- Fix custom element upgrade ordering during fragment parsing; undefined custom elements use the
HTMLElementprototype
CSS / selectors / rendering
- Computed style reports initial values and a resolved
font-size; padding, margin and border widths default to0px text-transformapplied ininnerTextand resolved ingetComputedStylerevertandrevert-layertreated likeinherit- Decode fetched stylesheets; fix tokenizer exponent and hyphen-escape bugs; external stylesheet cap raised to 4 MiB
- Hit testing honors
pointer-events:noneandvisibility:hidden - Visibility inheritance matches Chromium in styles and the AX tree
- Hide a
[popover]that is not showing - Block-level flex and grid containers no longer grow with their items
- Selectors:
:valid/:invalidon every validity constraint,:read-write/:read-onlyper HTML, case-insensitive attribute values, type selectors on XML and foreign elements, pseudo-elements accepted
CDP (Chrome DevTools Protocol)
- Pause requests at the
Fetchresponse stage - Start of the
Debuggerdomain - Emit
Runtime.exceptionThrownfor uncaught page exceptions Page.navigatedWithinDocumentfor fragment navigations and traversals;Target.targetInfoChangedon URL/title change- Honor
Page.navigatereferrer/referrerPolicyand client target filters insetAutoAttach - Keyboard input reaches the focused element inside an iframe;
rawKeyDowndispatches keydown - AX tree:
depthparam, properties written closer to Chrome, accepted without params - Accept the cookie fields Chrome accepts, so
deleteCookieworks
WebDriver / BiDi
- BiDi
browser.getClientWindow - WebDriver window close
- CDP and BiDi cookies built through one Chrome-checked constructor
HTTP / Networking
- Update libcurl to 8.23.0; enable zstd
- Check more HTTP caching headers
- Cookies: keep a session cookie set with
expires -1; accept a UTC zone inexpires --http-curvesto set TLS key exchange groups;--http-debugfor libcurl verbose outputserveaccepts the--advertise-hostname as the WebSocketHost
MCP / agent / tools
- MCP runs each HTTP session on its own thread; idle sessions can be reaped with
--http-session-timeout(off by default) - Agent:
--tracewrites one JSON line per step;--trace-resultsadds tool result text - Agent: tells the model today's date, flags 4xx/5xx navigations, drops stale tool results
- Tree tool:
maxBytesbudget with[more]markers; iframes listed with their URL - Search drops results the browser would block
- Telemetry records tool calls and the MCP client name
Dump / markdown / PDF
- PDF output includes the actual text
--render-fontadds fonts for characters the bundled DejaVu fonts lack (e.g. CJK)- More aggressive clutter stripping;
<template>contents serialized; fenced code blocks keep their language
CLI
completioncommand prints shell completion for bash, fish and zsh
Performance / memory
- Return freed malloc memory to the OS when a connection closes (glibc)
- Cache computed ancestry values and the root node during parse
- Faster
Node.getDocument, owner frame lookup and anchor query matching - Backtrack limit on user-supplied regex
- Limit V8
ArrayBufferallocation to 4 GB; don't copyReadableStreamchunks into the page arena
Stability fixes
- Fix UAF in
MutationObserver - Refuse native calls when terminating; run microtasks only at call depth 0
- Commit an error document when a root navigation fails
- Re-implement
__clear_cacheon Linux arm64 to work around a Zig bug - Log the script that ran out of JS heap
Build / CI
- Upgrade to Zig 0.17
- Unit tests run across parallel processes (about 3x faster)
- Nightly builds strip debug symbols