<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Blog – WebKit</title>
	<atom:link href="https://webkit.org/blog/feed/" rel="self" type="application/rss+xml"/>
	<link>https://webkit.org</link>
	<description>Open Source Web Browser Engine</description>
	<lastBuildDate>Wed, 29 Jul 2026 22:07:53 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>
	<itunes:explicit>no</itunes:explicit><itunes:subtitle>Open Source Web Browser Engine</itunes:subtitle><item>
		<title>Release Notes for Safari Technology Preview 249</title>
		<link>https://webkit.org/blog/18182/release-notes-for-safari-technology-preview-249/</link>
		
		<dc:creator/>
		<pubDate>Wed, 29 Jul 2026 21:46:12 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=18182</guid>

					<description><![CDATA[Safari Technology Preview Release 249 is now available for download for macOS Golden Gate and macOS Tahoe.]]></description>
										<content:encoded><![CDATA[<p><a href="https://webkit.org/blog/6017/introducing-safari-technology-preview/">Safari Technology Preview</a> Release 249 is now <a href="https://developer.apple.com/safari/resources/">available for download</a> for macOS Golden Gate and macOS Tahoe. If you already have Safari Technology Preview installed, you can update it in System Settings under General → Software Update.</p>
<p>This release includes WebKit changes between: <a href="https://github.com/WebKit/WebKit/compare/402dc1b3bf265f5afd15d1b68374ef0885824299...82913509604940fdfe247e5da3609c6de6e44d89">316531@main&#8230;317820@main</a>.</p>
<h3>Accessibility</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where an <code>aria-labelledby</code> relation was not built when its target element was inserted via <code>innerHTML</code>. (<a href="https://commits.webkit.org/316913@main">316913@main</a>)  (179677418)</li>
<li>Fixed an issue where VoiceOver was silent during character navigation inside a local iframe. (<a href="https://commits.webkit.org/317264@main">317264@main</a>)  (182229891)</li>
<li>Fixed an issue where web content somtimes appeared empty to assistive technology after navigation. (<a href="https://commits.webkit.org/317449@main">317449@main</a>)  (182544199)</li>
</ul>
<h3>Animations</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where calling <code>play()</code> on a finite scroll-driven animation timeline did not reset its start time to the current time. (<a href="https://commits.webkit.org/316745@main">316745@main</a>)  (181712713)</li>
<li>Fixed an issue where <code>animation-timeline</code> did not use the last matching timeline when it matched multiple timelines. (<a href="https://commits.webkit.org/317330@main">317330@main</a>)  (182405676)</li>
<li>Fixed an issue where <code>animation-timeline</code> could match a timeline outside the nearest <code>timeline-scope</code> element with that name. (<a href="https://commits.webkit.org/317376@main">317376@main</a>)  (182417407)</li>
</ul>
<h3>CSS</h3>
<h4>New Features</h4>
<ul>
<li>Added support for the <code>attr()</code> function. (<a href="https://commits.webkit.org/316672@main">316672@main</a>)  (173992627)</li>
<li>Added support for <code>outline-offset: inset</code>. (<a href="https://commits.webkit.org/316677@main">316677@main</a>)  (180547604)</li>
<li>Added support for the <code>@function</code> custom functions rule. (<a href="https://commits.webkit.org/316671@main">316671@main</a>)  (181625123)</li>
<li>Added preview support for the <code>wrap-inside</code> property. (<a href="https://commits.webkit.org/317182@main">317182@main</a>)  (181751564)</li>
<li>Added support for the <code>if()</code> function. (<a href="https://commits.webkit.org/316813@main">316813@main</a>)  (181806268)</li>
<li>Added support for <code>calc-mix()</code>. (<a href="https://commits.webkit.org/316847@main">316847@main</a>)  (181839626)</li>
<li>Added support for <code>justify-self</code> on block-level boxes. (<a href="https://commits.webkit.org/317212@main">317212@main</a>)  (181926245)</li>
<li>Added preview support for <code>text-decoration-inset</code>. (<a href="https://commits.webkit.org/317230@main">317230@main</a>)  (182019037)</li>
<li>Added preview support for the <code>content</code> property on the <code>::marker</code> pseudo-element. (<a href="https://commits.webkit.org/317211@main">317211@main</a>)  (182066124)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where setting <code>view-transition-name</code> dynamically did not create a stacking context. (<a href="https://commits.webkit.org/317310@main">317310@main</a>)  (178316558)</li>
<li>Fixed an issue where CSS Grid items with a computed preferred size that behaves as <code>auto</code> did not correctly compute their minimum content contribution. (<a href="https://commits.webkit.org/316697@main">316697@main</a>)  (181146154)</li>
<li>Fixed an issue where visually overflowing content in a CSS Grid item was not painted. (<a href="https://commits.webkit.org/316668@main">316668@main</a>)  (181277780)</li>
<li>Fixed <code>anchor-center</code> in vertical writing modes not being scroll-adjusted along the block axis. (<a href="https://commits.webkit.org/316537@main">316537@main</a>)  (181413103)</li>
<li>Fixed an issue where an empty editable flex container did not reserve a line&#8217;s worth of block size in vertical writing modes. (<a href="https://commits.webkit.org/317467@main">317467@main</a>)  (181485387)</li>
<li>Fixed an issue where CSS Grid did not correctly increase track sizes to accommodate items spanning flexible tracks. (<a href="https://commits.webkit.org/317426@main">317426@main</a>)  (181635324)</li>
<li>Fixed an issue where stretch alignment did not trigger stretch sizing for CSS Grid items. (<a href="https://commits.webkit.org/316949@main">316949@main</a>)  (181750071)</li>
<li>Fixed an issue where CSS Grid items could retain stale block sizes after a subsequent layout. (<a href="https://commits.webkit.org/317166@main">317166@main</a>)  (182144347)</li>
<li>Fixed an issue where <code>clip-path</code> shapes could render with incorrect arcs. (<a href="https://commits.webkit.org/317397@main">317397@main</a>)  (182443333)</li>
<li>Fixed an issue where <code>::highlight()</code> and <code>::target-text</code> ignored <code>text-underline-offset</code>. (<a href="https://commits.webkit.org/317440@main">317440@main</a>)  (182466757)</li>
<li>Fixed an issue where <code>::highlight()</code> decoration replaced the originating element&#8217;s decoration instead of layering over it. (<a href="https://commits.webkit.org/317439@main">317439@main</a>)  (182523249)</li>
</ul>
<h3>Editing</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue that <font face> disallowed font names that were not a valid CSS identifiers. (<a href="https://commits.webkit.org/316948@main">316948@main</a>)  (51409819)</li>
<li>Fixed the Edit menu&#8217;s Copy item being incorrectly enabled when there was no selection in the web page. (<a href="https://commits.webkit.org/316571@main">316571@main</a>)  (176061974)</li>
</ul>
<h3>Forms</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where the <code>datalist</code> popup menu was presented in the wrong place on a screen to the left of the main screen. (<a href="https://commits.webkit.org/316965@main">316965@main</a>)  (181967418)</li>
</ul>
<h3>HTML</h3>
<h4>New Features</h4>
<ul>
<li>Added support for <code>popover=hint</code>. (<a href="https://commits.webkit.org/317402@main">317402@main</a>)  (129495028)</li>
</ul>
<h3>JavaScript</h3>
<h4>New Features</h4>
<ul>
<li>Added support for the <code>Temporal</code> object. (<a href="https://commits.webkit.org/316742@main">316742@main</a>)  (181723535)</li>
</ul>
<h3>MathML</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where U+2016 (DOUBLE VERTICAL LINE) was missing the symmetric property in the MathML operator dictionary. (<a href="https://commits.webkit.org/316867@main">316867@main</a>)  (179558196)</li>
</ul>
<h3>Media</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where finding text starting from a selection could resolve to the wrong caption cue instead of the one nearest the video&#8217;s playhead. (<a href="https://commits.webkit.org/317168@main">317168@main</a>)  (182001231)</li>
</ul>
<h3>Rendering</h3>
<h4>New Features</h4>
<ul>
<li>Added support for dark mode in the XML document viewer. (<a href="https://commits.webkit.org/316832@main">316832@main</a>)  (122234600)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where <code>box-shadow</code> rendering broke when the page was zoomed. (<a href="https://commits.webkit.org/317080@main">317080@main</a>)  (169167365)</li>
</ul>
<h3>Scrolling</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where re-snapping did not select the snap area aligned in both axes when multiple targets were aligned. (<a href="https://commits.webkit.org/317294@main">317294@main</a>)  (182285397)</li>
<li>Fixed an issue where <code>scroll-snap-align</code> was not respected when scrolling to an anchor or calling <code>scrollIntoView()</code>. (<a href="https://commits.webkit.org/317495@main">317495@main</a>)  (182544180)</li>
</ul>
<h3>Spatial Web</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where navigating back to a page with a previously active web environment left the UI stuck showing the environment as active. (<a href="https://commits.webkit.org/316891@main">316891@main</a>)  (180966321)</li>
<li>Fixed an issue where the background color of <code>HTMLModelElement</code> did not match spec for non-opaque colors. (<a href="https://commits.webkit.org/316788@main">316788@main</a>)  (181641249)</li>
</ul>
<h3>Web API</h3>
<h4>New Features</h4>
<ul>
<li>Added support for subgroups in WebGPU. (<a href="https://commits.webkit.org/317145@main">317145@main</a>)  (154874391)</li>
<li>Added support for close watchers, including the <code>closedby</code> attribute for <code>dialog</code> elements. (<a href="https://commits.webkit.org/316680@main">316680@main</a>)  (180105698)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where a user gesture authorization token was not properly verified for Digital Credentials requests. (<a href="https://commits.webkit.org/317228@main">317228@main</a>)  (174908839)</li>
<li>Fixed <code>DOMMatrix</code> and <code>IntersectionObserver</code> correctly enforcing absolute-length unit requirements when parsing values. (<a href="https://commits.webkit.org/316532@main">316532@main</a>)  (181453666)</li>
<li>Fixed an issue where Scroll To Text Fragment directives could run outside <code>text/html</code> and <code>text/plain</code> documents. (<a href="https://commits.webkit.org/316976@main">316976@main</a>)  (181763736)</li>
<li>Fixed an issue where <code>replaceChildren()</code> could not replace a document&#8217;s children. (<a href="https://commits.webkit.org/316909@main">316909@main</a>)  (181921026)</li>
</ul>
<h3>Web Audio</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed Web Audio <code>PannerNode</code> orientation-only changes not updating the directional cone gain. (<a href="https://commits.webkit.org/316541@main">316541@main</a>)  (181413407)</li>
</ul>
<h3>Web Inspector</h3>
<h4>New Features</h4>
<ul>
<li>Added support for the range mappings proposal in source maps. (<a href="https://commits.webkit.org/316748@main">316748@main</a>)  (178564308)</li>
<li>Added per-element <code>Layout Invalidated</code> events in Web Inspector to reflect the number of elements affected by a layout invalidation. (<a href="https://commits.webkit.org/317302@main">317302@main</a>)  (181243589)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where every <code>&lt;input&gt;</code> element showed a Scroll badge in the Elements tab. (<a href="https://commits.webkit.org/316773@main">316773@main</a>)  (101661656)</li>
<li>Fixed an issue where search results did not select the corresponding source code line for fetched JSON. (<a href="https://commits.webkit.org/317499@main">317499@main</a>)  (118115749)</li>
<li>Fixed an issue where search in Web Inspector did not find results inside the shadow DOM. (<a href="https://commits.webkit.org/317500@main">317500@main</a>)  (126458322)</li>
<li>Fixed an issue where Web Inspector could crash when selecting a popover matching a nested <code>@scope</code> with a bare declaration. (<a href="https://commits.webkit.org/316987@main">316987@main</a>)  (181745000)</li>
<li>Fixed an issue where Web Inspector mapped the <code>crimson</code> named color to the wrong RGB value. (<a href="https://commits.webkit.org/317047@main">317047@main</a>)  (182090064)</li>
<li>Fixed an issue where the gradient editor in Web Inspector dropped explicit <code>0%</code> color stops and misparsed leading radial color stops. (<a href="https://commits.webkit.org/317192@main">317192@main</a>)  (182172439)</li>
<li>Fixed an issue where autocompleting a vendor-prefixed value in Styles could duplicate the prefix, for example producing <code>-apple--apple-system</code>. (<a href="https://commits.webkit.org/317167@main">317167@main</a>)  (182178871)</li>
</ul>
<h3>WebAssembly</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where <code>Error</code> stack traces did not include names for modules instantiated with <code>WebAssembly.instantiateStreaming</code>. (<a href="https://commits.webkit.org/316642@main">316642@main</a>)  (181523735)</li>
</ul>
<h3>WebDriver</h3>
<h4>New Features</h4>
<ul>
<li>Added WebDriver support for the Digital Credentials API, including commands to simulate wallet payloads, indefinite waits, and user rejection. (<a href="https://commits.webkit.org/316435@main">316435@main</a>)  (168941907)</li>
</ul>
<h3>WebRTC</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed <code>OverconstrainedError</code> to inherit from <code>DOMException</code> and expose a <code>code</code> attribute per the Media Capture spec. (<a href="https://commits.webkit.org/316578@main">316578@main</a>)  (180728516)</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WebKit Features for Safari 26.6</title>
		<link>https://webkit.org/blog/18178/webkit-features-for-safari-26-6/</link>
		
		<dc:creator/>
		<pubDate>Mon, 27 Jul 2026 18:00:52 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=18178</guid>

					<description><![CDATA[Safari 26.6 is here.]]></description>
										<content:encoded><![CDATA[<p>Safari 26.6 is here. This release adds a small refinement to WebAssembly’s streaming compilation paths, and delivers eight bug fixes across CSS, service workers, networking, extensions, and WebRTC.</p>
<p>This release continues the ongoing focus of this entire year — polishing how features fit together, and resolving issues you might have run into as a web developer.</p>
<h2>WebAssembly</h2>
<p>WebKit for Safari 26.6 adds a <code>compileOptions</code> parameter to <code>WebAssembly.compileStreaming()</code> and <code>WebAssembly.instantiateStreaming()</code>.</p>
<p>Safari 26.2 shipped support for <a href="https://webkit.org/blog/17204/webkit-features-for-safari-26-2/">Wasm JS String Builtins</a> — a way for WebAssembly modules to import a set of standardized JavaScript string operations as builtins, which the engine can then optimize much more aggressively than a normal JS import. To turn them on, you pass an options object to <code>WebAssembly.compile()</code> or <code>WebAssembly.instantiate()</code>.</p>
<p>The two streaming variants (<code>compileStreaming()</code> and <code>instantiateStreaming()</code>) didn’t yet accept that same options object. Now they do.</p>
<pre><code class="js"><span class="keyword type">const</span> <span class="identifier">module</span> <span class="operator">=</span> <span class="identifier">await</span> <span class="identifier">WebAssembly</span>.<span class="identifier">compileStreaming</span>(
  <span class="identifier">fetch</span>(<span class="string">"example.wasm"</span>),
  { <span class="identifier">builtins</span><span class="operator">:</span> [<span class="string">"js-string"</span>] }
);
</code></pre>
<p>Now you don’t have to fall back from streaming compilation to use JS String Builtins.</p>
<h2>Bug fixes and more</h2>
<p>In addition to the WebAssembly update, WebKit for Safari 26.6 includes eight bug fixes:</p>
<h3>CSS</h3>
<ul>
<li>Fixed an issue where the <code>ic</code> length unit scaled incorrectly with page zoom, causing it to no longer equal <code>1em</code> as expected by the CSS specification. (174857144)</li>
<li>Fixed an issue where fixed-positioned elements using <code>position-area</code> did not fall back properly when the body was scrollable. (175544079)</li>
<li>Fixed an issue where CSS <code>zoom</code> interacted incorrectly with <code>font-size</code>, <code>font-weight</code>, <code>font-variant</code>, and <code>font-style</code> on iPad when requesting the desktop website. (176647969)</li>
</ul>
<h3>Networking</h3>
<ul>
<li>Fixed an issue where partitioned cookies could not be deleted using <code>WKHTTPCookieStore</code>. (176097960)</li>
</ul>
<h3>Service Workers</h3>
<ul>
<li>Fixed an issue where service worker registrations with missing main scripts were not automatically unregistered, preventing pages from re-registering new service workers. (175522651)</li>
<li>Fixed an issue where service worker registrations with missing imported scripts were not automatically unregistered. (175522816)</li>
</ul>
<h3>Web Extensions</h3>
<ul>
<li>Fixed an issue where web extension service worker registration database files accumulated on each Safari launch, causing performance degradation. (175810627)</li>
</ul>
<h3>WebRTC</h3>
<ul>
<li>Fixed an issue where <code>RTCPeerConnection</code> configured with <code>iceTransportPolicy: "relay"</code> failed to gather any ICE candidates on macOS Sequoia. (175009190)</li>
</ul>
<h2>Updating to Safari 26.6</h2>
<p>Safari 26.6 is available on iOS 26.6, iPadOS 26.6, visionOS 26.6, macOS Tahoe 26.6, macOS Sequoia, and macOS Sonoma. On iOS, iPadOS, and visionOS, you can update to Safari 26.6 as part of the OS update in Settings > General > Software Update. On macOS, Safari updates are delivered through System Settings > General > Software Update.</p>
<h2>Feedback</h2>
<p>We love hearing from you. To share your thoughts, find us online: Jen Simmons on <a href="https://bsky.app/profile/jensimmons.bsky.social">Bluesky</a> / <a href="https://front-end.social/@jensimmons">Mastodon</a>, Saron Yitbarek on <a href="https://bsky.app/profile/saron.bsky.social">BlueSky</a> / <a href="https://front-end.social/@saron">Mastodon</a>, and Jon Davis on <a href="https://bsky.app/profile/jondavis.bsky.social">Bluesky</a> / <a href="https://mastodon.social/@jondavis">Mastodon</a>. You can follow WebKit <a href="https://www.linkedin.com/in/apple-webkit/">on LinkedIn</a>.</p>
<p>If you run into any issues, we welcome your <a href="https://bugs.webkit.org/">bug report</a>. Filing issues really does make a difference.</p>
<p>You can also find this information in the <a href="https://developer.apple.com/documentation/safari-release-notes/">Safari release notes</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Release Notes for Safari Technology Preview 248</title>
		<link>https://webkit.org/blog/18162/release-notes-for-safari-technology-preview-248/</link>
		
		<dc:creator/>
		<pubDate>Wed, 22 Jul 2026 18:58:31 +0000</pubDate>
				<category><![CDATA[Safari Technology Preview]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=18162</guid>

					<description><![CDATA[Safari Technology Preview Release 248 is now available for download for macOS Golden Gate and macOS Tahoe.]]></description>
										<content:encoded><![CDATA[<p><a href="https://webkit.org/blog/6017/introducing-safari-technology-preview/">Safari Technology Preview</a> Release 248 is now <a href="https://developer.apple.com/safari/resources/">available for download</a> for macOS Golden Gate and macOS Tahoe. If you already have Safari Technology Preview installed, you can update it in System Settings under General → Software Update.</p>
<p>This release includes WebKit changes between: <a href="https://github.com/WebKit/WebKit/compare/666fd351d376a96584c357fee973f74f701800be...84565916779faa5f54b09bc075add03a779723c1">315567@main&#8230;316817@main</a>.</p>
<h3>Accessibility</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed VoiceOver on Safari unable to navigate to content revealed by disclosure widgets using <code>hidden="until-found"</code>. (<a href="https://commits.webkit.org/315964@main">315964@main</a>)  (173228707)</li>
<li>Fixed stale <code>aria-labelledby</code> when the referenced element dynamically changes its <code>aria-label</code>. (<a href="https://commits.webkit.org/316316@main">316316@main</a>)  (180319221)</li>
</ul>
<h3>CSS</h3>
<h4>New Features</h4>
<ul>
<li>Added support for forwarding missing color components when interpolating between analogous color spaces. (<a href="https://commits.webkit.org/315569@main">315569@main</a>)  (180239320)</li>
<li>Added support for the <code>no-clamp</code> option on the CSS <code>progress()</code> function. (<a href="https://commits.webkit.org/315977@main">315977@main</a>)  (180473472)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed serialization of various CSS at-rules not escaping identifiers. (<a href="https://commits.webkit.org/315795@main">315795@main</a>)  (178750383)</li>
<li>Fixed <code>:last-child</code> and related selectors incorrectly gating on parser state outside of style resolution. (<a href="https://commits.webkit.org/316495@main">316495@main</a>)  (178879939)</li>
<li>Fixed changing the <code>color-scheme</code> of an <code>&lt;iframe&gt;</code> not invalidating the appearance of the embedded document. (<a href="https://commits.webkit.org/316467@main">316467@main</a>)  (179177141)</li>
<li>Fixed CSS scroll snap re-snap to prefer the fragment-targeted (<code>:target</code>) snap area over other aligned snap targets. (<a href="https://commits.webkit.org/315880@main">315880@main</a>)  (180108825)</li>
<li>Fixed the CSS preload scanner failing to preload <code>@import</code> rules that follow an <code>@layer</code> statement rule. (<a href="https://commits.webkit.org/315576@main">315576@main</a>)  (180170656)</li>
<li>Fixed serialization of <code>CSSViewTransitionRule</code>. (<a href="https://commits.webkit.org/315614@main">315614@main</a>)  (180170814)</li>
<li>Fixed <code>MediaList.deleteMedium()</code> to parse its argument as a media query and remove all matching queries. (<a href="https://commits.webkit.org/315579@main">315579@main</a>)  (180270019)</li>
<li>Fixed <code>MediaList.appendMedium()</code> to parse its argument as a single media query and suppress duplicates. (<a href="https://commits.webkit.org/315594@main">315594@main</a>)  (180291283)</li>
<li>Fixed grid items with <code>stretch</code> or <code>fit-content</code> preferred sizes computing incorrect minimum-content contributions when sizing tracks. (<a href="https://commits.webkit.org/316296@main">316296@main</a>)  (180748205)</li>
<li>Fixed inserting a CSS rule while a view transition is active causing the group animation to snap to its final state. (<a href="https://commits.webkit.org/316436@main">316436@main</a>)  (181100818)</li>
<li>Fixed CSS <code>var()</code> to only resolve its fallback when the first argument resolves to the guaranteed-invalid value. (<a href="https://commits.webkit.org/316280@main">316280@main</a>)  (181114298)</li>
<li>Fixed navigating away from a render-blocked document before its first rendering opportunity incorrectly firing <code>pagereveal</code> and starting an outbound cross-document view transition. (<a href="https://commits.webkit.org/316446@main">316446@main</a>)  (181191512)</li>
</ul>
<h3>Editing</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed drag images of DOM elements with CSS transforms not rendering correctly. (<a href="https://commits.webkit.org/316077@main">316077@main</a>)  (99614217)</li>
<li>Fixed opaque DOM mutations coming from dictation on iOS. (<a href="https://commits.webkit.org/316049@main">316049@main</a>)  (163454428)</li>
<li>Fixed deletion in an editable table leaving an empty trailing table row behind. (<a href="https://commits.webkit.org/315990@main">315990@main</a>)  (180877315)</li>
<li>Fixed vertical caret movement in editable content ignoring the requested editable-type parameter. (<a href="https://commits.webkit.org/316241@main">316241@main</a>)  (181000174)</li>
</ul>
<h3>Forms</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed the concentric inner-button corner radius on horizontal text form controls incorrectly ignoring the bottom inset. (<a href="https://commits.webkit.org/316022@main">316022@main</a>)  (180869927)</li>
</ul>
<h3>Images</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed a regression where RGB gain map images were decoded to 8 bits per channel, causing a color shift and incorrect brightness. (<a href="https://commits.webkit.org/316069@main">316069@main</a>)  (179152566)</li>
<li>Fixed handling of the gain-map target pixel format when decoding HDR images to fall back safely when the format cannot be parsed. (<a href="https://commits.webkit.org/316405@main">316405@main</a>)  (181180757)</li>
</ul>
<h3>JavaScript</h3>
<h4>New Features</h4>
<ul>
<li>Added support for the TC39 BigInt Math proposal, exposing <code>Math</code>-equivalent methods on <code>BigInt</code> such as <code>BigInt.pow</code> and <code>BigInt.sqrt</code>. (<a href="https://commits.webkit.org/315974@main">315974@main</a>)  (152472996)</li>
</ul>
<h3>Media</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed <code>&lt;audio&gt;</code> and <code>&lt;video&gt;</code> controls rendering incorrectly when rotated via CSS transform. (<a href="https://commits.webkit.org/315718@main">315718@main</a>)  (37516619)</li>
<li>Fixed subtitles and closed captions not appearing in fullscreen video on iPhone. (<a href="https://commits.webkit.org/315789@main">315789@main</a>)  (175298523)</li>
<li>Fixed ArrayBuffer-backed YUV <code>VideoFrame</code> with a <code>visibleRect</code> rendering with offset chroma channels. (<a href="https://commits.webkit.org/315742@main">315742@main</a>)  (180202939)</li>
<li>Fixed video playback of streams from certain sources such as security cameras not working. (<a href="https://commits.webkit.org/315774@main">315774@main</a>)  (180411019)</li>
<li>Fixed transient device rotation resulting in captured video frames having the wrong orientation. (<a href="https://commits.webkit.org/315821@main">315821@main</a>)  (180429147)</li>
<li>Fixed Media Source Extensions playback and seek by loosening the gap tolerance between buffered ranges. (<a href="https://commits.webkit.org/316146@main">316146@main</a>)  (180439090)</li>
</ul>
<h3>Navigation</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed a <code>&lt;meta http-equiv="refresh"&gt;</code> to a URL differing only in fragment identifier being incorrectly treated as a page reload. (<a href="https://commits.webkit.org/316001@main">316001@main</a>)  (176933795)</li>
</ul>
<h3>Networking</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed URL path separators being encoded as <code>%2F</code> following a percent-encoded Armenian path segment. (<a href="https://commits.webkit.org/315627@main">315627@main</a>)  (180067095)</li>
</ul>
<h3>Rendering</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed the background of a composited <code>&lt;html&gt;</code> element not being repainted when the <code>&lt;body&gt;</code> background changed. (<a href="https://commits.webkit.org/316415@main">316415@main</a>)  (177975964)</li>
<li>Fixed a regression where block-axis padding on a <code>flex</code> column container with <code>overflow: auto</code> was excluded from <code>scrollHeight</code>. (<a href="https://commits.webkit.org/315813@main">315813@main</a>)  (179376053)</li>
<li>Fixed an issue where an <code>&lt;img&gt;</code> embedding an SVG with a near-integral intrinsic width rendered one device pixel narrower than expected. (<a href="https://commits.webkit.org/315807@main">315807@main</a>)  (180490343)</li>
<li>Fixed elements with <code>filter: drop-shadow()</code> not being fully repainted when a child is resized. (<a href="https://commits.webkit.org/316450@main">316450@main</a>)  (181284741)</li>
</ul>
<h3>SVG</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed SVG SMIL length animations to reject invalid <code>to</code>, <code>from</code>, and <code>by</code> values such as those with leading whitespace. (<a href="https://commits.webkit.org/315949@main">315949@main</a>)  (118537155)</li>
<li>Fixed Unicode text with complex scripts not rendering correctly along a curved <code>&lt;textPath&gt;</code>. (<a href="https://commits.webkit.org/316144@main">316144@main</a>)  (120284006)</li>
<li>Fixed <code>SVGLength.convertToSpecifiedUnits()</code> failing when converting from <code>px</code> to <code>%</code>, <code>em</code>, or <code>ex</code>. (<a href="https://commits.webkit.org/315953@main">315953@main</a>)  (172056830)</li>
<li>Fixed SVG geometry presentation attributes like <code>cx</code>, <code>cy</code>, <code>r</code>, <code>rx</code>, <code>ry</code>, <code>x</code>, <code>y</code>, <code>width</code>, and <code>height</code> being incorrectly applied to elements such as <code>&lt;g&gt;</code> on which they are not permitted. (<a href="https://commits.webkit.org/315946@main">315946@main</a>)  (175672111)</li>
<li>Fixed an issue where the per-character <code>rotate</code> attribute was discarded on a <code>&lt;textPath&gt;</code>, so it now composes with the path tangent angle. (<a href="https://commits.webkit.org/315786@main">315786@main</a>)  (178044478)</li>
<li>Fixed several SVG styling spec-compliance failures. (<a href="https://commits.webkit.org/316174@main">316174@main</a>)  (181052042)</li>
<li>Fixed dynamic changes to <code>orient</code> and <code>markerUnits</code> on <code>&lt;marker&gt;</code> not repainting elements that reference it. (<a href="https://commits.webkit.org/316350@main">316350@main</a>)  (181106538)</li>
<li>Fixed SVG SMIL <code>number</code>, <code>integer-optional-integer</code>, <code>number-optional-number</code>, and <code>path</code> animations to not apply when their <code>from</code>, <code>to</code>, or <code>by</code> values fail to parse. (<a href="https://commits.webkit.org/316468@main">316468@main</a>)  (181308150)</li>
</ul>
<h3>Scrolling</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed CSS scroll snap points inside zero-sized elements not working correctly. (<a href="https://commits.webkit.org/315948@main">315948@main</a>)  (172863699)</li>
<li>Fixed CSS scroll snap re-snap to prefer a snap area that contains the focused or fragment-targeted element. (<a href="https://commits.webkit.org/315927@main">315927@main</a>)  (180707984)</li>
</ul>
<h3>Security</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed a regression where some websites failed to display and logged Content Security Policy errors in the console. (<a href="https://commits.webkit.org/316290@main">316290@main</a>)  (179684592)</li>
<li>Fixed same-page navigations being incorrectly checked against Content Security Policy. (<a href="https://commits.webkit.org/315759@main">315759@main</a>)  (180342503)</li>
<li>Fixed Content Security Policy <code>frame-ancestors</code> violations in report-only policies being ignored instead of reported. (<a href="https://commits.webkit.org/315753@main">315753@main</a>)  (180447621)</li>
<li>Fixed Content Security Policy parsing to reject trailing characters after the closing quote on <code>nonce-source</code> and <code>hash-source</code> values. (<a href="https://commits.webkit.org/316008@main">316008@main</a>)  (180903857)</li>
<li>Fixed Content Security Policy <code>trusted-types</code> expressions to reject trailing characters after keywords and the wildcard. (<a href="https://commits.webkit.org/316089@main">316089@main</a>)  (180973793)</li>
</ul>
<h3>Storage</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where IndexedDB transactions could be blocked for an extended period before starting when another page&#8217;s transaction was suspended in the background. (<a href="https://commits.webkit.org/315609@main">315609@main</a>)  (178769599)</li>
</ul>
<h3>Web API</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed the Async Clipboard API to request paste access asynchronously. (<a href="https://commits.webkit.org/315997@main">315997@main</a>)  (75969974)</li>
<li>Fixed Digital Credentials to surface <code>OperationError</code> for platform-cancellation and unknown errors instead of <code>AbortError</code> or <code>UnknownError</code>. (<a href="https://commits.webkit.org/315973@main">315973@main</a>)  (174308268)</li>
<li>Fixed Digital Credentials rejecting with the wrong error code and synchronously; rejections are now queued as a task with the correct error. (<a href="https://commits.webkit.org/315895@main">315895@main</a>)  (174895437)</li>
<li>Fixed <code>KeyboardEvent.getModifierState("AltGraph")</code> and <code>MouseEvent.getModifierState("AltGraph")</code> always returning <code>false</code>. (<a href="https://commits.webkit.org/315804@main">315804@main</a>)  (180597374)</li>
<li>Fixed <code>Credential.type</code> returning <code>"digital-credential"</code> instead of <code>"digital"</code> for digital credentials. (<a href="https://commits.webkit.org/315891@main">315891@main</a>)  (180618646)</li>
<li>Fixed aborting <code>navigator.credentials.get()</code> leaving the digital-credentials document picker stuck on screen. (<a href="https://commits.webkit.org/316494@main">316494@main</a>)  (180812397)</li>
<li>Fixed <code>FileReader.readAsText()</code> ignoring the <code>charset</code> parameter of the <code>Blob</code>&#8216;s MIME type. (<a href="https://commits.webkit.org/315996@main">315996@main</a>)  (180890703)</li>
</ul>
<h3>Web Inspector</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed showing ES2022 class private fields, methods, and accessors when inspecting object instances in the Console. (<a href="https://commits.webkit.org/316171@main">316171@main</a>)  (88527162)</li>
<li>Fixed symbolic breakpoints in the debugger so they work with intrinsic functions. (<a href="https://commits.webkit.org/315713@main">315713@main</a>)  (99037335)</li>
<li>Fixed a JavaScript breakpoint on a line containing only a semicolon not being triggered. (<a href="https://commits.webkit.org/316519@main">316519@main</a>)  (126707973)</li>
<li>Fixed the Console REPL to allow redefinition of variables declared with <code>let</code> and <code>const</code>. (<a href="https://commits.webkit.org/316523@main">316523@main</a>)  (143140659)</li>
<li>Fixed the Timeline exporting and importing the wrong timestamp for <code>performance.mark()</code> records. (<a href="https://commits.webkit.org/316073@main">316073@main</a>)  (145226764)</li>
<li>Fixed local response overrides mapped to a file being interpreted as Latin-1 (ISO-8859-1) instead of their actual encoding. (<a href="https://commits.webkit.org/316074@main">316074@main</a>)  (149847746)</li>
<li>Fixed the Media Logging setting not persisting across page loads. (<a href="https://commits.webkit.org/315758@main">315758@main</a>)  (154766890)</li>
<li>Fixed symbolic breakpoints to work with native constructors such as <code>Array</code>, <code>Date</code>, <code>EventTarget</code>, and <code>Worker</code>. (<a href="https://commits.webkit.org/316262@main">316262@main</a>)  (157178256)</li>
<li>Fixed missing stack traces for MIME type errors when importing modules. (<a href="https://commits.webkit.org/316529@main">316529@main</a>)  (169396940)</li>
<li>Fixed the Accessibility sidebar being empty for nodes inside cross-origin iframes. (<a href="https://commits.webkit.org/316399@main">316399@main</a>)  (178562336)</li>
<li>Fixed inline style invalidation to batch <code>DOM.getAttributes</code> commands per tick in cross-origin iframes instead of issuing one command per node. (<a href="https://commits.webkit.org/316487@main">316487@main</a>)  (178830496)</li>
<li>Fixed DOM Storage read and write commands to resolve against the frame&#8217;s own origin in cross-origin iframes. (<a href="https://commits.webkit.org/316501@main">316501@main</a>)  (179249711)</li>
<li>Fixed a moved breakpoint reverting to its original location after closing and reopening Web Inspector. (<a href="https://commits.webkit.org/315585@main">315585@main</a>)  (180083858)</li>
<li>Fixed showing the formatted parameters string for prototype objects such as <code>Map.prototype</code>. (<a href="https://commits.webkit.org/315599@main">315599@main</a>)  (180298712)</li>
<li>Fixed missing formatted parameter strings for object shorthand methods and arrow functions. (<a href="https://commits.webkit.org/315723@main">315723@main</a>)  (180466459)</li>
<li>Fixed an unnecessary colon appearing in front of non-class function properties. (<a href="https://commits.webkit.org/315731@main">315731@main</a>)  (180476445)</li>
<li>Fixed a self-canceling ternary that produced an incorrect cross-axis direction in the flex overlay. (<a href="https://commits.webkit.org/316429@main">316429@main</a>)  (181198803)</li>
<li>Fixed the color picker force-converting picked colors to Display P3. (<a href="https://commits.webkit.org/316419@main">316419@main</a>)  (181201503)</li>
<li>Fixed <code>Page.searchInResources</code> silently omitting cache-backed resources from search results. (<a href="https://commits.webkit.org/316421@main">316421@main</a>)  (181202027)</li>
<li>Fixed duplicate invalid CSS declarations both incorrectly displaying as Active in the Styles sidebar. (<a href="https://commits.webkit.org/316418@main">316418@main</a>)  (181203080)</li>
<li>Fixed adopted constructable stylesheets being misclassified as User Agent stylesheets in cross-origin iframes. (<a href="https://commits.webkit.org/316433@main">316433@main</a>)  (181204768)</li>
<li>Fixed an unsigned underflow that caused the DOM agent to spuriously report power-efficient playback. (<a href="https://commits.webkit.org/316443@main">316443@main</a>)  (181205602)</li>
<li>Fixed <code>Network.setExtraHTTPHeaders</code> to replace previously set headers instead of accumulating them. (<a href="https://commits.webkit.org/316444@main">316444@main</a>)  (181282814)</li>
</ul>
<h3>WebDriver</h3>
<h4>New Features</h4>
<ul>
<li>Added WebDriver support for the Digital Credentials API, including commands to simulate wallet payloads, indefinite waits, and user rejection. (<a href="https://commits.webkit.org/316435@main">316435@main</a>)  (168941907)</li>
</ul>
<h3>WebRTC</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed the WebProcess <code>AudioSession</code> to remain active while microphone capture is live. (<a href="https://commits.webkit.org/316394@main">316394@main</a>)  (180505014)</li>
<li>Fixed the <code>configurationchange</code> event being dropped when a source-side change occurred while a <code>MediaStreamTrack</code> was muted; the event is now deferred until unmute. (<a href="https://commits.webkit.org/316301@main">316301@main</a>)  (180728609)</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Introducing the Safari MCP server for web developers</title>
		<link>https://webkit.org/blog/18136/introducing-the-safari-mcp-server-for-web-developers/</link>
		
		<dc:creator/>
		<pubDate>Wed, 01 Jul 2026 21:28:16 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=18136</guid>

					<description><![CDATA[Update: In Safari 27 beta and Safari Technology Preview 247, we’re introducing the Safari MCP server — a Model Context Protocol server for web developers that makes your web development and debugging workflow faster and more powerful.]]></description>
										<content:encoded><![CDATA[<p><strong>Update: </strong>In <a href="https://developer.apple.com/safari/resources/">Safari 27 beta</a> and <a href="https://developer.apple.com/safari/technology-preview/">Safari Technology Preview 247</a>, we’re introducing the Safari MCP server — a Model Context Protocol server for web developers that makes your web development and debugging workflow faster and more powerful. We know agents are increasingly integral to the coding process and the Safari MCP server gives your agent the ability to know how your code actually renders in the browser by connecting it to a Safari browser window.</p>
<p>Any MCP-compatible client can connect to the Safari MCP server. By connecting your agent to a Safari browser window, your agent can emulate what your users experience, giving it the information it needs to debug more autonomously, like access to the DOM, network requests, screenshots, and console output.</p>
<p>It speeds up your debugging process and lets you stay in the comfort of your terminal, which means fewer rounds of hopping windows and typing prompts to debug your code.</p>
<h2>The use cases</h2>
<p>If you build for the web, then you know about the debugging dance. It usually goes something like this:</p>
<p>You see something wrong with your site in the browser. You open the console to hunt it down. You click into the styles tab. You see what’s broken. You go back to your code to fix it. Or maybe you take a screenshot, detail the problem to your agent, and let it do the fixing for you. Hopefully it gets it right, the bug is fixed, and you can move on.</p>
<p>But when it isn’t fixed, you go through the workflow again — Browser. Prompt. Agent.</p>
<p>And again and again, until you finally squash the bug.</p>
<p>Regardless of the browser or tools you use, the debugging workflow is a lot of clicks, tools, and window hopping to make a single fix, but it doesn’t have to be that way. If you’re already using agents in your development workflow, the Safari MCP server makes your debugging faster and more efficient.</p>
<p>The Safari MCP server enables your agent to do more debugging and troubleshooting on its own. Here are just a few examples of what it can help with:</p>
<p><strong>Web development in Safari</strong>. The next time you develop in Safari, you’ll benefit from an upgraded workflow. Your agent already helps you with your code, now it can do even more by checking out how your code actually renders in Safari.</p>
<p><strong>Improve compatibility with Safari.</strong> Testing in just one browser means missing potential bugs in another, giving those users a subpar experience. With the Safari MCP server, your agent can open your site in Safari, inspect computed styles, check layout, and compare it against what you expect without switching windows.</p>
<p><strong>Analyze performance.</strong> See what parts of your site are slowing things down. The Safari MCP server lets your agent evaluate JavaScript on the page to surface performance metrics, like navigation timing and resource load times, so it can pinpoint what&#8217;s slowing your site down and work on the right fix.</p>
<p><strong>Check for accessibility.</strong> The Safari MCP server lets your agent check for common accessibility issues like missing labels, improper ARIA attributes, and poor contrast, so you can catch problems that impact your users.</p>
<p><strong>Verify any user state.</strong> Know that the page is working and looking as it should. Your agent can check the state of the form, query an element using a selector, confirm specific interactions, show different states of a checkout flow, and more. Spend less time on these manual checks and empower the agent to do it for you.</p>
<p>These are just a few of the use cases. However you decide to implement it, the Safari MCP server helps your agent do more for you and reduce all the back and forth that web development often requires. An easier workflow means more bugs squashed, happier users, and a better product.</p>
<h2>The tools</h2>
<p>Here are the available tools and what they do:</p>
<table>
<thead>
<tr>
<th>Tool</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 21ch;">browser_console_messages</td>
<td>Return buffered console logs for the current or specified tab</td>
</tr>
<tr>
<td style="min-width: 21ch;">browser_dialogs</td>
<td>List and respond to browser dialogs (accept, dismiss, or input text for JS prompts)</td>
</tr>
<tr>
<td style="min-width: 21ch;">close_tab</td>
<td>Close a browser tab by its handle</td>
</tr>
<tr>
<td style="min-width: 21ch;">create_tab</td>
<td>Create a new browser tab, optionally loading a URL</td>
</tr>
<tr>
<td style="min-width: 21ch;">evaluate_javascript</td>
<td>Execute JavaScript code within the page and return the result</td>
</tr>
<tr>
<td style="min-width: 21ch;">get_network_request</td>
<td>Get full detail for a single recorded network request (headers, body, timing)</td>
</tr>
<tr>
<td style="min-width: 21ch;">get_page_content</td>
<td>Extract text content of a page in various formats (markdown, HTML, JSON, etc.)</td>
</tr>
<tr>
<td style="min-width: 21ch;">list_network_requests</td>
<td>List network request summaries (URL, method, status, timing) for the current tab</td>
</tr>
<tr>
<td style="min-width: 21ch;">list_tabs</td>
<td>List all open browser tabs with their handles and URLs</td>
</tr>
<tr>
<td style="min-width: 21ch;">navigate_to_url</td>
<td>Navigate to a URL and return the loaded page&#8217;s content</td>
</tr>
<tr>
<td style="min-width: 21ch;">page_info</td>
<td>Get info about the current page: URL, title, and loading state</td>
</tr>
<tr>
<td style="min-width: 21ch;">page_interactions</td>
<td>Perform DOM interactions in sequence: click, type, scroll, hover, keyPress, etc.</td>
</tr>
<tr>
<td style="min-width: 21ch;">screenshot</td>
<td>Capture a screenshot of the current page as a PNG</td>
</tr>
<tr>
<td style="min-width: 21ch;">set_emulated_media</td>
<td>Emulate a CSS media type (e.g. &#8220;print&#8221;) for responsive-design testing</td>
</tr>
<tr>
<td style="min-width: 21ch;">set_viewport_size</td>
<td>Set the browser viewport size in CSS pixels</td>
</tr>
<tr>
<td style="min-width: 21ch;">switch_tab</td>
<td>Switch to a different browser tab by its handle</td>
</tr>
<tr>
<td style="min-width: 21ch;">wait_for_navigation</td>
<td>Wait for the current page to finish loading; returns final URL and title</td>
</tr>
</tbody>
</table>
<p>With the Safari MCP server, you no longer have to write the perfect prompt, carefully describing to your agent what you’re experiencing in the browser. You can give your agent the ability to find out for itself.</p>
<h2>How to get started</h2>
<h3>Safari 27 beta</h3>
<p>First, you’ll need to install <a href="https://developer.apple.com/safari/resources/">Safari 27 beta</a>. Once installed, make sure to enable web developer features and remote automation. To enable features for web developers choose Safari > Settings > Advanced > check the Show features for web developers checkbox. Then go to Safari > Settings > Developer > check &#8220;Allow remote automation and external agents.&#8221;</p>
<p>If you’re using Claude, you can use the following command in your terminal:</p>
<pre><code>claude mcp add safari-mcp -- "/usr/bin/safaridriver" --mcp
</code></pre>
<p>If you’re using Codex, you can use the following command in your terminal:</p>
<pre><code>codex mcp add safari-mcp -- "/usr/bin/safaridriver" --mcp
</code></pre>
<p>For other agents, you can put the following in your mcp.json or config.json file.</p>
<pre><code class="json">{
  <span class="string">"mcpServers"</span><span class="operator">:</span> {
    <span class="string">"safari-mcp"</span><span class="operator">:</span> {
      <span class="string">"command"</span><span class="operator">:</span> <span class="string">"/usr/bin/safaridriver"</span>,
      <span class="string">"args"</span><span class="operator">:</span> [<span class="string">"--mcp"</span>]
    }
  }
}
</code></pre>
<h3>Safari Technology Preview</h3>
<p>First, you’ll need to install <a href="https://developer.apple.com/safari/technology-preview/">Safari Technology Preview</a>. Once installed, make sure you enable Safari Settings > Advanced > Show features for web developers. Then go to Safari Settings > Developer > Enable remote automation and external agents.</p>
<p>If you’re using Claude, you can use the following command in your terminal:</p>
<pre><code>claude mcp add safari-mcp-stp -- "/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver" --mcp
</code></pre>
<p>If you’re using Codex, you can use the following command in your terminal:</p>
<pre><code>codex mcp add safari-mcp-stp -- "/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver" --mcp
</code></pre>
<p>For other agents, you can put the following in your <code>mcp.json</code> or <code>config.json</code> :</p>
<pre><code class="json"><span class="string">"safari-mcp-stp"</span><span class="operator">:</span> {
  <span class="string">"command"</span><span class="operator">:</span> <span class="string">"/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver"</span>,
  <span class="string">"args"</span><span class="operator">:</span> [<span class="string">"--mcp"</span>] 
}
</code></pre>
<p>Note that while the above code names the server <code>safari-mcp-stp</code>, you can name it whatever you like, even just <code>safari</code>. Once you have the Safari MCP server installed, try one of the following prompts:</p>
<pre><code>Find bugs on my site in Safari
</code></pre>
<pre><code>How accessible is my site in Safari?
</code></pre>
<pre><code>See how my website performs in Safari
</code></pre>
<p>While each agent works a little differently, it shouldn’t need to be told to use the Safari MCP server explicitly — it’ll figure it out on its own. Simple prompts like the ones above are enough to kickstart the MCP.</p>
<p>Here’s how a conversation with an agent using the Safari MCP server might go:</p>
<div style="background:#1a1a1a; color:#e0e0e0; border-radius:8px; padding:20px; font-family:'Courier New', monospace; font-size:0.9em; width:100%; box-sizing:border-box; line-height:1.6;">
<div style="margin-bottom:1em; text-indent:0;"><span style="color:#0a84ff; font-weight:bold;">You:</span> Got a bug report — something&#8217;s broken in Safari on the flight page. Can you figure out what&#8217;s going on?</div>
<div style="margin-bottom:1em; text-indent:0;"><span style="color:#aaa; font-weight:bold;">Agent:</span> Sure, let me take a look.</div>
<div style="margin-bottom:1em; text-indent:0;"><span style="color:#aaa; font-weight:bold;">Agent:</span> I found two distinct bugs on the flight page in Safari. Want me to fix them both?</div>
<div style="margin-bottom:1em; text-indent:0;"><span style="color:#0a84ff; font-weight:bold;">You:</span> Yes. Anything else here that might be causing problems for Safari users?</div>
<div style="text-indent:0;"><span style="color:#aaa; font-weight:bold;">Agent:</span> Yes, two more things worth flagging. The results reveal animation is silently broken and the API server startup log is wrong. Should I tackle both as well?</div>
</p></div>
<p>&nbsp;</p>
<p>All you need is an initial request to get started, and with the help of the Safari MCP server, your agent can take it from there.</p>
<p>The Safari MCP server runs entirely on your local machine and makes no network calls of its own. It also does not have access to your personal information in Safari (e.g. AutoFill or other browser activity). When it captures page content, screenshots, or console logs, that data goes directly to the agent you&#8217;re running — not to Apple. What happens to that data from there depends on the agent and model you&#8217;re using. As with any agent you give access to your browser, only use ones you trust.</p>
<h2>Why we built this</h2>
<p>There are many ways to build for the web, both with and without AI. If AI is a part of your workflow, we think this tool will help make it even more productive. And if it isn’t, that’s OK too.</p>
<p>By creating this resource, we hope to make it easier than ever to test and debug in Safari by helping your agent understand how things look and work in the browser.</p>
<p>If you end up giving it a try or if this is your first time using an MCP server, let us know what you think.</p>
<p>Find us online: Saron Yitbarek on <a href="https://bsky.app/profile/saron.bsky.social">BlueSky</a>, Jen Simmons on <a href="https://bsky.app/profile/jensimmons.bsky.social">Bluesky</a> / <a href="https://front-end.social/@jensimmons">Mastodon</a>, and Jon Davis on <a href="https://bsky.app/profile/jondavis.bsky.social">Bluesky</a> / <a href="https://mastodon.social/@jondavis">Mastodon</a>. If you run into any issues, file a <a href="https://bugs.webkit.org/">WebKit bug report</a>. Filing issues really does make a difference.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Release Notes for Safari Technology Preview 247</title>
		<link>https://webkit.org/blog/18133/release-notes-for-safari-technology-preview-247/</link>
		
		<dc:creator/>
		<pubDate>Wed, 01 Jul 2026 21:28:08 +0000</pubDate>
				<category><![CDATA[Safari Technology Preview]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=18133</guid>

					<description><![CDATA[Safari Technology Preview Release 247 is now available for download for macOS Golden Gate and macOS Tahoe.]]></description>
										<content:encoded><![CDATA[<p><a href="https://webkit.org/blog/6017/introducing-safari-technology-preview/">Safari Technology Preview</a> Release 247 is now <a href="https://developer.apple.com/safari/resources/">available for download</a> for macOS Golden Gate and macOS Tahoe. If you already have Safari Technology Preview installed, you can update it in System Settings under General → Software Update.</p>
<p>This release includes WebKit changes between: <a href="https://github.com/WebKit/WebKit/compare/5826ce9b58c29fc5441c1e7c3fc1f981174c495e...bb9e30c2f7123d626ed9f0f271e31a0e0657d0e7">314716@main&#8230;315846@main</a>.</p>
<h3>Accessibility</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed VoiceOver jumping to the top of the page when navigating to an element that immediately becomes accessibility-ignored via JavaScript. (<a href="https://commits.webkit.org/315078@main">315078@main</a>)  (179065364)</li>
<li>Fixed VoiceOver reporting the Recent Events table on parks.wa.gov as empty. (<a href="https://commits.webkit.org/314901@main">314901@main</a>)  (179156593)</li>
<li>Fixed VoiceOver not exposing <code>aria-actions</code> custom actions when the action target is accessibility-ignored. (<a href="https://commits.webkit.org/315097@main">315097@main</a>)  (179286650)</li>
<li>Fixed an <code>&lt;a&gt;</code> element with a click handler but no <code>href</code> not being exposed as a link. (<a href="https://commits.webkit.org/315102@main">315102@main</a>)  (179398579)</li>
</ul>
<h3>CSS</h3>
<h4>New Features</h4>
<ul>
<li>Added support for <code>calc-mix()</code>. (<a href="https://commits.webkit.org/314719@main">314719@main</a>)  (176199063)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed scroll overcompensation of fixed, nested anchor-positioned elements, so they no longer lose their position when scrolling. (<a href="https://commits.webkit.org/314757@main">314757@main</a>)  (174010503)</li>
<li>Fixed an issue where <code>font-synthesis</code> incorrectly applied synthetic oblique to variable fonts declared with <code>@font-face</code>. (<a href="https://commits.webkit.org/314814@main">314814@main</a>)  (178698772)</li>
<li>Fixed synthetic bold not being applied for a variable font whose <code>@font-face</code> <code>font-weight</code> descriptor explicitly restricts it to <code>normal</code>. (<a href="https://commits.webkit.org/314537@main">314537@main</a>)  (179001275)</li>
<li>Fixed an issue where CSS math functions produced an incorrect signed zero for subtraction, <code>min()</code>, <code>max()</code>, <code>clamp()</code>, and <code>mod()</code>. (<a href="https://commits.webkit.org/315188@main">315188@main</a>)  (179534440)</li>
<li>Fixed an issue where <code>input[type=hidden]</code> was not set to <code>display: none !important</code> in the user-agent stylesheet. (<a href="https://commits.webkit.org/315559@main">315559@main</a>)  (180137214)</li>
</ul>
<h3>Fonts</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where synthetic bold incorrectly added advance width to zero-advance glyphs. (<a href="https://commits.webkit.org/315157@main">315157@main</a>)  (179418570)</li>
</ul>
<h3>Forms</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where a positive <code>margin-top</code> on a <code>&lt;legend&gt;</code> element inside a <code>&lt;fieldset&gt;</code> did not shift the fieldset down. (<a href="https://commits.webkit.org/315391@main">315391@main</a>)  (141267953)</li>
</ul>
<h3>HTML</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where <code>&lt;link rel=preload as=json&gt;</code> incorrectly triggered a preload. (<a href="https://commits.webkit.org/315422@main">315422@main</a>)  (179843455)</li>
<li>Fixed an issue where the deprecated <code>align="center"</code> attribute was not treated as identical to <code>align="middle"</code> per spec. (<a href="https://commits.webkit.org/315531@main">315531@main</a>)  (180128710)</li>
</ul>
<h3>JavaScript</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where <code>Temporal.Instant</code> operations were not aligned with the spec&#8217;s abstract operations. (<a href="https://commits.webkit.org/315377@main">315377@main</a>)  (179844859)</li>
</ul>
<h3>MathML</h3>
<h4>New Features</h4>
<ul>
<li>Added support for embellished operator detection through <code>mrow</code> for underover layout. (<a href="https://commits.webkit.org/314924@main">314924@main</a>)  (173192995)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed MathML operators routed through <code>MathOperator</code> being invisible when their glyph only exists in a fallback font. (<a href="https://commits.webkit.org/314928@main">314928@main</a>)  (178096170)</li>
<li>Fixed MathML to use MathML Core fallback values for script layout constants. (<a href="https://commits.webkit.org/315004@main">315004@main</a>)  (179177178)</li>
</ul>
<h3>Media</h3>
<h4>New Features</h4>
<ul>
<li>Added support for overriding color space for hardware video decoders in WebCodecs. (<a href="https://commits.webkit.org/314887@main">314887@main</a>)  (178717498)</li>
<li>Added support for mapping <code>nextslide</code> and <code>previousslide</code> MediaSession actions to <code>nexttrack</code> and <code>previoustrack</code> platform commands, so pressing next/previous track invokes a registered slide handler when no direct track handler is registered. (<a href="https://commits.webkit.org/314839@main">314839@main</a>)  (178744268)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed media controls not appearing when tapping videos in the LinkedIn feed on iPad. (<a href="https://commits.webkit.org/315049@main">315049@main</a>)  (171231918)</li>
<li>Fixed an issue where the <code>MediaSource</code> text-track removal loop always processed only the last track. (<a href="https://commits.webkit.org/315310@main">315310@main</a>)  (179508398)</li>
<li>Fixed an issue where <code>isValidVideoFrameBufferInit()</code> tested <code>displayWidth</code> and <code>displayHeight</code> presence against themselves instead of the correct properties. (<a href="https://commits.webkit.org/315401@main">315401@main</a>)  (179514279)</li>
<li>Fixed an issue where <code>MediaMetadata</code> artwork <code>sizes</code> parsing read the wrong substring for the height value. (<a href="https://commits.webkit.org/315402@main">315402@main</a>)  (179523057)</li>
<li>Fixed an issue where the <code>pictureInPictureElement</code> getter inverted the shadow-host connectivity check. (<a href="https://commits.webkit.org/315403@main">315403@main</a>)  (179675087)</li>
</ul>
<h3>Model Element</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed setting the <code>entityTransform</code> on a <code>&lt;model&gt;</code> element while the model is unloaded or hidden. (<a href="https://commits.webkit.org/314951@main">314951@main</a>)  (179114750)</li>
<li>Fixed <code>&lt;model&gt;</code> elements losing gesture interactivity after the model player is reloaded (for example, when the model scrolls out of and back into the viewport). (<a href="https://commits.webkit.org/315026@main">315026@main</a>)  (179249565)</li>
</ul>
<h3>Networking</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where WebKit refused to load valid ASCII domains starting with <code>xn--</code> that did not pass strict IDNA 2008 validation, aligning behavior with the WHATWG URL Standard. <code>xn--</code> is the prefix of a punycode-encoded non-ASCII domain. (<a href="https://commits.webkit.org/314820@main">314820@main</a>)  (177686282)</li>
<li>Fixed an issue where arbitrary <code>Content-*</code> headers from <code>304</code> responses were not used to update cached entries. (<a href="https://commits.webkit.org/315449@main">315449@main</a>)  (179864251)</li>
<li>Fixed an issue where the <code>Cache-Control</code> request directives <code>max-age</code>, <code>min-fresh</code>, and <code>no-store</code> were not honored. (<a href="https://commits.webkit.org/315447@main">315447@main</a>)  (179865576)</li>
<li>Fixed an issue where <code>Cache-Control: public</code> was not honored on responses with unknown status codes. (<a href="https://commits.webkit.org/315445@main">315445@main</a>)  (179870099)</li>
<li>Fixed an issue where the HTTP cache did not store responses with explicit freshness for all status codes. (<a href="https://commits.webkit.org/315450@main">315450@main</a>)  (179871690)</li>
</ul>
<h3>Rendering</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed <code>text-wrap: balance</code> not being applied to content with <code>-webkit-line-clamp</code>. (<a href="https://commits.webkit.org/314783@main">314783@main</a>)  (172715503)</li>
<li>Fixed an issue where text changes that did not modify the text element&#8217;s size in a flex layout on a new compositing layer did not trigger re-rendering. (<a href="https://commits.webkit.org/315173@main">315173@main</a>)  (179292409)</li>
<li>Fixed an issue where an underline was drawn twice on <code>&lt;sup&gt;</code> elements. (<a href="https://commits.webkit.org/315220@main">315220@main</a>)  (179537119)</li>
<li>Fixed an issue where an underline under a <code>&lt;sup&gt;</code> element was offset by one device pixel from the rest of the line on subpixel displays. (<a href="https://commits.webkit.org/315316@main">315316@main</a>)  (179586525)</li>
<li>Fixed an issue where the <code>ex</code> unit in <code>text-box-edge</code> misplaced the propagated underline, causing it to be painted twice. (<a href="https://commits.webkit.org/315331@main">315331@main</a>)  (179769451)</li>
<li>Fixed an issue where <code>min-width</code> was not honored over <code>max-width</code> when sizing a shrink-to-fit container around a replaced element. (<a href="https://commits.webkit.org/315396@main">315396@main</a>)  (179935558)</li>
</ul>
<h3>SVG</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed SVG applying <code>text-decoration</code> to elements with <code>display: contents</code>. (<a href="https://commits.webkit.org/314830@main">314830@main</a>)  (85691104)</li>
<li>Fixed SVG <code>&lt;text&gt;</code> with <code>textLength</code> scaling each glyph separately when <code>x</code> or <code>y</code> is a list. (<a href="https://commits.webkit.org/315146@main">315146@main</a>)  (94161279)</li>
<li>Fixed an issue where <code>box-shadow</code> was not drawn on fixed-positioned SVG elements. (<a href="https://commits.webkit.org/315468@main">315468@main</a>)  (97098951)</li>
<li>Fixed an issue where an SVG filter applied via CSS to an element positioned below the viewport rendered a spurious black square at the viewport origin. (<a href="https://commits.webkit.org/315329@main">315329@main</a>)  (177482001)</li>
<li>Fixed <code>IntersectionObserver</code> not computing intersections for SVG element roots. (<a href="https://commits.webkit.org/314837@main">314837@main</a>)  (177807041)</li>
<li>Fixed SVG vertical <code>&lt;text&gt;</code> to honor the CSS <code>text-orientation</code> property instead of only the deprecated <code>glyph-orientation-vertical</code> presentation attribute. (<a href="https://commits.webkit.org/315080@main">315080@main</a>)  (178044217)</li>
<li>Fixed an issue where <code>getRotationOfChar()</code> returned approximately 360° instead of 0° for full-turn rotations after normalisation into the [0°, 360°) range. (<a href="https://commits.webkit.org/315293@main">315293@main</a>)  (178044934)</li>
<li>Fixed an issue where a non-BMP character before a <code>&lt;tspan&gt;</code> boundary shifted the <code>x</code> and <code>y</code> value lists by one position. (<a href="https://commits.webkit.org/315418@main">315418@main</a>)  (178360036)</li>
<li>Fixed interpolation of arc flags in the <code>d</code> property to treat them as non-zero booleans. (<a href="https://commits.webkit.org/314745@main">314745@main</a>)  (178950624)</li>
<li>Fixed <code>pathFromEllipseElement</code> to honor <code>auto</code> values for <code>rx</code> and <code>ry</code>, so APIs such as <code>getTotalLength()</code> return the correct length for ellipses. (<a href="https://commits.webkit.org/314846@main">314846@main</a>)  (178959205)</li>
<li>Fixed animated GIFs freezing when presentation attributes are changed on an SVG image referenced by a <code>&lt;use&gt;</code> element. (<a href="https://commits.webkit.org/315094@main">315094@main</a>)  (179414226)</li>
<li>Fixed an issue where <code>getBoundingClientRect()</code> on an SVG <code>&lt;tspan&gt;</code> element returned the bounds of the entire <code>&lt;text&gt;</code> element instead of the <code>&lt;tspan&gt;</code>&#8216;s own area. (<a href="https://commits.webkit.org/315234@main">315234@main</a>)  (179626476)</li>
<li>Fixed an issue where a nested <code>clip-path</code> on a <code>&lt;clipPath&gt;</code> element ignored css zoom. (<a href="https://commits.webkit.org/315562@main">315562@main</a>)  (180162723)</li>
</ul>
<h3>Scrolling</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where <code>scrollIntoView</code> with <code>nearest</code> alignment incorrectly aligned to the far edge for an oversized target positioned before the scrollport. (<a href="https://commits.webkit.org/315225@main">315225@main</a>)  (106356373)</li>
<li>Fixed a regression on macOS 26 where horizontal rubber-banding interfered with vertical scrolling. (<a href="https://commits.webkit.org/315424@main">315424@main</a>)  (165449829)</li>
<li>Fixed an issue where scroll snapping selected a snap point that overshot the destination instead of the closest one in the scroll direction. (<a href="https://commits.webkit.org/315522@main">315522@main</a>)  (179549119)</li>
<li>Fixed an issue where interrupting a smooth scroll with a new <code>scrollTo()</code> call to a different target fired the <code>scrollend</code> event at the wrong position. (<a href="https://commits.webkit.org/315471@main">315471@main</a>)  (179551854)</li>
<li>Fixed an issue where re-snapping after a layout change moved away from a valid scroll position when the snap area was larger than the snapport. (<a href="https://commits.webkit.org/315291@main">315291@main</a>)  (179553122)</li>
</ul>
<h3>Security</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where Content Security Policy <code>'self'</code> did not match script sources in opaque-origin HTTP(S) documents. (<a href="https://commits.webkit.org/314912@main">314912@main</a>)  (178638597)</li>
<li>Fixed an issue where Content Security Policy incorrectly applied <code>script-src</code> to JSON module imports instead of <code>connect-src</code>. (<a href="https://commits.webkit.org/315497@main">315497@main</a>)  (180006320)</li>
</ul>
<h3>Spatial Web</h3>
<h4>Known Issues</h4>
<ul>
<li>WebXR might not render when you use Simulator.  (178666073)
<p><strong>Workaround:</strong> Use an Apple Vision Pro device instead of Simulator.</p>
</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where transforming the camera instead of the model in a <code>&lt;model&gt;</code> element led to undesirable lighting effects. (<a href="https://commits.webkit.org/312407@main">312407@main</a>)  (179522538)</li>
</ul>
<h4>Deprecations</h4>
<ul>
<li>Removed the Spatial Backdrop developer preview in favor of the Immersive API. (<a href="https://commits.webkit.org/315100@main">315100@main</a>)  (160271766)</li>
</ul>
<h3>Text</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed a line break appearing after a U+201D Right Double Quotation Mark. (<a href="https://commits.webkit.org/314829@main">314829@main</a>)  (177952069)</li>
</ul>
<h3>Web API</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where the URL Pattern tokenizer emitted a spurious zero-length <code>Regexp</code> token for empty regexp groups. (<a href="https://commits.webkit.org/315289@main">315289@main</a>)  (179452346)</li>
</ul>
<h3>WebDriver</h3>
<h4>New Features</h4>
<ul>
<li>Allow your agent to connect to a Safari browser for development and debugging via the Safari MCP server.  (176038457)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where the WebDriver full page screenshot was clipped to the viewport dimensions instead of the full page. (<a href="https://commits.webkit.org/315337@main">315337@main</a>)  (179840186)</li>
</ul>
<h3>WebGL</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed a regression where a WebGL canvas was filled with opaque content that hid stacked canvases beneath it. (<a href="https://commits.webkit.org/315018@main">315018@main</a>)  (175352260)</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Release Notes for Safari Technology Preview 246</title>
		<link>https://webkit.org/blog/18128/release-notes-for-safari-technology-preview-246/</link>
		
		<dc:creator/>
		<pubDate>Wed, 17 Jun 2026 23:08:46 +0000</pubDate>
				<category><![CDATA[Safari Technology Preview]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=18128</guid>

					<description><![CDATA[Safari Technology Preview Release 246 is now available for download for macOS Golden Gate and macOS Tahoe.]]></description>
										<content:encoded><![CDATA[<p><a href="https://webkit.org/blog/6017/introducing-safari-technology-preview/">Safari Technology Preview</a> Release 246 is now <a href="https://developer.apple.com/safari/resources/">available for download</a> for macOS Golden Gate and macOS Tahoe. If you already have Safari Technology Preview installed, you can update it in System Settings under General → Software Update.</p>
<p>This release includes WebKit changes between: <a href="https://github.com/WebKit/WebKit/compare/69d300842d37d62d8e54a0e11c66dfcafec72e41...0bc15c78e5116da8de86f87c6deb9d19f0eba6ec">313555@main…315033@main</a>.</p>
<h3>Accessibility</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue preventing VoiceOver from following <code>focus()</code> calls for newly added elements. (<a href="https://commits.webkit.org/313425@main">313425@main</a>)  (177167634)</li>
<li>Fixed role computation for elements with prefixes. (<a href="https://commits.webkit.org/314273@main">314273@main</a>)  (178399441)</li>
</ul>
<h3>CSS</h3>
<h4>New Features</h4>
<ul>
<li>Added support for <code>&lt;image&gt;</code> values in <code>light-dark(&lt;image&gt;, &lt;image&gt;)</code>. (<a href="https://commits.webkit.org/314244@main">314244@main</a>)  (172290840)</li>
<li>Added support for using the CSS <code>attr()</code> substitution function on pseudo-elements with non-trivial originating elements. (<a href="https://commits.webkit.org/313684@main">313684@main</a>)  (177595332)</li>
<li>Added support for <code>image(&lt;color&gt;)</code> in the <code>&lt;image&gt;</code> value type. (<a href="https://commits.webkit.org/314204@main">314204@main</a>)  (178189616)</li>
<li>Enabled the <code>font-variant-emoji</code> property in preview. (<a href="https://commits.webkit.org/314117@main">314117@main</a>)  (178193814)</li>
<li>Enabled <code>word-break: auto-phrase</code> in preview. (<a href="https://commits.webkit.org/314118@main">314118@main</a>)  (178193962)</li>
<li>Added support for <code>color-mix()</code> with more than two colors. (<a href="https://commits.webkit.org/314272@main">314272@main</a>)  (178349405)</li>
<li>Added support for the <code>alpha()</code> relative color function. (<a href="https://commits.webkit.org/314397@main">314397@main</a>)  (178551773)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed <code>aspect-ratio</code> intrinsic-size handling in flex layout to align with the specification. (<a href="https://commits.webkit.org/313536@main">313536@main</a>)  (83240099)</li>
<li>Fixed <code>text-decoration-thickness</code> propagation to inner spans with non-inline style. (<a href="https://commits.webkit.org/314502@main">314502@main</a>)  (111015539)</li>
<li>Fixed unnecessary text truncation that could occur with always-on scrollbars. (<a href="https://commits.webkit.org/313584@main">313584@main</a>)  (148428628)</li>
<li>Fixed CSS Container Style Queries to work when the container has <code>display: contents</code>. (<a href="https://commits.webkit.org/313677@main">313677@main</a>)  (164414720)</li>
<li>Fixed CSS Style Container Query to recognize the default value of a custom property in multiline cases. (<a href="https://commits.webkit.org/313957@main">313957@main</a>)  (165627262)</li>
<li>Fixed CSS Anchor Positioning so that absolutely positioned elements no longer anchor to viewport-fixed-position elements unexpectedly. (<a href="https://commits.webkit.org/314706@main">314706@main</a>)  (170323196)</li>
<li>Fixed <code>-webkit-box-pack</code> to account for <code>box-direction</code> and to handle overflow repositioning correctly. (<a href="https://commits.webkit.org/313862@main">313862@main</a>)  (174588996)</li>
<li>Fixed an emoji reaction overlapping the comment code box on GitHub. (<a href="https://commits.webkit.org/311084@main">311084@main</a>)  (174652842)</li>
<li>Fixed <code>:hover</code> state to repaint correctly on the customizable <code>&lt;select&gt;</code> element. (<a href="https://commits.webkit.org/310623@main">310623@main</a>)  (175273152)</li>
<li>Fixed text in nested CSS Subgrid with <code>overflow: hidden</code> clipping content on subsequent items. (<a href="https://commits.webkit.org/313503@main">313503@main</a>)  (175877530)</li>
<li>Fixed an interaction between an <code>img</code> with <code>max-width</code> and surrounding elements that caused the parent&#8217;s layout to compute incorrectly. (<a href="https://commits.webkit.org/313105@main">313105@main</a>)  (176889859)</li>
<li>Fixed incorrect margin offsets for inline <code>&lt;div&gt;</code> positioning to fix the broken layout of paragraph spacing on some sites. (<a href="https://commits.webkit.org/313502@main">313502@main</a>)  (177139092)</li>
<li>Fixed shrink-to-fit boxes to update their width when they gain or lose a scrollbar. (<a href="https://commits.webkit.org/313390@main">313390@main</a>)  (177172896)</li>
<li>Fixed CSS <code>zoom</code> to be animatable by the computed value. (<a href="https://commits.webkit.org/313735@main">313735@main</a>)  (177411607)</li>
<li>Fixed preferred width to trim trailing whitespace before a preserved newline. (<a href="https://commits.webkit.org/313480@main">313480@main</a>)  (177426037)</li>
<li>Fixed inline layout to apply margins of preceding block content at the line start eagerly when block-in-inline content is involved. (<a href="https://commits.webkit.org/313489@main">313489@main</a>)  (177438841)</li>
<li>Fixed CSS <code>attr()</code> to align with disallowing the <code>&lt;url&gt;</code> type. (<a href="https://commits.webkit.org/313593@main">313593@main</a>)  (177540489)</li>
<li>Fixed CSS attribute selector case-insensitivity handling for HTML attributes. (<a href="https://commits.webkit.org/313654@main">313654@main</a>)  (177547701)</li>
<li>Fixed <code>::first-letter</code> to use the correct definition of punctuation. (<a href="https://commits.webkit.org/313652@main">313652@main</a>)  (177599506)</li>
<li>Fixed <code>offset-path</code> to respect <code>&lt;coord-box&gt;</code> when blending <code>shape()</code> and <code>basic-shape</code> paths. (<a href="https://commits.webkit.org/313737@main">313737@main</a>)  (177685457)</li>
<li>Fixed stretch-fit width with <code>aspect-ratio</code> providing a definite cross size to flex items when it should not. (<a href="https://commits.webkit.org/313723@main">313723@main</a>)  (177705930)</li>
<li>Fixed an aspect-ratio flex container resolving descendant percentage heights against a stale logical height. (<a href="https://commits.webkit.org/313727@main">313727@main</a>)  (177711905)</li>
<li>Fixed <code>inline-block</code> baseline to fall back to the bottom margin edge when the content has no in-flow line boxes. (<a href="https://commits.webkit.org/313769@main">313769@main</a>)  (177753094)</li>
<li>Fixed programmatic focus after keyboard interaction to match <code>:focus-visible</code>. (<a href="https://commits.webkit.org/314012@main">314012@main</a>)  (177850766)</li>
<li>Fixed <code>@font-face</code> <code>font-style</code> to serialize &#8216;oblique 0deg&#8217; as &#8216;normal&#8217;. (<a href="https://commits.webkit.org/314128@main">314128@main</a>)  (178185291)</li>
<li>Fixed serialization of explicit <code>font-variant</code> longhands set after a system font. (<a href="https://commits.webkit.org/314292@main">314292@main</a>)  (178251443)</li>
<li>Fixed <code>CSSFontFeatureValuesRule.fontFamily</code> to be settable rather than <code>readonly</code>. (<a href="https://commits.webkit.org/314602@main">314602@main</a>)  (178323504)</li>
<li>Fixed <code>font-style: oblique</code> to be clamped against the font&#8217;s slant range rather than the <code>@font-face</code> weight range. (<a href="https://commits.webkit.org/314280@main">314280@main</a>)  (178324521)</li>
<li>Fixed <code>font-style: oblique</code> angle being applied to the variable font &#8216;slnt&#8217; axis with the wrong sign. (<a href="https://commits.webkit.org/314399@main">314399@main</a>)  (178326843)</li>
<li>Fixed <code>background</code> and <code>mask</code> coordinated property list resolved values to match the specification. (<a href="https://commits.webkit.org/314242@main">314242@main</a>)  (178378309)</li>
<li>Fixed longer hue interpolation when one input is <code>none</code>. (<a href="https://commits.webkit.org/314327@main">314327@main</a>)  (178476769)</li>
<li>Fixed line-through to render with the correct thickness over a descendant inline box. (<a href="https://commits.webkit.org/314391@main">314391@main</a>)  (178547557)</li>
<li>Fixed <code>font-synthesis</code> to avoid synthesizing styles outside of a font&#8217;s variable axis range. (<a href="https://commits.webkit.org/314537@main">314537@main</a>)  (178550149)</li>
<li>Fixed <code>font-style: italic</code> to slant a variable font whose <code>@font-face</code> uses an oblique angle. (<a href="https://commits.webkit.org/314681@main">314681@main</a>)  (178566326)</li>
<li>Fixed SVG intrinsic sizing so that <code>height: max-content</code> uses the used width rather than the default width. (<a href="https://commits.webkit.org/314556@main">314556@main</a>)  (178712792)</li>
<li>Fixed <code>color-mix()</code> to allow percentages that sum to zero. (<a href="https://commits.webkit.org/314577@main">314577@main</a>)  (178758710)</li>
<li>Fixed <code>color-mix()</code> resolution for the new 0% rules. (<a href="https://commits.webkit.org/314714@main">314714@main</a>)  (178921722)</li>
<li>Fixed a flex item with <code>min-width: min-content</code> being clamped to a smaller <code>max-width</code>. (<a href="https://commits.webkit.org/314599@main">314599@main</a>)  (178777567)</li>
</ul>
<h3>Canvas</h3>
<h4>New Features</h4>
<ul>
<li>Made the radii argument of <code>CanvasPath.roundRect()</code> optional. (<a href="https://commits.webkit.org/313882@main">313882@main</a>)  (177944903)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed canvas 2D context to set the <code>origin-clean</code> flag when reset. (<a href="https://commits.webkit.org/313824@main">313824@main</a>)  (177858398)</li>
<li>Fixed canvas <code>fillText</code> with <code>textAlign=center</code> misplacing complex-shaped text. (<a href="https://commits.webkit.org/314522@main">314522@main</a>)  (178682402)</li>
</ul>
<h3>Editing</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed typing Hindi (InScript) input on Google Docs. (<a href="https://commits.webkit.org/297270@main">297270@main</a>)  (177643899)</li>
</ul>
<h3>Forms</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed identically sized buttons to render with consistent corner radius. (<a href="https://commits.webkit.org/313535@main">313535@main</a>)  (173786057)</li>
<li>Fixed a box with percentage offset (e.g. <code>top: 100%</code>) being mispositioned when its containing block is out-of-flow with percentage height. (<a href="https://commits.webkit.org/313364@main">313364@main</a>)  (177181803)</li>
</ul>
<h3>HTML</h3>
<h4>New Features</h4>
<ul>
<li>Added support for popover close watcher integration. (<a href="https://commits.webkit.org/313838@main">313838@main</a>)  (129116634)</li>
<li>Added support for SVG <code>&lt;a&gt;</code> as an argument to <code>Origin.from()</code>. (<a href="https://commits.webkit.org/314287@main">314287@main</a>)  (178426374)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed popover light dismiss to account for input buttons. (<a href="https://commits.webkit.org/313840@main">313840@main</a>)  (171352032)</li>
<li>Fixed popover light dismiss to account for disabled command buttons. (<a href="https://commits.webkit.org/314400@main">314400@main</a>)  (171358576)</li>
<li>Fixed a regression that broke <code>pushState</code> with custom application URL schemes. (<a href="https://commits.webkit.org/312738@main">312738@main</a>)  (177547157)</li>
<li>Fixed <code>outerHTML</code> setter to align with the HTML standard. (<a href="https://commits.webkit.org/313795@main">313795@main</a>)  (177788638)</li>
<li>Fixed fragment parsing of <code>xmlns=""</code> inheritance and <code>annotation-xml</code> encoding. (<a href="https://commits.webkit.org/313803@main">313803@main</a>)  (177808494)</li>
<li>Fixed <code>createHTMLDocument()</code> to no longer leave the body in a parsing state. (<a href="https://commits.webkit.org/314295@main">314295@main</a>)  (178440940)</li>
<li>Fixed text fragment matching so that a prefix is no longer matched outside of a word boundary near the start of the document. (<a href="https://commits.webkit.org/314323@main">314323@main</a>)  (178467104)</li>
</ul>
<h3>Images</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed images appearing then quickly disappearing on OpenTable search results. (<a href="https://commits.webkit.org/313572@main">313572@main</a>)  (176275269)</li>
<li>Fixed <code>&lt;picture&gt;</code> <code>&lt;source&gt;</code> candidates being speculatively preloaded even when the inner <code>&lt;img&gt;</code> has <code>loading=lazy</code>. (<a href="https://commits.webkit.org/313833@main">313833@main</a>)  (177833110)</li>
<li>Fixed <code>HTMLImageElement.decode()</code> to no longer resolve spuriously after adoption, <code>src</code> change, or cached-image reuse. (<a href="https://commits.webkit.org/314536@main">314536@main</a>)  (178118012)</li>
</ul>
<h3>JavaScript</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed multiple <code>TypedArray</code> constructor edge cases involving buffer sequences to align with the specification. (<a href="https://commits.webkit.org/313401@main">313401@main</a>)  (176724918)</li>
<li>Fixed <code>WebAssembly.Memory</code> and <code>WebAssembly.Module</code> to align their cloning and transferring behavior with <code>SharedArrayBuffer</code>. (<a href="https://commits.webkit.org/313482@main">313482@main</a>)  (176792374)</li>
<li>Fixed <code>Array.prototype.join</code> to include prototype elements added during element <code>toString</code> invocation. (<a href="https://commits.webkit.org/314210@main">314210@main</a>)  (178055452)</li>
</ul>
<h3>Media</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed WebVTT to not display cues that are larger than the viewport. (<a href="https://commits.webkit.org/314333@main">314333@main</a>)  (136809012)</li>
<li>Fixed <code>&lt;audio controls&gt;</code> to not show the &#8220;Subtitles&#8221; option when no subtitle track is present. (<a href="https://commits.webkit.org/311465@main">311465@main</a>)  (175357130)</li>
<li>Fixed MSE <code>SourceBuffer.remove()</code> to no longer remove an extra sample, and fixed buffered ranges to cover the correct ranges. (<a href="https://commits.webkit.org/313383@main">313383@main</a>)  (177065364)</li>
<li>Fixed an HTMLMediaElement that doesn&#8217;t display in an infinite scrolling webpage to use a viewport listener that notifies the media player about the visibility of the element. (<a href="https://commits.webkit.org/311380@main">311380@main</a>)  (177081214)</li>
<li>Fixed EME to use a 10 second key wait timeout. (<a href="https://commits.webkit.org/313873@main">313873@main</a>)  (177936893)</li>
<li>Fixed EME OCDM to prevent a spurious <code>keystatuses</code> event when all keys have expired. (<a href="https://commits.webkit.org/313876@main">313876@main</a>)  (177939767)</li>
<li>Fixed <code>getSupportedCapabilitiesForAudioVideoType</code> (EME) to no longer include unsupported capabilities. (<a href="https://commits.webkit.org/314032@main">314032@main</a>)  (178142768)</li>
<li>Fixed <code>MediaSession.setActionHandler</code> to not throw an exception when called. (<a href="https://commits.webkit.org/314546@main">314546@main</a>)  (178167294)</li>
<li>Fixed <code>AudioData.copyTo</code> to throw <code>RangeError</code> when <code>frameOffset</code> equals <code>numberOfFrames</code>. (<a href="https://commits.webkit.org/314451@main">314451@main</a>)  (178609688)</li>
<li>Fixed MIDI and AVI MIME signature matching due to a typo in MIME sniffing. (<a href="https://commits.webkit.org/314499@main">314499@main</a>)  (178661530)</li>
<li>Fixed <code>PannerNode</code> to no longer produce non-finite samples for edge-case distance parameters. (<a href="https://commits.webkit.org/314608@main">314608@main</a>)  (178784571)</li>
</ul>
<h3>Networking</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed URL parsing for <code>sendBeacon()</code> and the Media Session API. (<a href="https://commits.webkit.org/313403@main">313403@main</a>)  (177330315)</li>
</ul>
<h3>Rendering</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed Google search-suggestion font sizes increasing on rotation from portrait to landscape. (<a href="https://commits.webkit.org/313547@main">313547@main</a>)  (113801810)</li>
<li>Fixed misrendering of Pahawh Hmong text on Wikipedia. (<a href="https://commits.webkit.org/313458@main">313458@main</a>)  (167446860)</li>
<li>Fixed a black region appearing on the right side of swift.org when the sidebar is open. (<a href="https://commits.webkit.org/313513@main">313513@main</a>)  (173191807)</li>
<li>Fixed <code>&lt;legend&gt;</code> to mask the <code>&lt;fieldset&gt;</code>&#8216;s border correctly when it has a negative left margin. (<a href="https://commits.webkit.org/313863@main">313863@main</a>)  (174185071)</li>
<li>Fixed a regression that caused incorrect layout in some content using <code>stretch</code>. (<a href="https://commits.webkit.org/309433@main">309433@main</a>)  (176398251)</li>
<li>Fixed justification expansion to apply around CJK Unified Ideographs Extensions E, F, G, and H. (<a href="https://commits.webkit.org/313586@main">313586@main</a>)  (176759766)</li>
<li>Fixed RTL position-fixed elements losing their contents when the document is scrolled on iOS. (<a href="https://commits.webkit.org/313573@main">313573@main</a>)  (177454608)</li>
</ul>
<h3>SVG</h3>
<h4>New Features</h4>
<ul>
<li>Made SVG <code>&lt;use&gt;</code> work without specifying a fragment identifier. (<a href="https://commits.webkit.org/313550@main">313550@main</a>)  (148973201)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed the resolved value for the <code>width</code> and <code>height</code> properties on SVG <code>&lt;rect&gt;</code>, <code>&lt;image&gt;</code>, <code>&lt;svg&gt;</code>, and other elements. (<a href="https://commits.webkit.org/313859@main">313859@main</a>)  (96320059)</li>
<li>Fixed an animated GIF freezing when referenced by SVG <code>&lt;use&gt;</code> and the opacity was adjusted. (<a href="https://commits.webkit.org/313531@main">313531@main</a>)  (96837306)</li>
<li>Fixed <code>vector-effect</code> to apply a transform to path geometry rather than to stroke geometry. (<a href="https://commits.webkit.org/314302@main">314302@main</a>)  (103573160)</li>
<li>Fixed <code>&lt;animateMotion&gt;</code> non-path animations to apply the <code>rotate</code> attribute. (<a href="https://commits.webkit.org/314508@main">314508@main</a>)  (110915794)</li>
<li>Fixed SVG elements with <code>display: contents</code> being visually hidden. (<a href="https://commits.webkit.org/314079@main">314079@main</a>)  (141825746)</li>
<li>Fixed <code>SVGPathElement.getTotalLength()</code> and <code>. SVGPathElement.getTotalLength.getPointAtLength()</code> to respect the CSS <code>d</code> property. (<a href="https://commits.webkit.org/314654@main">314654@main</a>)  (167195297)</li>
<li>Fixed a rounding issue for SVG rect height with <code>em</code> and percentage values. (<a href="https://commits.webkit.org/313935@main">313935@main</a>)  (171587382)</li>
<li>Fixed SVG intrinsic sizing so that <code>max-content</code> and <code>min-content</code> use the <code>viewBox</code> aspect ratio when intrinsic sizes are missing. (<a href="https://commits.webkit.org/313864@main">313864@main</a>)  (174568894)</li>
<li>Fixed <code>glyph-orientation-vertical: auto</code> to decode surrogate pairs for UTR#50 lookup. (<a href="https://commits.webkit.org/314070@main">314070@main</a>)  (175570881)</li>
<li>Fixed handling of <code>pathLength="0"</code> and negative <code>pathLength</code> for stroke dashing. (<a href="https://commits.webkit.org/314001@main">314001@main</a>)  (175928827)</li>
<li>Fixed hit-testing of <code>clip-path</code> with nested <code>objectBoundingBox</code> <code>&lt;clipPath&gt;</code> to use the correct reference box. (<a href="https://commits.webkit.org/313855@main">313855@main</a>)  (177605894)</li>
<li>Fixed SVG overflowing edges when offset by a fractional value. (<a href="https://commits.webkit.org/313886@main">313886@main</a>)  (177630386)</li>
<li>Fixed <code>feGaussianBlur</code> not applying when <code>stdDeviation</code> contains a 0 in the second component. (<a href="https://commits.webkit.org/313874@main">313874@main</a>)  (177906905)</li>
</ul>
<h4>Deprecations</h4>
<ul>
<li>Removed support for the non-standard <code>glyph-orientation-horizontal</code> property. (<a href="https://commits.webkit.org/314069@main">314069@main</a>)  (176134352)</li>
</ul>
<h3>Scrolling</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed scrolling of the &#8220;Add Contacts&#8221; drop-down on outlook.live.com by  narrowing the scope of a quirk. (<a href="https://commits.webkit.org/314111@main">314111@main</a>)  (48008837)</li>
<li>Fixed a <code>passive: false</code> wheel event listener combined with <code>overscroll-behavior: contain</code> preventing scrolling. (<a href="https://commits.webkit.org/314170@main">314170@main</a>)  (137757208)</li>
<li>Fixed the scroll anchoring behavior so that the comments panel on Quip is no longer blank when expanded. (<a href="https://commits.webkit.org/314371@main">314371@main</a>)  (178255628)</li>
</ul>
<h3>Storage</h3>
<h4>New Features</h4>
<ul>
<li>Added support for storing <code>FileSystemHandle</code> objects in IndexedDB. (<a href="https://commits.webkit.org/314229@main">314229@main</a>)  (176102643)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed IndexedDB connections in workers to recover after a network process crash. (<a href="https://commits.webkit.org/313509@main">313509@main</a>)  (177219395)</li>
</ul>
<h3>Web API</h3>
<h4>New Features</h4>
<ul>
<li>Added support for the <code>Origin-Agent-Cluster</code> HTTP response header. (<a href="https://commits.webkit.org/314346@main">314346@main</a>)  (69452369)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed <code>IntersectionObserver</code> to no longer notify targets in detached documents. (<a href="https://commits.webkit.org/313834@main">313834@main</a>)  (162699098)</li>
<li>Fixed <code>IntersectionObserverEntry.boundingClientRect</code> to honor CSS zoom aware <code>getBoundingClientRect</code>. (<a href="https://commits.webkit.org/313512@main">313512@main</a>)  (177250323)</li>
<li>Fixed <code>IntersectionObserver</code> to report correct bounds for SVG element targets. (<a href="https://commits.webkit.org/313596@main">313596@main</a>)  (177260411)</li>
<li>Fixed Web Locks API to remove the <code>AbortSignal</code> abort algorithm after a lock request settles. (<a href="https://commits.webkit.org/314433@main">314433@main</a>)  (178589067)</li>
</ul>
<h3>Web Extensions</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed cross-origin <code>XMLHttpRequest</code> from a Safari Web Extension to no longer trigger an additional permissions request. (<a href="https://commits.webkit.org/313506@main">313506@main</a>)  (154866064)</li>
</ul>
<h3>Web Inspector</h3>
<h4>New Features</h4>
<ul>
<li>Added a separate column to show the node associated with layout and rendering events. (<a href="https://commits.webkit.org/314460@main">314460@main</a>)  (177618501)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed hovering over a node in a preview for a collection to highlight the node in the inspected page. (<a href="https://commits.webkit.org/314589@main">314589@main</a>)  (20341722)</li>
<li>Fixed style sheets created via CSSOM (such as <code>adoptedStyleSheets</code>) being incorrectly marked as User Agent Style Sheets. (<a href="https://commits.webkit.org/313738@main">313738@main</a>)  (134101594)</li>
<li>Fixed clearing the Console tab search field to dismiss the Clear Filters button. (<a href="https://commits.webkit.org/313599@main">313599@main</a>)  (176388155)</li>
<li>Fixed properties added to an element&#8217;s Style Attribute sometimes disappearing momentarily. (<a href="https://commits.webkit.org/314467@main">314467@main</a>)  (178053421)</li>
</ul>
<h3>WebGPU</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed WGSL parser handling of identifiers per the latest specification. (<a href="https://commits.webkit.org/313405@main">313405@main</a>)  (177008615)</li>
<li>Fixed WGSL validation of binary expressions involving short-circuit and/or operators. (<a href="https://commits.webkit.org/313467@main">313467@main</a>)  (177012957)</li>
</ul>
<h3>WebRTC</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed WebRTC media capabilities to report power-efficient AV1 decoding when supported. (<a href="https://commits.webkit.org/313468@main">313468@main</a>)  (174686183)</li>
<li>Fixed audio issues when joining Cisco Meeting Server meetings using Safari. (<a href="https://commits.webkit.org/313415@main">313415@main</a>)  (175260977)</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The golden rule of Customizable Select</title>
		<link>https://webkit.org/blog/18117/the-golden-rule-of-customizable-select/</link>
		
		<dc:creator/>
		<pubDate>Mon, 15 Jun 2026 21:20:31 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=18117</guid>

					<description><![CDATA[Customizable select is coming to Safari 27.]]></description>
										<content:encoded><![CDATA[<p>Customizable select is coming to Safari 27. With this technology, developers can fully control the appearance of <code>&lt;select&gt;</code> elements — custom arrows, option layouts, color swatches, icons, full visual styling — without the need for JavaScript libraries or an endless parade of <code>&lt;div&gt;</code> elements. And because it’s a built-in control, you don’t have to compromise on keyboard navigation or accessibility semantics.</p>
<p>But, to ensure this built-in control works well for everyone, it’s important to follow this single but essential rule: <strong>always provide text content or accessible text attributes for your <code>option</code> elements.</strong></p>
<p>Every time that rule is broken, every time an option is styled to show a visual without any text and without any accessible fallbacks, three different problems get introduced all at once. The menu is harder to use for everyone, impossible to use with accessibility tools, and it becomes a completely broken experience in browsers that don’t support it yet.</p>
<p>When you remember to follow the rule, you’ll improve the user experience, support accessibility, and provide progressive enhancement so it works for people regardless of what browser they choose.</p>
<p>We’ll show you why following this mission critical rule gets you:</p>
<h2>Better UX</h2>
<p>Take this category filter from a photographer&#8217;s gallery site. The version below uses icons alone — a building, a flower, a hummingbird — to represent each category:</p>
<figure><picture><source srcset="https://webkit.org/wp-content/uploads/customizable-select-dark-no-labels.png" type="image/png" media="(prefers-color-scheme: dark)"><img fetchpriority="high" decoding="async" src="https://webkit.org/wp-content/uploads/customizable-select-no-labels-LIGHT.png" alt="customizable select of categories for photo gallery with no labels" width="1920" height="1080" class="aligncenter size-full wp-image-17357 preserve-color" /></picture></figure>
<p>It looks clean. But a user who doesn&#8217;t immediately recognize what the hummingbird icon represents has no fallback. The closed select shows only an icon in the button, with no other hint of what&#8217;s currently selected. Add a text label to each option and the experience becomes immediately scannable. The selected state is readable at a glance, and every option is unambiguous:</p>
<figure><picture><source srcset="https://webkit.org/wp-content/uploads/customizable-select-dark-with-labels.png" type="image/png" media="(prefers-color-scheme: dark)"><img decoding="async" src="https://webkit.org/wp-content/uploads/customizable-select-with-labels-LIGHT.png" alt="customizable select of categories for photo gallery with labels" width="1920" height="1080" class="aligncenter size-full wp-image-17357 preserve-color" /></picture></figure>
<p>The icons are still there. The labels make it readily decipherable for everyone.</p>
<h2>Better accessibility</h2>
<p>When a screen reader encounters an option with no text, the user may not hear a descriptive label for each option. Braille rendering and other assistive technology output may also be confusing. Text, even when hidden visually with a <code>.visually-hidden</code> class, stays in the accessibility tree and gives screen readers, braille displays, and speech recognition software something real to work with. If you use an icon as an <code>&lt;img&gt;</code>, add an <code>alt</code> or <code>aria-label</code> — or mark it decorative using <code>alt=""</code> and let the visible or visually-hidden label carry the meaning.</p>
<pre><code class="html"><span class="tag">&lt;<span class="keyword">option</span>&gt;</span>
   <span class="tag">&lt;<span class="keyword">img</span> <span class="keyword attribute">src</span>=<span class="attribute value string">"bird.svg"</span> <span class="keyword attribute">alt</span>=<span class="attribute value string">""</span>&gt;</span>
   <span class="tag">&lt;<span class="keyword">span</span>&gt;</span>Wildlife<span class="tag">&lt;/<span class="keyword">span</span>&gt;</span>
<span class="tag">&lt;/<span class="keyword">option</span>&gt;</span>
</code></pre>
<p>The problem you solve isn&#8217;t just a compliance checkbox: it&#8217;s the difference between a visitor completing your form and someone abandoning it.</p>
<h2>Better progressive enhancement</h2>
<p>Customizable select is a new feature. Browsers that don&#8217;t yet support it fall back to the platform-native <code>&lt;select&gt;</code> — which is exactly the right behavior, as long as your options still make sense in that fallback state.</p>
<p>If you&#8217;ve removed text in favor of icons or swatches, a user on an older browser sees a dropdown full of empty options. The same is true when CSS fails to load at all: a slow connection, a corporate proxy stripping stylesheets, a user with custom styles enabled. Wrap your enhancements in <code>@supports (appearance: base-select)</code> and keep plain text as your baseline. Adding a swatch is an enhancement. Removing the color name to make room for it is a regression.</p>
<p>The rule for maximizing the power and utility of customizable select is simple: keep the text. You can hide it visually. You can make it tiny. You can position it off-screen. But it needs to be there. Icons, swatches, and illustrations are additions to an option — never substitutes for it. Follow that rule and the rest of customizable select is yours to play with.</p>
<h2>Feedback</h2>
<p>We love hearing from you. To share your thoughts, find our web evangelists online: Saron Yitbarek on <a href="https://bsky.app/profile/saron.bsky.social">BlueSky</a>, Jen Simmons on <a href="https://bsky.app/profile/jensimmons.bsky.social">Bluesky</a> / <a href="https://front-end.social/@jensimmons">Mastodon</a>, and Jon Davis on <a href="https://bsky.app/profile/jondavis.bsky.social">Bluesky</a> / <a href="https://mastodon.social/@jondavis">Mastodon</a>. You can follow WebKit <a href="https://www.linkedin.com/in/apple-webkit/">on LinkedIn</a>. If you run into any issues, we welcome your <a href="https://feedbackassistant.apple.com/">feedback</a> on Safari UI (learn more about <a href="https://developer.apple.com/bug-reporting/">filing Feedback</a>), or your <a href="https://bugs.webkit.org/">WebKit bug report</a> about web technologies or Web Inspector. If you run into a website that isn’t working as expected, please file a report at <a href="https://webcompat.com/">webcompat.com</a>. Filing issues really does make a difference.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Introducing the Field Guide to Grid Lanes</title>
		<link>https://webkit.org/blog/18098/introducing-the-field-guide-to-grid-lanes/</link>
		
		<dc:creator/>
		<pubDate>Wed, 10 Jun 2026 07:30:35 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=18098</guid>

					<description><![CDATA[This week, we launched the Field Guide to Grid Lanes at gridlanes.webkit.org.]]></description>
										<content:encoded><![CDATA[<p>This week, we launched the Field Guide to Grid Lanes at <a href="https://gridlanes.webkit.org/">gridlanes.webkit.org</a>.</p>
<figure class=""><picture><source srcset="https://webkit.org/wp-content/uploads/field-guide-top-dark-scaled.png" type="image/png" media="(prefers-color-scheme: dark)"><img decoding="async" src="https://webkit.org/wp-content/uploads/field-guide-top-light-scaled.png" alt="Field Guide to Grid Lanes website header" width="2560" height="1452" class="aligncenter size-full wp-image-18103" srcset="https://webkit.org/wp-content/uploads/field-guide-top-light-scaled.png 2560w, https://webkit.org/wp-content/uploads/field-guide-top-light-300x170.png 300w, https://webkit.org/wp-content/uploads/field-guide-top-light-1024x581.png 1024w, https://webkit.org/wp-content/uploads/field-guide-top-light-768x436.png 768w, https://webkit.org/wp-content/uploads/field-guide-top-light-1536x871.png 1536w, https://webkit.org/wp-content/uploads/field-guide-top-light-2048x1161.png 2048w" sizes="(max-width: 2560px) 100vw, 2560px" /></picture></figure>
<p>If you ever bookmarked the CSS Tricks Complete Guide to Flexbox, HTML5 Rocks, or CSS Zen Garden, a guide like this might feel familiar. It’s designed to be an easy introduction, a reference guide — and just plain fun.</p>
<h2>The interactive playground</h2>
<p>At the top is a live, editable Grid Lanes layout. Switch between Waterfall and Brick. Try preset layouts. Drag the slider labeled “Flow tolerance” and click “Play tab order” to understand the impact of <code>flow-tolerance</code>.</p>
<figure class=""><picture><source srcset="https://webkit.org/wp-content/uploads/field-guide-playground-dark-scaled.png" type="image/png" media="(prefers-color-scheme: dark)"><img loading="lazy" decoding="async" src="https://webkit.org/wp-content/uploads/field-guide-playground-light-scaled.png" alt="Interactive drawing of website with items laid out with Grid Lanes. Multiple buttons, sliders, and a code editor make it possible to try out many combinations quickly &amp; see the results. " width="2560" height="2099" class="aligncenter size-full wp-image-18108" srcset="https://webkit.org/wp-content/uploads/field-guide-playground-light-scaled.png 2560w, https://webkit.org/wp-content/uploads/field-guide-playground-light-300x246.png 300w, https://webkit.org/wp-content/uploads/field-guide-playground-light-1024x840.png 1024w, https://webkit.org/wp-content/uploads/field-guide-playground-light-768x630.png 768w, https://webkit.org/wp-content/uploads/field-guide-playground-light-1536x1260.png 1536w, https://webkit.org/wp-content/uploads/field-guide-playground-light-2048x1679.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></picture></figure>
<p>Resize the demo browser window to test responsive behavior without resizing your whole window. Edit the CSS directly. Copy the code you create.</p>
<h2>The cheat sheet</h2>
<p>Next is the Field Guide itself — a single-page reference for every property, value, and option.</p>
<figure class=""><picture><source srcset="https://webkit.org/wp-content/uploads/field-guide-ref-dark-scaled.png" type="image/png" media="(prefers-color-scheme: dark)"><img loading="lazy" decoding="async" src="https://webkit.org/wp-content/uploads/field-guide-ref-light-scaled.png" alt="Screenshot of first part of the reference guide, showing lots of definitions, little diagrams, and tiny code snippets " width="2560" height="2282" class="aligncenter size-full wp-image-18110" srcset="https://webkit.org/wp-content/uploads/field-guide-ref-light-scaled.png 2560w, https://webkit.org/wp-content/uploads/field-guide-ref-light-300x267.png 300w, https://webkit.org/wp-content/uploads/field-guide-ref-light-1024x913.png 1024w, https://webkit.org/wp-content/uploads/field-guide-ref-light-768x685.png 768w, https://webkit.org/wp-content/uploads/field-guide-ref-light-1536x1369.png 1536w, https://webkit.org/wp-content/uploads/field-guide-ref-light-2048x1826.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></picture></figure>
<p>It has four sections:</p>
<ul>
<li><strong>Grid Lanes Basics</strong> — <code>display: grid-lanes</code>, plus the difference between waterfall and brick layouts</li>
<li><strong>Options for Lane Definitions</strong> — Grid track-sizing with <code>fr</code> units, fixed lengths, percentages, <code>auto</code>, <code>min-content</code> &amp; <code>max-content</code>, <code>fit-content()</code>, <code>minmax()</code>, <code>repeat()</code>, and <code>auto-fill</code> vs <code>auto-fit</code></li>
<li><strong>Options for Placement &amp; Spacing</strong> — <code>flow-tolerance</code>, <code>gap</code>, spanning tracks, and explicit placement</li>
<li><strong>Good to Know</strong> — info about source order, progressive enhancement, and switching layouts at different breakpoints</li>
</ul>
<h2>The demos</h2>
<p>To showcase the possibilities of Grid Lanes, we created six demos, each available in several variations:</p>
<figure class=""><picture><source srcset="https://webkit.org/wp-content/uploads/field-guide-demos-dark-scaled.png" type="image/png" media="(prefers-color-scheme: dark)"><img loading="lazy" decoding="async" src="https://webkit.org/wp-content/uploads/field-guide-demos-light-scaled.png" alt="The six demos listed on the homepage — with a screenshot of each." width="2560" height="1714" class="aligncenter size-full wp-image-18112" srcset="https://webkit.org/wp-content/uploads/field-guide-demos-light-scaled.png 2560w, https://webkit.org/wp-content/uploads/field-guide-demos-light-300x201.png 300w, https://webkit.org/wp-content/uploads/field-guide-demos-light-1024x686.png 1024w, https://webkit.org/wp-content/uploads/field-guide-demos-light-768x514.png 768w, https://webkit.org/wp-content/uploads/field-guide-demos-light-1536x1028.png 1536w, https://webkit.org/wp-content/uploads/field-guide-demos-light-2048x1371.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></picture></figure>
<ul>
<li><strong>Photos</strong> — just images, in a variety of aspect ratios</li>
<li><strong>Recipes</strong> — components containing both flexible images and varying lengths of text</li>
<li><strong>Newspaper</strong> — longer passages of text, with a few images (and a lot of CSS puns)</li>
<li><strong>Mega Menu</strong> — lists of very short text</li>
<li><strong>Timeline</strong> — text in brick layout</li>
<li><strong>Pinboard</strong> — mixed media</li>
</ul>
<p>Each demo opens with a floating control panel.</p>
<figure class=""><picture><source srcset="https://webkit.org/wp-content/uploads/field-guide-controls-dark-scaled.png" type="image/png" media="(prefers-color-scheme: dark)"><img loading="lazy" decoding="async" src="https://webkit.org/wp-content/uploads/field-guide-controls-light-scaled.png" alt="Screenshot of one of the demos, happens to be of photo layout. The controls are showing, as described in the article. " width="2560" height="1966" class="aligncenter size-full wp-image-18114" srcset="https://webkit.org/wp-content/uploads/field-guide-controls-light-scaled.png 2560w, https://webkit.org/wp-content/uploads/field-guide-controls-light-300x230.png 300w, https://webkit.org/wp-content/uploads/field-guide-controls-light-1024x786.png 1024w, https://webkit.org/wp-content/uploads/field-guide-controls-light-768x590.png 768w, https://webkit.org/wp-content/uploads/field-guide-controls-light-1536x1180.png 1536w, https://webkit.org/wp-content/uploads/field-guide-controls-light-2048x1573.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></picture></figure>
<p>“Layout” offers a dropdown of variations — showing off what Grid Lanes can do, and comparing it to Flexbox, Multicolumn, and Grid. “Numbers” shows item order. “Flow tolerance” lets you experiment with its effects. The code panel displays the key layout CSS.</p>
<p>“Hide controls” puts the focus on the demo itself. To get the controls back, click the gear that appears in the lower-right corner.</p>
<h2>Working with Safari’s developer tools</h2>
<p>Web Inspector knows about Grid Lanes, too. Toggle “Order Numbers” to reveal overlays marking the DOM order of items. These numbers are extremely useful when experimenting to find the best <code>flow-tolerance</code> value for your content.</p>
<figure class=""><picture><source srcset="https://webkit.org/wp-content/uploads/field-guide-inspector-dark-scaled.png" type="image/png" media="(prefers-color-scheme: dark)"><img loading="lazy" decoding="async" src="https://webkit.org/wp-content/uploads/field-guide-inspector-light-scaled.png" alt="Screenshot of photo demo, with Web Inspector open. The Grid Inspector is showing, with Item numbers are turned on. This creates lines all over the webpage, revealing the Grid Lanes layout, and marking each Item with a number. " width="2560" height="2099" class="aligncenter size-full wp-image-18116" srcset="https://webkit.org/wp-content/uploads/field-guide-inspector-light-scaled.png 2560w, https://webkit.org/wp-content/uploads/field-guide-inspector-light-300x246.png 300w, https://webkit.org/wp-content/uploads/field-guide-inspector-light-1024x840.png 1024w, https://webkit.org/wp-content/uploads/field-guide-inspector-light-768x630.png 768w, https://webkit.org/wp-content/uploads/field-guide-inspector-light-1536x1260.png 1536w, https://webkit.org/wp-content/uploads/field-guide-inspector-light-2048x1679.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></picture></figure>
<p>Learn more by reading <a href="https://webkit.org/blog/17746/new-safari-developer-tools-provide-insight-into-css-grid-lanes/">New Safari developer tools provide insight into CSS Grid Lanes</a>.</p>
<h2>What about other browsers?</h2>
<p>Grid Lanes works today in Safari 26.4+. For the latest information about other browsers, check <a href="https://caniuse.com/css-grid-lanes">Can I Use</a>. For progressive enhancement guidance, read <a href="https://webkit.org/blog/17758/when-will-css-grid-lanes-arrive-how-long-until-we-can-use-it/">When will CSS Grid Lanes arrive? How long until we can use it?</a></p>
<h2>Made by the people who shipped it</h2>
<p>The Field Guide was built by the same team behind Grid Lanes. We hope this is a fun experience that makes Grid Lanes easy to learn. Bookmark it, share it with colleagues, and let us know what you make.</p>
<p><a href="https://gridlanes.webkit.org/"><strong>Visit the Field Guide →</strong></a></p>
<h2>Feedback</h2>
<p>We’d love to hear from you. Find us online: Jen Simmons on <a href="https://bsky.app/profile/jensimmons.bsky.social">Bluesky</a> / <a href="https://front-end.social/@jensimmons">Mastodon</a>, Saron Yitbarek on <a href="https://bsky.app/profile/saron.bsky.social">Bluesky</a> / <a href="https://front-end.social/@saron">Mastodon</a>, and Jon Davis on <a href="https://bsky.app/profile/jondavis.bsky.social">Bluesky</a> / <a href="https://mastodon.social/@jondavis">Mastodon</a>. You can follow WebKit <a href="https://www.linkedin.com/in/apple-webkit/">on LinkedIn</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Discover MapKit JS 6: Rebuilt for Today’s Web Developer</title>
		<link>https://webkit.org/blog/18027/discover-mapkit-js-6-rebuilt-for-todays-web-developer/</link>
		
		<dc:creator/>
		<pubDate>Tue, 09 Jun 2026 17:00:35 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=18027</guid>

					<description><![CDATA[MapKit JS allows you to bring the power and simplicity of Apple Maps to your website or web app.]]></description>
										<content:encoded><![CDATA[<p>MapKit JS allows you to bring the power and simplicity of Apple Maps to your website or web app.  Whether you&#8217;re building a store locator, a travel planner, or a companion web experience for a native app, MapKit JS offers you a robust, privacy-first framework, providing the mapping data, services, and design quality behind Apple Maps, directly to your JavaScript code.</p>
<p>If you haven’t tried MapKit JS lately, now is a great time to take another look. With our latest version 6 release, we’ve made it easier than ever for you to integrate MapKit JS into your apps and websites by modernizing around today’s web development patterns.</p>
<h2><a name="see-it-in-action"></a>See It in Action</h2>
<p>Getting a MapKit JS map onto a page takes a few lines of code. In this post, we’ll guide you, step-by -step, through how to build a sample app — Yosemite Explorer — featuring points of interest across Yosemite National Park in California. <a href="https://webkit.org/demos/yosemite/">Explore the demo</a>.</p>
<figure>
<img loading="lazy" decoding="async" width="2136" height="1656" src="https://webkit.org/wp-content/uploads/yosemite-explorer-hero.png" alt="image, showing the full app: POIs marked on the map with one selected, showing place detail popover and driving directions" class="preserve-color wp-image-18034" srcset="https://webkit.org/wp-content/uploads/yosemite-explorer-hero.png 2136w, https://webkit.org/wp-content/uploads/yosemite-explorer-hero-300x233.png 300w, https://webkit.org/wp-content/uploads/yosemite-explorer-hero-1024x794.png 1024w, https://webkit.org/wp-content/uploads/yosemite-explorer-hero-768x595.png 768w, https://webkit.org/wp-content/uploads/yosemite-explorer-hero-1536x1191.png 1536w, https://webkit.org/wp-content/uploads/yosemite-explorer-hero-2048x1588.png 2048w" sizes="auto, (max-width: 2136px) 100vw, 2136px" /><br />
</figure>
<h2><a name="try-it-yourself"></a>Try it yourself</h2>
<h3><a name="apple-developer-account"></a>Apple Developer Account</h3>
<p>To display a map, provide a developer token to MapKit JS. You generate that token through an Apple Developer account — and that same account unlocks a lot more than just maps. With an Apple Developer account, you get access to Apple&#8217;s full suite of developer services: publish Safari Web Extensions, and use powerful web frameworks like MusicKit JS for Apple Music integration, CloudKit JS for iCloud-backed data storage, and more. <a href="https://developer.apple.com/account">Sign up for an Apple Developer account</a>.</p>
<p>MapKit JS 6 makes token setup significantly simpler. You can now use a static token bound to your website&#8217;s domain, generated directly from the Apple Developer website — no private key management or self-signing required. For details, see <a href="https://developer.apple.com/documentation/mapkitjs/creating-a-maps-token">Creating a Maps token</a>.</p>
<h3><a name="load-the-framework"></a>Load the Framework</h3>
<p>New in v6, the MapKit JS loader ships as an NPM package, so the framework integrates directly into modern build pipelines. If you are looking to build a quick prototype or load MapKit JS directly in HTML, you can also skip to [Loading the MapKit JS script in your browser] below.</p>
<h4><a name="load-with-mapkit-js-loader"></a>Load with MapKit JS Loader</h4>
<p>To get our Yosemite map running, the next step is to install the package:</p>
<pre><code class="sh">npm install @apple/mapkit-loader
</code></pre>
<p>Now you can load the framework with the token you generated in the previous step:</p>
<pre><code class="js"><span class="keyword control">import</span> { <span class="identifier">load</span> } <span class="identifier">from</span> <span class="string">"@apple/mapkit-loader"</span>;

<span class="keyword type">const</span> <span class="identifier">mapkit</span> <span class="operator">=</span> <span class="identifier">await</span> <span class="identifier">load</span>({
    <span class="identifier">libraries</span><span class="operator">:</span> [<span class="string">"map"</span>, <span class="string">"services"</span>, <span class="string">"annotations"</span>],
    <span class="identifier">token</span><span class="operator">:</span> <span class="string">"your-token-here"</span>
});
<span class="identifier">console</span>.<span class="identifier">log</span>(<span class="string">"MapKit loads"</span>, <span class="identifier">mapkit</span>.<span class="identifier">loadedLibraries</span>);
</code></pre>
<p>Let’s reload the page. The <code>console.log()</code> output should appear in Web Inspector:</p>
<figure><img loading="lazy" decoding="async" width="2212" height="1024" src="https://webkit.org/wp-content/uploads/web-inspector-mapkit.png" alt="screenshot of Web Inspector showing MapKit JS loads" class="preserve-color wp-image-18045" srcset="https://webkit.org/wp-content/uploads/web-inspector-mapkit.png 2212w, https://webkit.org/wp-content/uploads/web-inspector-mapkit-300x139.png 300w, https://webkit.org/wp-content/uploads/web-inspector-mapkit-1024x474.png 1024w, https://webkit.org/wp-content/uploads/web-inspector-mapkit-768x356.png 768w, https://webkit.org/wp-content/uploads/web-inspector-mapkit-1536x711.png 1536w, https://webkit.org/wp-content/uploads/web-inspector-mapkit-2048x948.png 2048w" sizes="auto, (max-width: 2212px) 100vw, 2212px" /></figure>
<p>MapKit JS partitions its features into libraries, so you load only what you need. Set the <code>libraries</code> array to the minimal set for the best performance. When you load MapKit JS through MapKit JS Loader, it automatically sources full TypeScript support through DefinitelyTyped into your project. <a href="https://developer.apple.com/documentation/mapkitjs/loading-the-latest-version-of-mapkit-js#Select-MapKit-JS-libraries">Find a list of available libraries in developer documentation for MapKit JS</a>.</p>
<h4><a name="alternative-load-the-mapkit-js-script-in-html"></a>Alternative: Load the MapKit JS script in HTML</h4>
<p>For quick prototyping or web apps without a build pipeline, you can load and initialize MapKit JS with a <code>&lt;script&gt;</code> tag:</p>
<pre><code class="html"><span class="tag">&lt;<span class="keyword">script</span> <span class="keyword attribute">src</span>=<span class="attribute value string">"https://cdn.apple-mapkit.com/mk/6/mapkit.core.js"</span>
     <span class="keyword attribute">crossorigin</span> <span class="keyword attribute">async</span>
     <span class="keyword attribute">data-callback</span>=<span class="attribute value string">"initMapKit"</span>
     <span class="keyword attribute">data-libraries</span>=<span class="attribute value string">"map,services,annotations"</span>
     <span class="keyword attribute">data-token</span>=<span class="attribute value string">"your-token-here"</span>&gt;</span><span class="tag">&lt;/<span class="keyword">script</span>&gt;</span>
</code></pre>
<p>When the script loads, it invokes <code>window.initMapKit</code> — a callback you define — after which the <code>mapkit</code> namespace is available under <code>window</code>.</p>
<h3><a name="create-a-map"></a>Create a Map</h3>
<p>You create a map by passing the ID of a container element and a region. For our example, we center the map view on Yosemite Valley and set the camera high enough to cover the whole valley.</p>
<p>First, in HTML, define a sized container for the map view:</p>
<pre><code class="html"><span class="tag">&lt;<span class="keyword">div</span> <span class="keyword attribute">id</span>=<span class="attribute value string">"map-container"</span> <span class="keyword attribute">style</span>=<span class="attribute value string">"width: 500px; height: 500px;"</span>&gt;</span><span class="tag">&lt;/<span class="keyword">div</span>&gt;</span>
</code></pre>
<p>In JavaScript, frame the map viewport by setting a center coordinate (latitude and longitude) and a camera distance (in meters):</p>
<pre><code class="js"><span class="keyword type">const</span> <span class="identifier">map</span> <span class="operator">=</span> <span class="keyword operator">new</span> <span class="identifier">mapkit</span>.<span class="identifier">Map</span>(<span class="string">"map-container"</span>, {
    <span class="identifier">center</span><span class="operator">:</span> <span class="keyword operator">new</span> <span class="identifier">mapkit</span>.<span class="identifier">Coordinate</span>(<span class="number">37.7456</span>, <span class="operator">-</span><span class="number">119.5936</span>),
    <span class="identifier">cameraDistance</span><span class="operator">:</span> <span class="number">28000</span>
});
</code></pre>
<p>With that, the framework renders an interactive map in your container, centered on Yosemite Valley:</p>
<figure class="widescreen"><img loading="lazy" decoding="async" width="2130" height="1616" src="https://webkit.org/wp-content/uploads/yosemite-explorer-map.png" alt="image showing map loads inside the container" class="preserve-color wp-image-18047" srcset="https://webkit.org/wp-content/uploads/yosemite-explorer-map.png 2130w, https://webkit.org/wp-content/uploads/yosemite-explorer-map-300x228.png 300w, https://webkit.org/wp-content/uploads/yosemite-explorer-map-1024x777.png 1024w, https://webkit.org/wp-content/uploads/yosemite-explorer-map-768x583.png 768w, https://webkit.org/wp-content/uploads/yosemite-explorer-map-1536x1165.png 1536w, https://webkit.org/wp-content/uploads/yosemite-explorer-map-2048x1554.png 2048w" sizes="auto, (max-width: 2130px) 100vw, 2130px" /></figure>
<h4><a name="alternative-create-a-map-with-frameworks"></a>Alternative: Create a Map with frameworks</h4>
<p>When using a UI framework, pass in the DOM element directly. For example, in React:</p>
<pre><code class="js"><span class="keyword type">const</span> <span class="identifier">mapRef</span> <span class="operator">=</span> <span class="identifier">useRef</span>(<span class="keyword literal">null</span>);

<span class="identifier">useEffect</span>(() <span class="operator">=</span><span class="operator">&gt;</span> {
        <span class="keyword operator">new</span> <span class="identifier">mapkit</span>.<span class="identifier">Map</span>(<span class="identifier">mapRef</span>.<span class="identifier">current</span>, {
            <span class="identifier">region</span><span class="operator">:</span> <span class="keyword operator">new</span> <span class="identifier">mapkit</span>.<span class="identifier">CoordinateRegion</span>(
                <span class="keyword operator">new</span> <span class="identifier">mapkit</span>.<span class="identifier">Coordinate</span>(<span class="number">37.3349</span>, <span class="operator">-</span><span class="number">122.0090</span>),
            <span class="keyword operator">new</span> <span class="identifier">mapkit</span>.<span class="identifier">CoordinateSpan</span>(<span class="number">0.01</span>, <span class="number">0.01</span>)
        )
    });
}, []);

<span class="keyword control">return</span> <span class="operator">&lt;</span><span class="identifier">div</span> <span class="identifier">ref</span><span class="operator">=</span>{<span class="identifier">mapRef</span>} <span class="identifier">style</span><span class="operator">=</span>{{ <span class="identifier">width</span><span class="operator">:</span> <span class="string">"500px"</span>, <span class="identifier">height</span><span class="operator">:</span> <span class="string">"500px"</span> }} <span class="operator">/</span><span class="operator">&gt;</span>;
</code></pre>
<h3><a name="add-place-annotations"></a>Add Place Annotations</h3>
<p>You can add custom annotations or overlays to the interactive map view. In this example, we&#8217;ll showcase places in Yosemite National Park with <code>PlaceAnnotation</code> — an annotation that automatically picks up the place&#8217;s title, coordinate, and iconography from Apple&#8217;s data.</p>
<p>Each place in Apple Maps is referenced by a Place ID, an opaque string that represents a point of interest rather than a specific coordinate or address. You can find Place IDs with the <a href="https://developer.apple.com/maps/place-id-lookup/">Place ID Lookup tool</a> or <a href="https://developer.apple.com/documentation/mapkitjs/search">the Search service</a>. New in v6, <code>PlaceLookup</code> returns a promise, so you can pass a Place ID, <code>await</code> the result, and create the annotation in a single flow:</p>
<pre><code class="js"><span class="keyword type">const</span> <span class="identifier">placeLookup</span> <span class="operator">=</span> <span class="keyword operator">new</span> <span class="identifier">mapkit</span>.<span class="identifier">PlaceLookup</span>();

<span class="keyword type">const</span> <span class="identifier">id</span> <span class="operator">=</span> <span class="string">"I7408F9590EC1AB75"</span>;
<span class="keyword type">const</span> <span class="identifier">place</span> <span class="operator">=</span> <span class="identifier">await</span> <span class="identifier">placeLookup</span>.<span class="identifier">getPlace</span>(<span class="identifier">id</span>);
<span class="keyword type">const</span> <span class="identifier">annotation</span> <span class="operator">=</span> <span class="keyword operator">new</span> <span class="identifier">mapkit</span>.<span class="identifier">PlaceAnnotation</span>(<span class="identifier">place</span>, {
    <span class="identifier">selectionAccessory</span><span class="operator">:</span> <span class="keyword operator">new</span> <span class="identifier">mapkit</span>.<span class="identifier">PlaceSelectionAccessory</span>()
});

<span class="identifier">addToList</span>(<span class="identifier">annotation</span>);
<span class="identifier">map</span>.<span class="identifier">addAnnotation</span>(<span class="identifier">annotation</span>);
</code></pre>
<p>The code snippet above adds a <code>PlaceAnnotation</code> to the map and populates the same place on a list. The list draws the place name using the <code>annotation.title</code> property:</p>
<figure><img loading="lazy" decoding="async" width="2116" height="1578" src="https://webkit.org/wp-content/uploads/yosemite-explorer-place-annotation.png" alt="image showing the map with a PlaceAnnotation" class="preserve-color wp-image-18049" srcset="https://webkit.org/wp-content/uploads/yosemite-explorer-place-annotation.png 2116w, https://webkit.org/wp-content/uploads/yosemite-explorer-place-annotation-300x224.png 300w, https://webkit.org/wp-content/uploads/yosemite-explorer-place-annotation-1024x764.png 1024w, https://webkit.org/wp-content/uploads/yosemite-explorer-place-annotation-768x573.png 768w, https://webkit.org/wp-content/uploads/yosemite-explorer-place-annotation-1536x1145.png 1536w, https://webkit.org/wp-content/uploads/yosemite-explorer-place-annotation-2048x1527.png 2048w" sizes="auto, (max-width: 2116px) 100vw, 2116px" /></figure>
<p>The snippet also sets a <code>selectionAccessory</code> option to a <code>PlaceSelectionAccessory</code> instance. When the user selects a marker, selection accessory displays detailed information of that place, like contact information or operating hours.</p>
<figure><img loading="lazy" decoding="async" width="2374" height="1706" src="https://webkit.org/wp-content/uploads/yosemite-explorer-marker-selected.png" alt="image showing the marker selected with selection accessory shown" class="preserve-color wp-image-18050" srcset="https://webkit.org/wp-content/uploads/yosemite-explorer-marker-selected.png 2374w, https://webkit.org/wp-content/uploads/yosemite-explorer-marker-selected-300x216.png 300w, https://webkit.org/wp-content/uploads/yosemite-explorer-marker-selected-1024x736.png 1024w, https://webkit.org/wp-content/uploads/yosemite-explorer-marker-selected-768x552.png 768w, https://webkit.org/wp-content/uploads/yosemite-explorer-marker-selected-1536x1104.png 1536w, https://webkit.org/wp-content/uploads/yosemite-explorer-marker-selected-2048x1472.png 2048w" sizes="auto, (max-width: 2374px) 100vw, 2374px" /></figure>
<p>Repeat the place lookup to populate the app with all places.</p>
<h3><a name="respond-to-interactions"></a>Respond to Interactions</h3>
<p>We want to present the user interface in a consistent state. New in v6, MapKit JS uses the standard browser <code>EventTarget</code> model, so handling map events works like handling any other DOM event. When the user selects an annotation on the map, you can update the corresponding list item:</p>
<pre><code class="js"><span class="identifier">map</span>.<span class="identifier">addEventListener</span>(<span class="string">"select"</span>, (<span class="identifier">event</span>) <span class="operator">=</span><span class="operator">&gt;</span> {
    <span class="keyword type">const</span> <span class="identifier">selected</span> <span class="operator">=</span> <span class="identifier">event</span>.<span class="identifier">annotation</span>;
    <span class="identifier">setListSelected</span>(<span class="identifier">selected</span>.<span class="identifier">id</span>);
});
</code></pre>
<p>Likewise, when the user selects a list item, select the corresponding annotation on the map. Since each list item holds a reference to the annotation instance, set its <code>selected</code> property to <code>true</code>:</p>
<pre><code class="js"><span class="identifier">element</span>.<span class="identifier">addEventListener</span>(<span class="string">"click"</span>, (<span class="identifier">event</span>) <span class="operator">=</span><span class="operator">&gt;</span> {
    <span class="identifier">annotation</span>.<span class="identifier">selected</span> <span class="operator">=</span> <span class="keyword literal">true</span>;
});
</code></pre>
<p>This creates a two-way binding so the list and the map feel connected when either is interacted with. With that, we completed our app:</p>
<figure class="widescreen"><video src="https://webkit.org/wp-content/uploads/yosemite-explorer-click.mov" muted controls>video, showing list item rendered as selected when the marker is selected</video></figure>
<p>The same <code>addEventListener</code> pattern applies to annotation selections, map region changes, and every other MapKit JS interaction. See <a href="https://developer.apple.com/documentation/mapkitjs/handling-map-events">Handling map events</a> to learn about all available event types.</p>
<h2><a name="apple-maps-built-for-the-web"></a>Apple Maps, Built for the Web</h2>
<p>In walking through the Yosemite Explorer example, you&#8217;ve seen several v6 changes working together. Installing MapKit JS as an npm package makes getting started more straightforward. Handling annotation selection with <code>addEventListener</code> puts the standard browser <code>EventTarget</code> model to work — one that v6 adopts consistently across the API. Using <code>await</code> for place lookups uses native promises throughout. And the authentication token you configured at the start is scoped to specific capabilities, giving you fine-grained control over access. Together, these changes make bringing the power of Apple Maps to your website a natural part of your development process.</p>
<h2><a name="next-steps"></a>Next Steps</h2>
<p>Explore the <a href="https://developer.apple.com/documentation/mapkitjs">MapKit JS documentation</a> to dive deeper into the API. If you are using an earlier version of MapKit JS, check out the <a href="https://developer.apple.com/documentation/mapkitjs/migrating-from-version-5-to-version-6">migration guide</a>. Try the code samples in your own project, and share feedback through <a href="https://feedbackassistant.apple.com/">Feedback Assistant</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Release Notes for Safari Technology Preview 245</title>
		<link>https://webkit.org/blog/17970/release-notes-for-safari-technology-preview-245/</link>
		
		<dc:creator/>
		<pubDate>Mon, 08 Jun 2026 22:19:58 +0000</pubDate>
				<category><![CDATA[Safari Technology Preview]]></category>
		<guid isPermaLink="false">https://webkit.org/?p=17970</guid>

					<description><![CDATA[Safari Technology Preview Release 245 is now available for download for macOS Tahoe and macOS Sequoia.]]></description>
										<content:encoded><![CDATA[<p><a href="https://webkit.org/blog/6017/introducing-safari-technology-preview/">Safari Technology Preview</a> Release 245 is now <a href="https://developer.apple.com/safari/resources/">available for download</a> for macOS Tahoe and macOS Sequoia. If you already have Safari Technology Preview installed, you can update it in System Settings under General → Software Update.</p>
<p>This release includes WebKit changes between: <a href="https://github.com/WebKit/WebKit/compare/bc59681571095d4c238aab49e33c533532e96399...9a89edbceb77c97659998cfbb71ff1af3a7604b5">312965@main&#8230;313358@main</a>.</p>
<h3>Accessibility</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed VoiceOver&#8217;s &#8220;Skip redundant labels&#8221; setting not being respected on certain web pages. (<a href="https://commits.webkit.org/312967@main">312967@main</a>)  (176297111)</li>
</ul>
<h3>CSS</h3>
<h4>New Features</h4>
<ul>
<li>Added support for the case-sensitive modifier <code>s</code> in CSS attribute selectors. (<a href="https://commits.webkit.org/313234@main">313234@main</a>)  (126331481)</li>
<li>Added support for the <code>:host:has()</code> compound selector in CSS. (<a href="https://commits.webkit.org/313350@main">313350@main</a>)  (139799278)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed <code>aspect-ratio</code> not being respected on flex children when the flex container has <code>position: absolute</code>. (<a href="https://commits.webkit.org/313213@main">313213@main</a>)  (117807518)</li>
<li>Fixed <code>aspect-ratio</code> not working correctly on flex children that also have <code>overflow</code> set. (<a href="https://commits.webkit.org/313170@main">313170@main</a>)  (118926827)</li>
<li>Fixed image <code>aspect-ratio</code> not being preserved when <code>width: 100%</code> and <code>height: 100%</code> are set but no ancestor has a defined width. (<a href="https://commits.webkit.org/313003@main">313003@main</a>)  (162373271)</li>
<li>Fixed transferred min/max block-size constraints not being applied for intrinsic keyword widths on replaced elements. (<a href="https://commits.webkit.org/313091@main">313091@main</a>)  (173128588)</li>
<li>Fixed serialization of multi-word font family names that were always incorrectly quoted due to treating the full string as a single identifier. (<a href="https://commits.webkit.org/313271@main">313271@main</a>)  (175522811)</li>
<li>Fixed <code>CSSStyleDeclaration.setProperty()</code> failing to apply <code>!important</code> priority to an existing inline style property when the value was an integer of 255 or lower. (<a href="https://commits.webkit.org/313159@main">313159@main</a>)  (176099619)</li>
<li>Fixed an issue where elements using <code>stretch</code> sizing inside anonymous block wrappers resolved to their intrinsic size instead of stretching to fill the available space. (<a href="https://commits.webkit.org/313359@main">313359@main</a>)  (176398251)</li>
<li>Fixed <code>:has()</code> style invalidation failing in complex nested cases involving <code>:is()</code>. (<a href="https://commits.webkit.org/312966@main">312966@main</a>)  (176719780)</li>
<li>Fixed <code>-webkit-perspective</code> not establishing a containing block for fixed-positioned descendants. (<a href="https://commits.webkit.org/313020@main">313020@main</a>)  (176729670)</li>
<li>Fixed nested multi-column layouts with three or more levels failing to paginate content across pages. (<a href="https://commits.webkit.org/312973@main">312973@main</a>)  (176741498)</li>
<li>Fixed <code>:has()</code> selector performance by using scope selectors to limit style invalidation traversal for class, attribute, and pseudo-class changes. (<a href="https://commits.webkit.org/313009@main">313009@main</a>)  (176771971)</li>
<li>Fixed non-replaced blocks with <code>aspect-ratio</code> and a percentage <code>max-width</code> collapsing to zero width during intrinsic sizing. (<a href="https://commits.webkit.org/313074@main">313074@main</a>)  (176873776)</li>
<li>Fixed percentage <code>max-width</code> on elements with <code>aspect-ratio</code> resolving against the wrong axis in perpendicular writing modes. (<a href="https://commits.webkit.org/313078@main">313078@main</a>)  (176879597)</li>
<li>Fixed <code>z-index</code> not applying to statically-positioned <code>display: -webkit-box</code> items to align with Firefox and Chrome behavior. (<a href="https://commits.webkit.org/313081@main">313081@main</a>)  (176886461)</li>
<li>Fixed flex containers using <code>box-sizing: border-box</code> providing the wrong cross size to stretched flex items. (<a href="https://commits.webkit.org/313175@main">313175@main</a>)  (176989934)</li>
<li>Fixed flex containers with <code>aspect-ratio</code>-derived height not providing a definite cross size to their flex items. (<a href="https://commits.webkit.org/313256@main">313256@main</a>)  (177085129)</li>
<li>Fixed SVG images with no intrinsic dimensions collapsing to zero height inside column flex containers. (<a href="https://commits.webkit.org/313257@main">313257@main</a>)  (177086497)</li>
</ul>
<h3>Editing</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed a regression where Vietnamese and Korean keyboard input methods incorrectly exited modeless composition mode, requiring a double spacebar press to complete each word. (<a href="https://commits.webkit.org/313286@main">313286@main</a>)  (176847897)</li>
<li>Fixed a recent regression that &#8220;Zhuyin &#8211; Traditional&#8221; input method stalling for multiple seconds when composing Chinese text. (<a href="https://commits.webkit.org/313336@main">313336@main</a>)  (177042301)</li>
</ul>
<h3>HTML</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed a severe performance regression causing dynamic insertion of <code>&lt;img&gt;</code> elements with a <code>src</code> attribute to be dramatically slower than other browsers. (<a href="https://commits.webkit.org/313268@main">313268@main</a>)  (166201075)</li>
<li>Fixed nested calls to <code>requestClose()</code> incorrectly firing multiple <code>cancel</code> events and causing a stack overflow. (<a href="https://commits.webkit.org/313239@main">313239@main</a>)  (174850509)</li>
<li>Fixed <code>requestClose()</code> incorrectly removing the <code>open</code> attribute when called on a disconnected <code>dialog</code> element. (<a href="https://commits.webkit.org/313251@main">313251@main</a>)  (174855725)</li>
<li>Fixed <code>&lt;a rel="ar"&gt;</code> elements wrapping <code>&lt;model&gt;</code> elements to correctly enter ARQL without extra steps and to display the AR badge. (<a href="https://commits.webkit.org/313047@main">313047@main</a>)  (176410897)</li>
<li>Fixed the HTML preload scanner not preloading resources referenced by legacy <code>&lt;image&gt;</code> tags. (<a href="https://commits.webkit.org/312984@main">312984@main</a>)  (176712749)</li>
</ul>
<h3>Images</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed rendering performance of HDR images that have gain-maps by using GPU-backed surfaces. (<a href="https://commits.webkit.org/313339@main">313339@main</a>)  (176605566)</li>
</ul>
<h3>JavaScript</h3>
<h4>New Features</h4>
<ul>
<li>Added support for static <code>import defer</code> semantics. (<a href="https://commits.webkit.org/313139@main">313139@main</a>)  (176568369)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed the <code>Array</code> <code>ToPrimitive</code> fast path incorrectly ignoring overrides of <code>Object.prototype.valueOf</code>. (<a href="https://commits.webkit.org/313028@main">313028@main</a>)  (175122250)</li>
<li>Fixed input position corruption in regular expression backward matching when rewinding over a surrogate pair. (<a href="https://commits.webkit.org/313026@main">313026@main</a>)  (175122467)</li>
</ul>
<h3>MathML</h3>
<h4>New Features</h4>
<ul>
<li>Added support for operator dictionary entries for multi-character operators to align with the MathML Core specification. (<a href="https://commits.webkit.org/313083@main">313083@main</a>)  (176543727)</li>
</ul>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed the MathML operator dictionary to correct the stretchy property for several operators, resolving Web Platform Test failures. (<a href="https://commits.webkit.org/312993@main">312993@main</a>)  (170901728)</li>
<li>Fixed spacing values for prefix operators <code>+</code>, <code>−</code>, <code>±</code>, <code>∓</code>, <code>∇</code>, and infix operator <code>⋉</code> in the MathML Core operator dictionary. (<a href="https://commits.webkit.org/312999@main">312999@main</a>)  (176652211)</li>
<li>Fixed the operator dictionary entry for the <code>∂</code> prefix operator to use the correct spacing values <code>(3, 0)</code> instead of <code>(2, 1)</code>. (<a href="https://commits.webkit.org/312997@main">312997@main</a>)  (176693587)</li>
<li>Fixed nonce-hiding support for MathML elements to align with the HTML specification. (<a href="https://commits.webkit.org/313075@main">313075@main</a>)  (176875058)</li>
</ul>
<h3>Media</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed <code>timeupdate</code> events being fired during seeking before the seek operation completes. (<a href="https://commits.webkit.org/313165@main">313165@main</a>)  (176861767)</li>
<li>Fixed the <code>ended</code> event not always firing when the <code>MediaSource</code> duration is changed to match the current playback position. (<a href="https://commits.webkit.org/313141@main">313141@main</a>)  (176863546)</li>
<li>Fixed a MediaSource issue where the decode-key cleanup in coded frame processing was incorrectly removing non-orphaned samples. (<a href="https://commits.webkit.org/313296@main">313296@main</a>)  (176971800)</li>
<li>Fixed <code>currentTime()</code> returning a stale value after the playback rate was changed from zero to a non-zero value. (<a href="https://commits.webkit.org/313249@main">313249@main</a>)  (177046564)</li>
</ul>
<h3>Rendering</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed an issue where a child element with <code>filter: blur()</code> ignored <code>border-radius</code> overflow clipping from its parent. (<a href="https://commits.webkit.org/312531@main">312531@main</a>)  (175519148)</li>
<li>Fixed <code>drop-shadow</code> filters and <code>transform: translate()</code> incorrectly clipping nested elements after a regression. (<a href="https://commits.webkit.org/313316@main">313316@main</a>)  (175905543)</li>
<li>Fixed a repaint issue where table rows did not repaint their previous position after a preceding row changed size, causing content to appear at both the old and new locations. (<a href="https://commits.webkit.org/313168@main">313168@main</a>)  (176172404)</li>
</ul>
<h3>SVG</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed negative <code>stroke-dashoffset</code> values rendering with incorrect offsets when <code>stroke-dasharray</code> has an odd number of values. (<a href="https://commits.webkit.org/313353@main">313353@main</a>)  (103596361)</li>
<li>Fixed an issue where <code>@prefers-color-scheme</code> in an SVG image will sometimes not follow the system color appearance. (<a href="https://commits.webkit.org/313021@main">313021@main</a>)  (176413340)</li>
<li>Fixed <code>getScreenCTM()</code> returning an incorrect matrix when the document is scrolled under a CSS-transformed ancestor. (<a href="https://commits.webkit.org/313111@main">313111@main</a>)  (176814876)</li>
</ul>
<h3>Web API</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed missing custom element callbacks for the <code>role</code> attribute. (<a href="https://commits.webkit.org/312976@main">312976@main</a>)  (176713992)</li>
<li>Fixed incorrect URL parser invocation on the <code>Notification</code> object. (<a href="https://commits.webkit.org/312988@main">312988@main</a>)  (176762955)</li>
<li>Fixed <code>requestAnimationFrame()</code> not providing sub-millisecond timestamp precision in cross-origin isolated contexts. (<a href="https://commits.webkit.org/313153@main">313153@main</a>)  (176967366)</li>
</ul>
<h3>Web Extensions</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed cross-origin <code>XMLHttpRequest</code> incorrectly triggering additional Web Extension permission requests. (<a href="https://commits.webkit.org/313506@main">313506@main</a>)  (154866064)</li>
<li>Fixed loading Web Extensions breaking Cloudflare bot challenge pages. (<a href="https://commits.webkit.org/313007@main">313007@main</a>)  (176618014)</li>
</ul>
<h3>Web Inspector</h3>
<h4>New Features</h4>
<ul>
<li>Added unique colors for style events such as &#8220;Style Invalidated&#8221; and &#8220;Style Recalculated&#8221; in the Timeline view to distinguish them from layout events. (<a href="https://commits.webkit.org/312995@main">312995@main</a>)  (176770197)</li>
</ul>
<h3>WebGPU</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed a WGSL shader validation failure in binary arithmetic expressions. (<a href="https://commits.webkit.org/313135@main">313135@main</a>)  (176473479)</li>
</ul>
<h3>WebRTC</h3>
<h4>Resolved Issues</h4>
<ul>
<li>Fixed outgoing video feeds freezing when the Safari window is obscured by another window while a virtual background is active. (<a href="https://commits.webkit.org/312990@main">312990@main</a>)  (170720729)</li>
<li>Fixed screen sharing via <code>getDisplayMedia()</code> starting at extremely low quality and taking up to 30 seconds to become legible for remote participants. (<a href="https://commits.webkit.org/313072@main">313072@main</a>)  (175425085)</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>