Safari 27.0 adds 80 features and 844 fixes
Published Updated
Corrections: 2026-10-14
Safari 27.0 includes 80 features and 844 resolved issues, according to WebKit’s feature post of 2026-09-17. The feature count grew from 58 in the first beta. WebKit’s chart classifies Safari 27 items as 86% resolved issues, 11% improved features, 2% brand-new features, and less than 1% deprecations. The changes cover APIs for page and worker code as well as Safari and its developer tools (WebKit).
API changes and developer tools
Section titled “API changes and developer tools”WebKit places static routing and the three stream additions in its Web API section, while Safari MCP has its own section as a browser-development tool (WebKit).
The parts a web app can call
Section titled “The parts a web app can call”WebKit describes the Service Worker static routing API as letting a service
worker declare routing rules so that certain
requests bypass the service worker altogether. MDN’s reference for the method
that does it, InstallEvent.addRoutes(), describes static routes as rules “for
fetching specified resources that will be used even before service worker
startup”, with a source of network, cache, fetch-event, or
race-network-and-fetch-handler, and a condition that can match on a
URLPattern, a request method, a request mode, a request destination, or the
service worker’s own running status
(WebKit; MDN).
Streams get three additions in the same release. WebKit lists async iteration
over a readable stream with for await...of, the static
ReadableStream.from() method, and the ability to transfer a stream through
postMessage(). MDN describes ReadableStream.from() as returning a readable
stream from a provided iterable or async iterable object. Transferring a stream
over postMessage() gives the receiving context a readable stream. The Streams
Standard says the receiving side gets a
transferred stream that “can be used exactly like the original”, while “the
original will become locked and no longer directly usable”
(WebKit; MDN; Streams Standard).
Scroll anchoring changes browser behaviour without a method call. WebKit
describes it as adjusting the scroll position when content loads above the
viewport, so the page does not jump under the reader, and names the
overflow-anchor CSS property as the control. MDN’s reference for that
property documents exactly two values, auto and none, and frames the
property as the way to turn the behaviour off for an element. Enabling it requires no call, since anchoring is on by default where supported
(WebKit; MDN).
WebKit reports that <select> now supports full customization through
appearance: base-select, new pseudo-elements including ::picker-icon and
::checkmark, and the ability to put HTML inside an <option>
(WebKit).
Safari 27.0 also adds the <selectedcontent> element for controlling what the
selected option displays. WebKit says the customizable control remains a real
form control, retaining support for keyboard navigation, screen readers, form
submission, validation, and change events. Its new user-agent styles cover
light and dark modes as well as forced colors and disabled states
(WebKit).
For images, the release adds the auto keyword for sizes on lazy-loaded
images. WebKit says this lets Safari calculate the image size from its actual
layout width once that width is known. Declarative shadow roots gain the
shadowrootslotassignment attribute, which selects named or manual slot
assignment directly in HTML
(WebKit).
The parts that change the environment
Section titled “The parts that change the environment”The Safari MCP server is a developer tool with no web API. WebKit says it is
available in Safari 27.0 and gives coding agents access to the DOM, network
requests, screenshots, and console output. To enable it, WebKit directs users to
Safari > Settings > Developer and the “Allow remote automation and external
agents” option; its Codex example starts /usr/bin/safaridriver with --mcp
(WebKit).
The HTML <model> element is in the release for iOS and iPadOS as well as macOS, with
attributes WebKit names as environmentmap and stagemode. On visionOS the
same element plus a JavaScript Immersive API lets a site provide a custom
immersive environment, replacing the developer preview WebKit had shipped under
the name Spatial Backdrop
(WebKit).
WebKit describes WebAssembly JSPI as allowing WebAssembly code written in a synchronous style to suspend and wait for JavaScript promises (WebKit).
Safari 27.0’s Web Inspector shows color-contrast information inside the Color Picker. The Network tab shows every request in a redirect chain, the Elements tab adds badges for Subgrid and Grid Lanes, and Timeline event details include the layout root element. WebKit also says Safari MCP runs locally, makes no network calls of its own, and sends captured data directly to the configured agent; Apple does not receive it (WebKit).
The networking section adds support for setting Secure cookies on loopback
hosts over plain HTTP through JavaScript or Set-Cookie. The WebGPU section
adds the WGSL clip_distances built-in, which lets vertex shaders define custom
clipping planes before rasterization
(WebKit).
Media changes include allowing TextTrackCue.endTime to be set to Infinity
for an unbounded cue and letting a hardware VideoDecoder override the color
space used for WebCodecs video when embedded color-space metadata is missing or
wrong. Canvas gains srgb-linear and
display-p3-linear predefined color spaces, while CanvasPath.roundRect() can
omit its radii argument to draw a rectangle with square corners
(WebKit).
Where the quality work went
Section titled “Where the quality work went”WebKit describes its quality work through five themes: Compatibility,
Foundations, Depth, Alignment, and Integration. The detailed resolved-issues
list is organized by technology area. The post discusses the all-new ES module
loader under Foundations, and it also lists the standards-compliant loader
rewrite in the JavaScript feature section, where WebKit says the rewrite fixes
module ordering and initialization problems associated with top-level await
(WebKit).
Impact on service worker routing and streams
Section titled “Impact on service worker routing and streams”Static routing lets an installed service worker declare rules that are used before service worker startup. Transferable streams let one context receive a readable stream while the original becomes locked and no longer directly usable (MDN; Streams Standard).
Scroll anchoring adjusts the scroll position when content loads above the
viewport, and overflow-anchor: none opts an element out. Customizable
select adds appearance: base-select and related pseudo-elements. It also allows HTML
content inside <option>
(WebKit; MDN).
WebKit’s article reports 80 features and 844 resolved issues for Safari 27.0 (WebKit).
Related entries on this site
Section titled “Related entries on this site”- Platforms: see platform reference.
- Baseline support overview: see Baseline 2026 coverage.
- Compatibility by browser: see browser-by-browser compatibility view.
Open and unverified
Section titled “Open and unverified”- How WebKit classified each item as resolved, improved, new, or deprecated is not confirmed.
- The complete per-platform availability matrix for the full Safari 27.0 feature set is not confirmed.
- Whether the full set of static-routing conditions and sources documented by MDN behaves identically in Safari 27.0 is not confirmed.
- The complete set of customizable-select pseudo-elements and
<model>attributes shipped in Safari 27.0 is not enumerated here. - Whether third-party coding agents all support the same Safari MCP workflow is not confirmed.
Correction (2026-10-14)
Section titled “Correction (2026-10-14)”The feature post was published on 2026-09-17 and reports 80 features. Its chart counts items, without measuring effort. WebKit discusses the module-loader rewrite in both the quality themes and the feature list, and provides the Safari MCP configuration (WebKit).
Sources
Section titled “Sources”- WebKit’s Safari 27.0 feature post, published 2026-09-17 (webkit.org)
- InstallEvent: addRoutes() method (developer.mozilla.org)
- overflow-anchor (developer.mozilla.org)
- ReadableStream: from() static method (developer.mozilla.org)
- Streams Standard: transferring a ReadableStream (streams.spec.whatwg.org)