WebKit is the web browser engine used by Safari, Mail, App Store, and many other apps on macOS, iOS, and Linux. Get started contributing code, or reporting bugs.

What's New

Note: Shared Tab Groups and syncing for Tab Groups, Website Settings, and Web Extensions are not enabled in this release.

Web Inspector

Elements Tab

  • Changed to grayscale nodes in the DOM tree that are not rendered (252653@main)
  • Rearranged Gradient Editor to be able to show the color component input fields (252971@main)

Sources Tab

  • Added capturing of async stack traces for queueMicrotask (252543@main)
  • Expanded all existing sync stack traces to also show related async stack traces (252630@main)
  • Excluded internal functions from all stack traces (252914@main)

Network Tab

  • Changed the Initiator column to be shown by default (252435@main)
  • Added a Path column (252827@main)
  • Added the ability for the shift key to highlight resources initiated by the hovered resource (252489@main)
  • Added an experimental feature to limit the bytes per second download speed of network tasks (252589@main)

WebDriver

  • Added support for "Get Element Shadow Root", "Find Element From Shadow Root", and "Find Elements From Shadow Root" commands

CSS

  • Enabled support for the color-mix() function (252716@main)
  • Enabled support for specifying the interpolation color space in CSS gradients (252716@main)
  • Added support for the scan media query (252717@main)
  • Added a basic implementation of :dir (252737@main)
  • Disallowed the content property on video element (252574@main)
  • Fixed not applying aspect-ratio if a grid item percentage width is resolvable (252819@main)
  • Fixed ensuring a containing block of a block box with height: fill-available is also fill-available is considered resolvable (252470@main)
  • Fixed table border radius to apply when the border color is transparent or semitransparent (252741@main)
  • Fixed containing blocks with non visible overflow to correctly clip fixed positioned descendants (252721@main)
  • Fixed visibility: collapse to correctly apply to Flexbox (252997@main)

Rendering

  • Added dark mode support for plain text documents (252673@main)
  • Added a check for WebGL Extensions in getIndexedParameter() and getSamplerParameter() (252895@main)
  • Fixed and elements' directionality when :dir attribute is used with auto or an invalid value (252779@main)
  • Changed to use the device pixel ratio scaled backing stores for unscaled bitmap content if the page is downscaling (252855@main)
  • Fixed SVG textPath rendering when a text element is referenced by a use element (252547@main)

Media

  • Added support for legacy VP8 and VP9 codec names (252535@main)
  • Added missing default CSS style for text and background colors for WebVTT (252464@main)
  • Changed to not interrupt due to invisible autoplay if the HTMLMediaElement is paused (252735@main)
  • Fixed WebRTC calls without microphone capture becoming permanently muted by AudioSession interruptions like Siri (252907@main)
  • Fixed video-as-img losing its alpha channel (252836@main)
  • Fixed muting the microphone capture if starting the capture fails due to a low priority error (252642@main)
  • Fixed not restarting application-muted microphone tracks in case the audio unit gets unsuspended (252905@main)
  • Fixed RTCDtlsTransport to close when its peer connection gets closed (252948@main)
  • Fixed Canvas.getContext('2d').drawImage on a camera video stream when the tab is backgrounded (252738@main)

JavaScript

  • Fixed Temporal.Duration#toString to use BigInt#toString for values beyond MAX_SAFE_INTEGER (Behind the --useTemporal flag) (252935@main)
  • Improved TypedArray.from performance (252976@main)
  • Improved TypedArray#indexOf and TypedArray#includes performance (252945@main, 252544@main)
  • Removed ordering check for Intl.NumberFormat, Intl.DateTimeFormat, and Intl.PluralRules range functions (252911@main)
  • Improved TypedArray#toSorted, TypedArray#toReversed, TypedArray#with and TypedArray#subarray performance (252911@main)
  • Improved TypedArray#slice performance (252847@main)
  • Removed TypedArray#toSpliced since it is dropped from the proposal (252664@main)
  • Fixed that generic iterator protocol function is invisible to Function's caller getter (252578@main)

Web API

element (252992@main)

  • Aligned StorageEvent.initStorageEvent() with the HTML specification (252521@main)
  • Aligned XHR aborting with the specification (252611@main)
  • Changed to not perform smooth keyboard scrolling on containers with scroll snap (252663@main)
  • Changed to maintain the original Content-Type header on 303 HTTP redirect (252713@main)
  • Checked for strict-dynamic when checking host sources for CSP (252465@main)
  • Enabled lazy iframe loading by default (252848@main)
  • Exposed the sheet property on SVGStyleElement (252491@main)
  • Fixed alternate stylesheets not present in document.styleSheets (252781@main)
  • Fixed CSS.supports returning false for custom properties (252987@main)
  • Fixed a display: none HTMLMediaElement with a camera track as the source leaking video frames (252871@main)
  • Fixed getComputedStyle(img).height to return a string of a rounded int not a float (252583@main)
  • Fixed a visible line character in the space between paragraphs when using a double space while composing an email with Gmail in Safari (252683@main)
  • Fixed XHR error events to return zeros for loaded and total (252743@main)
  • Fixed password authentication in XHR (252696@main)
  • Fixed canvas drawImage to clip source image when the source rectangle is outside of the source image (252731@main)
  • Fixed dynamically inserted stylesheets to be accessible via document.styleSheets (252816@main)
  • Fixed link elements to be able to fire more than one load or error event (252943@main)
  • Fixed parsing link, vlink, and alink content attributes on the
  • Fixed SVGDocument getElementById returning null when an SVG element is disconnected from documents (252478@main)
  • Fixed when a WebLock gets aborted via a Signal to reject its promise with the AbortSignal's reason (252503@main)
  • Fixed Service Workers in browser extensions to be able to load resources over a custom protocol (252585@main)
  • Fixed WorkerGlobalScope.isSecureContext to be based on the owner's top URL, not the owner's URL (252913@main)
  • Aligned CSS.supports with the specification to return false for descriptors (252720@main)
  • Implemented fingerprinting countermeasures for querying the permission state of the Notifications API (252969@main)
  • Stopped allowing trailing junk when parsing retry delay for EventSource (252885@main)
  • Fixed parsing of deeply nested phrasing content (252979@main)
  • Fixed removing srcdoc content attribute does not unload the document in iframe (252991@main)

Web Components

  • Updated shadow DOM and dialog element focusing to the latest spec (252959@main)
  • Updated delegatesFocus to match the latest spec (252901@main)
  • Fixed custom element reaction callback timing when modifying ARIA attributes (252552@main)
  • Fixed custom element reaction callback timing when using WebAnimation.prototype.commitStyles (252553@main)

Accessibility

  • Exposed suggestion, insertion, deletion roles and attributes (252516@main)
  • Enabled ARIA reflection attributes that refer to elements (252590@main)

Lockdown Mode

  • Disabled web fonts in Lockdown Mode (252884@main, 252712@main)

Web Extensions

  • Added browser.storage.session API for storing data in-memory that is not written to disk