What's Changed
IndexedDB & SQLite
- feat(indexeddb): replace JSON storage with SQLite #2141
- refactor(indexeddb): use Tokio owners and defer result loading #2153
- feat(indexeddb): add transactional SQLite schema renames #2156
- fix(indexeddb): preserve UTF-16 database name identity #2131
- fix(indexeddb): preserve UTF-16 schema names through SQLite #2157
- fix(indexeddb): expose native readonly schema attributes #2130
- feat(indexeddb): store native DOMRect snapshots with shared codecs #2110
- feat(indexeddb): extend native geometry snapshots with shared codecs #2135
- test(indexeddb): retain live cursor mutation coverage on SQLite #2154
IndexedDB Transactions, Cursors & APIs
- feat(indexeddb): admit transactions by scope and mode #1285
- feat(indexeddb): add native FIFO connection request leases #1283
- feat(indexeddb): coordinate native versionchange acknowledgements #1284
- fix(indexeddb): isolate scoped commits and abort failed transactions #2083
- fix(indexeddb): connect transaction admission across realms and workers #2085
- fix(indexeddb): prepare writes before admitting requests #1956
- fix(indexeddb): preserve native key types and conversion errors #2072
- feat(indexeddb): support native records and bulk query options #2074
- fix(indexeddb): protect cursor state and collect native snapshots #2076
- fix(indexeddb): wait for upgrade requests before completing open #2077
- fix(indexeddb): validate pending cursor iteration #2079
- fix(indexeddb): store native DOMException payloads #2103
- fix(indexeddb): preserve native database connection attributes #2099
- fix(indexeddb): preserve native transaction attributes and abort reasons #2101
- fix(indexeddb): preserve explicit committing transaction state #2105
- fix(indexeddb): abort invalid unique index builds in request order #2109
- fix(indexeddb): deduplicate multiEntry index keys per record #2096
- fix(indexeddb): restore upgrade metadata and handle state on abort #1493
- fix(indexeddb): release rejected synchronous write requests #1287
- refactor(indexeddb): derive transaction scope and mode conversion #1998
- fix(indexeddb): expose required argument counts in method lengths #1806
- fix(indexeddb): expose a readonly worker prototype accessor #656
- fix(indexeddb): reserve open results before upgrade completion callbacks #2114
- fix(indexeddb): preserve native request attributes and factory result state #2115
Fonts & Font Loading
- fix(fonts): reject malformed FontFace payloads #312
- fix(fonts): share native FontFace loading across CSS and JS #492
- fix(css): enable native variable font properties #1778
- fix(cssom): serialize computed font from native longhands #1780
- fix(css): use native font size adjustment shorthand semantics #1811
- fix(fonts): bind FontFace requests to their creation Window #1886
- fix(fonts): retain aggregate query Promise settlement state #1888
- fix(fonts): normalize computed descriptor range endpoints #1889
- fix(fonts): share full capability ranges with native layout #1890
- fix(fonts): include resolved fallback sources in resource identity #1891
- perf(fonts): reuse payloads and incrementally register faces #367
- fix(fonts): retain pending loads across promise chains #1899
- fix(fonts): retain registrations shared by CSS declarations #1900
- fix(fonts): keep CSS-connected faces out of manual membership #1901
- fix(fonts): admit local-only CSS font declarations #1902
- fix(fonts): preserve generic families in font-set queries #1903
- fix(fonts): share Chromium-compatible Unicode family matching #1904
- perf(fonts): register validated font data without copying #1908
- fix(fonts): separate declaration identity from shared sources #1909
- refactor(fonts): reuse native descriptors for font queries #1910
- perf(fonts): batch membership retirement and update priorities in place #1911
- refactor(fonts): name font selection priorities #1913
- fix(fonts): decouple automatic font loading from layout #1958
- fix(fonts): skip discarded anonymous flex and grid text #2102
- fix(layout): apply font-optical-sizing auto as opsz by @Supersynergy in #1821
WebIDL, Conversion & Native Templates
- refactor(webidl): derive required RTCError payload arguments #1844
- refactor(webidl): share native event dictionary ancestors #1852
- refactor(webidl): complete audited dictionary derive migrations #1879
- fix(webidl): preserve UTF-16 DOMException constructor arguments #1969
- fix(webidl): build immutable Window prototype chains in native templates #1995
- fix(webidl): isolate HTML constructor Proxy handlers from prototype pollution #1988
- refactor(webidl): derive the required Touch initialization dictionary #2008
- fix(webidl): derive restricted float conversion for SVGLength values #2010
- fix(webidl): enforce native Uint8Array buffer policies #1301
- feat(webidl): add Clamp unsigned long conversion #1243
- refactor(webauthn): use shared dictionary conversions #1843
- refactor(webrtc): derive required ICE error event payload arguments #1846
WebIDL Receiver Validation
- fix(webidl): derive idb index receiver checks #1938
- fix(webidl): derive audio param receiver checks #1939
- fix(webidl): derive idb database receiver checks #1936
- fix(webidl): derive idb object store receiver checks #1937
- fix(webidl): derive idb cursor receiver checks #1935
- fix(webidl): derive SVG image aspect ratio receiver checks #1934
- fix(webidl): derive location own receiver checks #1933
- fix(webidl): derive node reflection receiver checks #1932
- fix(webidl): derive svg gradient receiver checks #1931
- fix(webidl): derive svg text position receiver checks #1930
- fix(webidl): derive svg animated value receiver checks #1929
- fix(webidl): derive svg matrix receiver checks #1928
- fix(webidl): derive svg transform list receiver checks #1926
- fix(webidl): derive svg point list receiver checks #1925
- fix(webidl): derive svg length list receiver checks #1921
- fix(webidl): derive dom token list receiver checks #1918
- fix(webidl): derive element animation receiver checks #1917
- fix(webidl): derive touch receiver checks #1916
- fix(webidl): derive data transfer receiver checks #1915
- fix(webidl): validate XMLSerializer receivers through native bindings #1914
- fix(webidl): derive svg transform receiver checks #1927
- fix(webidl): derive svg number list receiver checks #1924
- fix(webidl): derive svg length receiver checks #1920
- fix(webidl): derive input value receiver checks #1919
- fix(webidl): validate XMLHttpRequest members with native receivers #2025
- fix(webidl): enforce Window global accessor and timer receivers #2050
DOM, HTML & XML
- fix(dom): validate AbortController receivers with native brands #1853
- fix(dom): convert MutationObserver options through WebIDL #1849
- fix(dom): validate traversal receivers with native brands #1859
- fix(dom): validate NamedNodeMap receivers and Attr arguments #1860
- fix(dom): enumerate collection query methods #1869
- fix(dom): derive getRootNode options conversion #1948
- fix(dom): share native Node backing across registered proxies #1861
- fix(dom): validate Range receivers with native brands #1862
- fix(dom): convert Range arguments through native WebIDL brands #1863
- fix(dom): preserve native Element identities when copying between documents #1960
- fix(dom): resolve DOMImplementation in the Document realm #1991
- fix(dom): allocate traversal objects in their Document realm #1990
- fix(dom): retain the Document realm in Range factories #1996
- fix(dom): allocate Attr factory results in the Document realm #1989
- fix(dom): retain lossless DocumentType strings in native copies #2012
- fix(dom): expose immutable MutationRecord prototype attributes #2031
- fix(dom): allocate windowless nodes with owner realm intrinsics #2027
- fix(dom): derive insertAdjacentElement argument validation #2034
- fix(dom): allocate detached Document attributes in their realm #2124
- fix(dom): preserve attribute identity and same-value mutation records #2123
- fix(dom): construct internal objects through captured intrinsics #2125
- fix(html): preserve child meta refresh with shared scheduling #1661
- fix(domparser): stop recovering element trees after XML prologue errors #2052
- fix(xml): reconcile namespace declarations during serialization #2126
- fix(dom,svg): preserve template documents and SVGLength float semantics #2086
- fix(dom,svg): complete template adoption and SVGLength float semantics #2089
- fix(intl): preserve Unicode boundaries and simplify locale validation #2003
- fix(errors): avoid synthetic stacks on script-created DOM exceptions #1997
- fix(errors): deserialize exception data without native failure stacks #1999
- fix(modules): snapshot the current Document completion owner #2030
Events, EventTarget & Input
- refactor(events): use shared WebIDL conversion for native event dictionaries #1847
- fix(dom): inherit EventTarget operations from its prototype #1858
- refactor(events): separate target storage, handlers, and dispatch identity #1896
- refactor(events): unify EventTarget inheritance, identities and native dispatch #1898
- fix(events): preserve trust for native child Document events #2055
- test(events): cover listener identity and handler changes during dispatch #2041
- fix(window): dispatch focus and blur through native Window receivers #2042
- fix(touch): protect native TouchList indexed entries #2009
- fix(input): populate screenX/screenY on dispatched input events by @Supersynergy in #2081
- fix(input): carry read-only DataTransfer through drop editing events #1836
- fix(input): isolate DataTransfer event views from shared drag data #2097
- fix(input): preserve root screen coordinates in iframe events #2100
CDP, BiDi, WebDriver & Cookies
- feat(cdp): expose Moli-Version in /json/version #1897
- fix(cdp): publish DOM node paths before returning frontend IDs #2060
- feat(cdp): implement Input.setInterceptDrags and Input.dragIntercepted by @Supersynergy in #1822
- fix(cdp): preserve prepared documents when enabling Page #2142
- fix(webdriver): generate UUID v4 Classic session IDs #2021
- fix(storage): preserve cookie identities in BiDi deletion #2073
- fix(storage): honor BiDi cookie partition descriptors #2088
- fix(bidi): resolve child-frame cookie storage owners #2091
- fix(bidi): preserve iframe identity and event ownership #2093
- fix(network): accept Network.deleteCookies with an unparseable partitionKey by @andersonrfsilva in #2065
Fetch, XHR, WebSocket & Networking
- refactor(network): use anyhow for subresource startup errors #1905
- refactor(network): distinguish stylesheet declarations from requests #1907
- fix(xhr): keep open exceptions in the invoked method realm #1870
- fix(xhr): preserve abort state transitions and reentrant requests #1961
- refactor(xhr): centralize transitions and group pending state #1967
- fix(xhr): cancel the previous Window request when reopening #2026
- fix(xhr): decode BOM-prefixed JSON responses #2067
- fix(multipart): normalize fields and encode selected form charsets #1944
- fix(forms): serialize multipart submissions with their selected encoding #2028
- fix(upload): derive selected file MIME types from extensions #2004
- feat(fetch): support curl-style cookie inputs and jar export #186
- fix(websocket): derive shared close info dictionary conversion #1952
- fix(websocket): derive stream options conversion before validation #1951
- fix(websocket): use intrinsic Promise capabilities for WebSocketStream #2037
- fix(websocket): settle stream writes in their terminal owner task #2038
- fix(workers): expose the native WebSocketError interface #1940
- refactor(streams): derive writable writer interface argument conversion #1987
CSS, Layout, SVG & Geometry
- fix(cssom): convert adopted stylesheets with WebIDL and receiver realms #1851
- fix(layout): exclude hanging trailing spaces from scrollable overflow by @sicko7947 in #1946
- feat(css): support CSS text stroke and paint order by @sicko7947 in #1922
- fix(css): restore default hyperlink colors #2005
- fix(paint): unify synthetic weight and prepared glyph ink bounds #2019
- fix(svg): convert transform method arguments as restricted floats #1986
- fix(geometry): implement DOMPointReadOnly construction and factory #464
- feat(geometry): implement native DOMQuad bindings #873
- fix(geometry): preserve DOMMatrix dimension state #874
- feat(geometry): clone native point quad and matrix values #2133
- fix(canvas): retain factory result realms across document adoption #1992
Storage & Profiles
- fix(storage): use temporary disk backing without a profile #2158
- fix(storage): handle long Windows paths and prevent CI hangs #2146
Security, CORS & MIME
- fix(cors): expose literal star headers for credentialed requests #1959
- fix(mime): trim only HTTP whitespace in nosniff tokens #1871
- fix(dom): use the link Document for hyperlink audit requests #2053
- test(trusted-types): cover javascript navigation policy outcomes #2043
Performance, V8 & Internals
- feat(v8): expose per-regexp backtrack limits #1945
- refactor(protocol): complete synchronous state owner migration #2122
- perf(runtime): trim workflow query forwarding and clones #2132
- refactor: use SIMD escaping for HTML and XML text #2023
Media & Web Platform APIs
- feat(webcodecs): implement native encoded video chunk values #1496
- refactor(webcodecs): derive required chunk initialization dictionary #1950
- feat(webrtc): implement native encoded frame value semantics #1478
- refactor(webrtc): unify encoded frame metadata schemas #1962
- fix(webaudio): expose per-context AudioListener state #2068
- fix(media): read cue bookkeeping from native state #2039
- fix(media): validate volume and queue native volumechange tasks #2054
- feat(midi): retain native message and connection event payloads #1303
- feat(webtransport): implement native error values and cloning #2111
- fix(performance): report observer drops in callback realm #1943
PDF & Content Extraction
- fix(page): accept generateTaggedPDF in Page.printToPDF by @andersonrfsilva in #2064
- fix(html2md): preserve media resources and readable controls by @lanyue-llk in #1334
- fix(html2md): preserve mathematical and inline formatting semantics by @lanyue-llk in #1335
- fix(html2md): retain complex tables and referenced fragments by @lanyue-llk in #1336
Testing, Benchmarks & CI
- fix(benchmark): confirm target removal after close races #1854
- fix(benchmark): run explicit CDP WPT input through native automation #1855
- fix(benchmark): select CDP for WPT testdriver cases #1856
- fix(benchmark): route WPT permission changes through CDP #1857
- test(frontend): identify the CDP command and checkpoint that timed out #1838
- ci(frontend): increase network/storage and observation timeout budgets #1876
- test(cdp-smoke): retain pre-cleanup Browser.close timeout evidence #1877
- ci: move Chromium smoke to self-hosted Playwright runners #1884
- fix(smoke): synchronize Chromium navigation and target resource checks #1895
- test(wpt): refresh cases from full release run #1955
- fix(smoke): wait for the committed document and retain navigation failures #1957
- fix(benchmark): retain browser context for native WPT input #1963
- fix(smoke): make browser synchronization and CI failures explicit #1965
- fix(ci): cancel unfinished validation when a PR closes #1966
- fix(ci): accept repeated CDP smoke results in regression reports #2024
- fix(ci): cancel superseded main branch validation #2090
- test(svg): verify deselectAll clears the owner Document selection #2049
- test(worker): await XHR completion and CSP reports independently #2040
- test(webidl): preserve exceptions at each event dictionary member #2056
- test(observers): cover CSS token based margin emptiness #2048
- test(wpt): expand IndexedDB baseline and fix crashtest navigation #2134
Documentation & Community
- docs(cli): clarify logging for readiness timeout warnings by @sumerchoudhary78 in #1826
- docs: add WeChat community badge #2057
- docs: add WeChat badge to translated READMEs #2058
- docs: align translated community badges with main README #2059
- docs: add Product Hunt daily winner badge #2094
- docs: crop black corners from README banners #2095
New Contributors
- @sumerchoudhary78 made their first contribution in #1826
- @sicko7947 made their first contribution in #1946
- @andersonrfsilva made their first contribution in #2064
Full Changelog: v1.1.19...v1.1.20