Safari 18.4 Release Notes
Released March 31, 2025 — 18.4 (20621.1.15)
Overview
Safari 18.4 is available for iOS 18.4, iPadOS 18.4, visionOS 2.4, macOS 15.4, macOS Sonoma, and macOS Ventura.
Authentication
New Features
Added support for setting a pin on a security key when a registration requires it. (122660610)
Browser
Resolved Issues
Fixed an issue where sites would log out automatically after a brief time. (99829958)
Canvas
New Features
Added CanvasRenderingContext2D support for unprefixed
letterSpacingandwordSpacing. (140614722)
Deprecations
Removed support for
webKitBackingStorePixelRatio. (123980544)Removed support for the prefixed
webkitImageSmoothingEnabledto use the standardimageSmoothingEnabledproperty. (141128458)Removed non-standard legacy alias of Canvas Compositing including
setAlphaandsetCompositeOperation. (141510218)
Connection Security
New Features
Added the ability to view certificate detail from Page Menu > more > Connection Security Details on iOS, iPadOS, and in visionOS, or Safari > Connection Security Details… on macOS. (139300381)
Deprecations
Removed the lock icon from the Smart Search field for HTTPS connection. (107993392) (107993392)
CSS
New Features
Added support for
writing-mode: sideways-rlandwriting-mode: sideways-lr. (81519211)Added support for the
::details-contentpseudo-element. (129786929)Added
attr()fallback support. (136763160)Added support for
view-transition-name: match-element. (138932551)Added support for
text-autospace. (140008990)Added support for the CSS
shape()function. (142276582)Added support for gradients with only one stop. (142796999)
Resolved Issues
Fixed table
border-colorto becurrentColorby default. (48382483)Fixed combining CSS
clip-pathwith any property that creates a new stacking context makes<img>element disappear. (86091397)Fixed resize to not be applied to generated content. (121348638)
Fixed
contain: sizebreakingobject-fit. (131866042)Fixed: Dropped layout containment from
container-type. (132549134)Fixed handling all of the CSS properties in specifications that should cause a UI widget to devolve to a primitive appearance. (134273374)
Fixed
scrollIntoViewalignment to always be honored. (135484284)Fixed:
background-clip: border-areato do nothing on the root. (135972986)Fixed
vertical-rlwriting mode inter-character ruby text being significantly smaller than over ruby text. (135973587)Fixed CSS cursor to not eagerly evaluate
calc()values. (136103471)Fixed flex shorthand to not eagerly evaluate
calc(). (136103475)Fixed
-webkit-perspectiveto not eagerly evaluatecalc(). (136103493)Fixed
@propertyinitial-valuedescriptor to prevent containingvar(--foo). (136103499)Fixed delaying the evaluation of
calc()for raw font consumers so that each caller can choose the correct behavior. (136103500)Fixed grid to not eagerly evaluate
calc()for repetitions value. (136103503)Fixed
counter-increment,counter-set, andcounter-resetto not eagerly evaluatecalc(). (136103519)Fixed CSS nested declarations inside a
@scopeto behave like:where(:scope). (136856371)Fixed: Updated the
shape()function to match the proposed syntax. (138126105)Fixed same-document view transitions performance on pages with many elements. (138966650)
Fixed an issue where radial gradients with two color stops at 100% failed to extend the last color. (139369366)
Fixed
@scopestartandendto be a classic (non-forgiving) selector list. (139471866)Fixed updating the base background color where the root has
colorset explicitly when switching to light or dark modes. (139917332)Fixed performance of
querySelectorAll()with:has()descendant selectors. (140093151)Fixed the
unicode-bididefault for the<bdo>element. (140662417)Fixed broken
revert-layerwhen logical group CSS properties are explicitly inherited. (140819138)Fixed border-spacing to use the shortest possible serialization (“0px” vs “0px 0px”). (141920587)
Fixed subsequent nested styles getting ignored after an incorrect nested selector. (142187930)
Fixed
font-variant-caps: all-small-capscausing incorrectbox-sizinginflexinline context. (142212550)Fixed ensuring the correct logic is run for over-constrained cases when the absolute positioned box is a
writing-moderoot. (142214631)Fixed
animation-nameset from the view transitions dynamic UA stylesheet having extra quotes. (142298840)Fixed the serialization and parsing of
animation-namestrings. (142318879)Fixed
text-box-trimaccumulation failing when updating the CSS dynamically. (142386761)Fixed
text-emphasisto not paint emphasis marks on punctuations. (142387538)Fixed sizing and positioning issues when a popover changes CSS position upon opening. (142491219)
Fixed Page Zoom (⌘+ and ⌘-) to work with
calc()used withfont-sizeon macOS. (142736427) (FB16287129)Fixed
scroll-paddingandscroll-marginto be strongly typed CSS/Style values. (142830546)Fixed View Transitions to stop running when the user navigates with a swipe. (142844150)
Fixed top-level and nesting selector to have zero specificity matching a recent specification update. (143765827)
Deprecations
Removed the non-standard
CSSUnknownRuleinterface. (142380626)
Editing
New Features
Implemented
ClipboardItem.support()which gives the page author the ability to understand which formats are supported during Clipboard operations. It also now returns a TypeError for a newClipboardItem()with an empty Array. (136008522)
Resolved Issues
Fixed
document.execCommand("copy")only triggering if there is a selection. (27792460)Fixed an issue where iCloud Notes pasted text copied from a plain text document in Safari as raw markup. (124788252)
Fixed highlighting correctly a large text selection that ends with a common phrase. (135973065)
Fixed copying a link to a common term in an article to highlight the correct part of the page. (135973186)
Fixed missing
SecureContextin theClipboardIteminterface. (137197266)Fixed Hebrew text pasted from Safari getting aligned left. (139029945)
Fixed setting selection to not set focus unless there is an existing selection. (139075809)
Fixed sometimes being unable to select text for non-editable content. (143296175)
Fixed missing selection handles after selecting text across multiple lines. (143720155)
Forms
New Features
Improved
<input type="file" webkitdirectory>support on iOS. (125457578)Added
alphaandcolorspaceattributes to<input type=color>. (137737348)
Resolved Issues
Fixed
<textarea>to handle switching direction. (73475239)Fixed setting a
datetime-localinput to a large value cause a crash. (135733092)Fixed
<datalist>dropdown keyboard interactions to align with platform conventions. (143012287)Fixed: Disabled all Writing Tools app menu items, except “Compose”, for empty editable content. (143332082)
Home Screen Web Apps
Resolved Issues
Fixed Wake Lock API for Home Screen Web Apps. (108573133)
HTML
New Features
Implemented
<details>and<summary>disclosure triangle as a list item. (95148788)
Deprecations
Removed the
compositeattribute on an<img>element. (143109250)
Images
Resolved Issues
Fixed broken WebP images in lockdown mode. (144224372)
JavaScript
New Features
Completed the Iterator Helpers proposal by implementing
map(),filter(),take(),drop(), andflatMap()methods. (103171739)Updated
JSON.parseto provide the reviver function access to the input source text and extendedJSON.stringifybehavior to support object placeholders. (131579181)Added support for
Math.sumPrecise. (131580043)Added support for
Iterator.prototype.toArrayfrom Iterator Helpers Proposal. (135493558)Added support for
Iterator.prototype.forEachfrom Iterator Helpers Proposal. (136010225)Added support for
some,every,findfrom Iterator Helpers Proposal. (136027193)Added support for
Iterator.prototype.reduce. (136064316)Added support for
SetterThatIgnoresPrototypeProperties()in Iterator helpers. (137078675)Added support for
Atomics.pause. (137571229)Added support for
Iterator.prototype.chunksandIterator.prototype.windows. (138012241)Added support for
Iterator.concat. (138013723)Added support for Iterator Helpers. (138520150)
Added support for
Map.prototype.getOrInsertandWeakMap.prototype.getOrInsert. (138955824)Added support for
Error.isError. (141132351)Added
"never"and"formalSymbol"to thecurrencyDisplayoption forIntl.NumberFormat. (141504278)
Resolved Issues
Fixed Array destructuring assignment to close the iterator if an evaluation throws an exception. (121960887)
Fixed: Updated
Intl.DurationFormat#resolvedOptionsto the latest specification. (136276429)Fixed Iterator Helpers methods to not iterate an array. (136303997)
Fixed
Iterator.prototype.reduce()not properly forwarding thereturn()call to the underlying iterator. (137181340)Fixed
Set.prototypemethods to invokekeys()without arguments. (137395979)Fixed
Array.from(),Array.fromAsync(), andTypedArray.from()to invokedocument.allpassed as a mapper. (137490201)Fixed
Intl.DurationFormatto have a value limit to match the specification. (137885273)Fixed a rounding error for
Intl.DurationFormat. (138261569)Fixed calendar canonicalization logic in
DateTimeFormat. (141792829)Fixed broken output for
Intl.DurationFormatdigital style whenhoursDisplayis"auto". (141969050)Fixed
Intl.DurationFormatto print a negative sign for minutes after hidden hours. (142119353)Fixed
Array.prototype.toReversedto fill holes withundefined. (142197604)Fixed: Increased the
matchLimitfor regular expressions, allowing complex matches on longer strings. (143202375)
Deprecations
Removed obsoleted methods for
Temporal.PlainTimeandTemporal.PlainDateTimeto align with specification changes. (135509670)
Loading
New Features
Added
noopener-allow-popupssupport in Cross-Origin-Opener-Policy. (129664445)
Media
New Features
Added support for Ogg Opus and Ogg Vorbis on macOS Sequoia 15.4, iOS 18.4, iPadOS 18.4, and visionOS 2.4. (131407707)
Added support for the Image Capture API. (136860809)
Added WebM support to MediaRecorder. (137560454)
Resolved Issues
Fixed handling an empty
srcAttrin Media Element. (132042925)Fixed getUserMedia video track
getSettings()returning a stale value fortorchandwhiteBalanceModeconstraints. (137870391)Fixed the
spacekey not pausing a video in fullscreen by making the video mouse focusable. (138037616)Fixed an issue where playback doesn’t always resume after a seek. (140097993)
Fixed playing video generating non-monotonic ‘timeupdate’ events. (142275184) (FB16222910)
Fixed websites calling
play()during aseek()is allowed by the specification so that the play event is fired even if the seek hasn’t completed. (142517488)Fixed seek not completing for WebM under some circumstances. (143372794)
Fixed MediaRecorderPrivateEncoder writing frames out of order. (143956063)
Networking
New Features
Added support for Cookies Having Independent Partitioned State (CHIPS). (116143212)
Added support for cookies’
Partitionedattribute for opt-in partitioned cookies. (142317056)Blocked partitioned cookies for known tracking domains. (144184516)
Resolved Issues
Fixed optimistically upgraded navigations to set a timeout based on current network conditions. (135972599)
Deprecations
Changed 3DES cipher to show a warning to users that it is a legacy TLS cipher. (138948491)
Resolved Issues
Fixed switching a PDF from continuous to discrete mode displaying the page(s) that are at the top of the window, even when barely visible. (137608841)
Fixed the “Previous Page” context menu option not navigating to previous page in 2-up continuous mode. (139817364)
Fixed main frame PDFs served with a CSP sandbox header not loading. (141166987)
Rendering
Resolved Issues
Fixed computing the baseline for replaced elements with an intrinsic ratio but no intrinsic size as flex items. (74279029)
Fixed flickering caused by extra resize events dispatched when rotating from landscape to portrait on iOS. (93767145)
Fixed adding out-of-flow objects under the inline in a continuation chain, when possible. (102421379)
Fixed
mix-blend-modeto work for large resolution fixed or stick elements. (104686540)Fixed the missing table collapsed border for
<thead>,<tbody>, and<tfoot>elements in the wrong order. (110430887)Fixed handling inline-box trailing content. (112409103)
Fixed
<input type="range">taking up space even withwidth: 0applied. (113402515)Fixed the Spotify media player disappearing when rotating to landscape mode on iOS. (123870311)
Fixed textarea elements to reserve space for overlay scrollbars. (129597865)
Fixed grid layout animation performance by caching intrinsic logical heights during the first row sizing pass, improving efficiency and preventing invalidation issues with complex grid configurations. (135791322)
Fixed Grid item which is an image with specified sizes failing to update when the
srcchanges. (135972911)Fixed nested inlines’ vertical alignment when
line-fit-edgeis set. (136036997)Fixed the consistency of table layout with
<td width="100%">. (136090741)Fixed repainting to be more consistent for
text-underline-position. (136095297)Fixed floats not clearing in the WordPress Classic Editor sidebar layout. (136362683)
Fixed handling of out-of-flow children in MathML layout functions to be consistent. (136683070)
Fixed a repeating
background-imagesized to thecontent-boxfailing to fill the viewport in an iframe. (136725820)Fixed consistently triggering a reflow when needed for table DOM manipulations. (137300794)
Fixed
scriptlevelmultipler for font-size in MathML. (137671252)Fixed inline marquees to allow them to shrink when adjacent to float(s). (137766071)
Fixed a flex container with no flex item to not run flex layout. (137884128)
Fixed support for CSS width and height properties on MathML elements. (138174295)
Fixed Inline content incorrectly positioning around right-to-left and/or vertical
shape-outsidefloats. (139076129)Fixed incorrectly overlapping when a float has
shape-outside: inset. (139133291)Fixed right-to-left content failing with a
shape-outsidefloat. (139198865)Fixed incorrectly overlapping a float that has
shape-outside: ellipsein vertical mode. (139208636)Fixed incorrectly overlapping a float that has
shape-outside: polygonin right-to-left. (139215719)Fixed outside
list-style-positionquirk to only be applicable in quirks mode. (140602985)Fixed: Updated line box dimensions. (141167251)
Fixed incorrect horizontal writing mode state when nested in a vertical block container. (141543326)
Fixed baseline calculation few cases for tables with empty rows. (142046863)
Fixed to refuse to break inside replaced content. (142224455)
Fixed absolute positioned child with percent to include containing block padding. (142321535)
Fixed computing an out-of-flow box width correctly when it is inside an inline continuation. (142417374)
Fixed a border not showing when a linear gradient and a border radius are set. (142617573)
Fixed relative-positioned input elements in scroll areas not rendering outlines. (142995142)
Fixed tabbing out of a popover causing a hang in certain cases. (143145544)
Fixed setting up inline continuations correctly when not inserting a new child. (143388080)
Fixed adding a
margin-topto a<rt>also adds a bottom margin. (143720832)
Scrolling
New Features
Added support for Scroll To Text Fragment feature detection with
document.fragmentDirective. (139631353)
Resolved Issues
Fixed changes to the “scrolling” attribute on an iframe element already in the DOM to take effect. (98911472)
Security
New Features
Added support for CSP Hash Reporting keywords:
report-sha256,report-sha384, andreport-sha512. (142458671)
Deprecations
Removed support for
Clear-Site-Data: *forexecutionContextsas Safari was the only browser to ship it. (120821984)
Service Workers
Resolved Issues
Fixed handling the case of busy looping service workers in a process containing web pages. (138626537)
Fixed an unexpected failure when serving a redirected response from cache for a navigation loaded via service worker navigation preload. (146113615)
Spatial Web
New Features
Added support behind a feature flag for the
controlsattribute on<img>elements for spatial images in visionOS. (129784451)Added support for Writing Tools in visionOS. (135210076)
Storage
New Features
Added support for partitioned cookies in
Clear-Site-Data: Cookies. (140403030)
Resolved Issues
Fixed the Storage Access API to consider
AllExceptPartitionedas not currently having cookie access, ensuring sites can request access to first-party cookie. (143508260)
SVG
New Features
Added support for
SVGImageElement.prototype.decode(). (135404215)Added support for the
lhlength type. (142068343)Added support for the
chlength type for character width, but does not include support for upright vertical character width. (142463263)
Resolved Issues
Fixed not propagating the bounding box for empty
textto ancestors. (115217040)Fixed SVG masks not working as a
mask-image. (127327715)Fixed a bug in case of reference elements (e.g., textPath) unable to notify the referring element (e.g, text) about their availability. (135509733)
Fixed SVGUseElement to prevent sniffing the content type when loading an external document. (135972621)
Fixed vertical writing modes to se the correct bounding rect. (135973175)
Fixed: Updated
getTotalLength()with the web specification to throw an exception when non-renderable and the path is empty. (136719548)Fixed SVG quadratic curve getting incorrectly clipped at tile boundaries. (139904014)
Fixed dynamically updating the
transformattribute. (140761655)Fixed synthesizing a
viewBoxin<img>only for the document element<svg>. (141733733)Fixed
SVGElement.prototype.ownerSVGElementon the outermost<svg>inforeignObject. (143625675)
Deprecations
Removed the SVG 1.1 kerning property. (116965514)
Removed SVGDocument alias to XMLDocument. (123121696)
Tables
Resolved Issues
Fixed table row direction to be determined by the table’s direction, not the section. (99343532)
Fixed missing behavior for
rowspan="0"on HTML tables where 0 means span over all the remaining rows. (133910430)Fixed Table Root to also account for
fill-availablein a fixed table layout. (137297914)Fixed table section and row background to not be treated as opaque. (142588505)
Text
Resolved Issues
Fixed an issue where a thick underline would not show on short content. (64705955)
Fixed: The changes for GB18030-2022 now properly impact GBK as well, as required by the Encoding Standard. (136368583)
Fixed automatically hyphenating text only when a language specified. (136826305)
Fixed the boundary style calculation when
text-spacing: text-autospaceis applied. (137153961)Fixed displaying OpenType-SVG color fonts. (137496217) (FB15426148)
Web API
New Features
Added support for
element.focus({ focusVisible: true }). (97021844)Added support for
PublicKeyCredential.toJSON(). (109419228)Added support for the Cookie Store API. (135969444)
Added Key generation, import and export support for CryptoKeyOKP(x25519/ed25519). (136368298)
Added support for Brotli to Compression Streams. (137244214)
Added an option to set the popover’s invoker from an imperative API. (139362169)
Added support for Declarative Web Push. (141082392)
Added support for X25519 for Web Cryptography. (141346336)
Added support for
dialog.requestClose(). (143388390)
Resolved Issues
Fixed: Aligned some MIME type handling in EME with the MIME Sniffing standard. (114311586)
Fixed
window.history.replaceState('', '', '')having no effect on macOS. (117782346)Fixed MutationObserver to observe style attribute changes when resizing the element. (120109181)
Fixed: Updated
selectorTexthandling to align with the specification for CSSPageRule. (125588212)Fixed Gamepad rumble issue where sending two sequential
playEffect()requests preventsreset()from working as expected. (126589062) (FB13733668)Fixed matching emoji in an element’s
idattribute from a<link rel=expect>with anhrefthat uses percent-encoded syntax. (134531921)Fixed the
onrejectionhandledandonunhandledrejectionevent handler attributes to work correctly on body and frameset elements. (135401362)Fixed render blocking for
<link>to not match elements that are on a ‘stack of open elements’ for the parser. (135846827)Fixed Distraction Control unexpectedly hiding out-of-flow elements that overlap with a hidden element. (136358918)
Fixed CSSOM
setSelectorText(string)to prepend the implicit selector. (136791222)Fixed
HTMLElement.prototype.requestPointerLockto return a Promise. (139854530)Fixed
innerTextbehavior for<details>and<summary>. (140172890)Fixed the HTML parser phone number handling to better account for MathML. (141632782)
Fixed
Range.getClientRectsto take surrogate pairs into account. (142098484)Fixed tokenization of the rel attribute of the link element and Link header. (142600096)
Deprecations
Removed wheel event handling for
<input type="number">to match platform conventions. (99318505)
Web Authentication
Resolved Issues
Fixed
.catch()for conditional mediation not getting passed the abort reason that was thrown. (112178073)
Web Extensions
New Features
Added support for loading Safari Web Extensions that have been Developer ID-signed and notarized. (40429283)
Added support for temporarily installing web extensions from disk without requiring an Xcode project. (98208121)
Added support for
getKeys()in storage areas. (136595295)Added support for
i18n.getSystemUILanguageandi18n.getPreferredSystemLanguages. (136929657)Added support for
documentIdto thesendermessage object. (137532821)Added support for
documentIdtotabs.sendMessage()andtabs.connect(). (137532897)Added support for
documentIdinwebNavigation. (137532909)Added support for
documentIdtowebRequest. (141058456)Added support for
documentIdtoscriptingandtabs. (141291546)Added support for
match_about_blankandmatch_origin_as_fallbackto inject content scripts and styles into more frames. (145875291)
Resolved Issues
Fixed CORS for Web Extension pages to respect granted per-site permissions.
Developers will need to add a
browser.permissions.request({origins: []})call before doing anyfetch()that is blocked by CORS. (102912898)Fixed an issue causing content blockers to not hide content in
about:blankframes. (134273470)Fixed a slowdown in applying rulesets and dynamic rules in declarativeNetRequest. (136394861) (FB15196130)
Fixed clicking the “Clear Storage…” button in Safari Extensions Settings. (137533628)
Fixed
storage.onChangedreturning undefined as theareaName. (138086765)Fixed the
tabsfield missing from the result returned bywindows.create. (138529797)Fixed es-419 support in Web Extensions. (138857112)
Fixed the
webRequest.onBeforeRequestevent missing therequestBody. (140338580) (FB15911234)Fixed blurry extension icons. (142070967) (FB16171862)
Fixed not picking the “zh” locale when “zh-Hant” is preferred. (142602243) (FB16271745)
Fixed
webRequestevent listeners to honorextraInfoSpecfor better performace. (142907168)Fixed web extension resources to be treated as UTF-8 by default. (143079179)
Web Inspector
New Features
Added support for
ignoreListin sourcemaps. (130630075)Added support for viewport presets in Responsive Design Mode. (131541189)
Added support for the Apps and Devices Inspector. (134519731)
Exposed cookie Partition Key in Web Inspector. (136293236)
Added the ability to modify only the headers of a request using a Request Local Override. (139043491)
Added support for sending Android user agents using the device override menu when Web Inspector is connected to a remote device. (139305520)
Added support for
DOMRectinconsole.screenshot. (141650264)Added an orientation toggle to rotate a viewport preset in Responsive Design Mode. (142632311)
Resolved Issues
Fixed ensuring that all of the Desktop Sites on iPad site-specific hacks are disabled when the site-specific hacks setting is turned off in Web Inspector. (50035167)
Fixed style rules to stay editable after being modified by CSSOM in JavaScript. (124650808)
Fixed glitches when trying to edit a style from a stylesheet that has an
@importstatement. (131756178)Fixed error cases to match new source map specification. (137934436)
Fixed the overview icon to be inverted dark mode in the Graphics tab. (140602803)
Fixed recorded WebGL objects not getting highlighted correctly in the Graphics tab. (140625113)
WebAssembly
New Features
Added support for JIT-less Wasm. (113768974)
Added support for the new Wasm Exception Specification. (131409318)
Implemented relaxed laneselect SIMD instructions. (138484223)
Resolved Issues
Fixed Wasm legacy
catch_allinstruction to correctly catch thrown JS primitives. (135972897)
WebDriver
Resolved Issues
Fixed a crash that could occur when simulating drag events with the right mouse button. (137068514)
WebKit
New Features
Added support for
WKWebExtension,WKWebExtensionContext, andWKWebExtensionControllerSwift and Objective-C classes to support integrating Web Extensions into WebKit-based browsers. (121537087)
WebRTC
New Features
Added support for MediaSession capture mute API. (131386187)
Added support for stuns server URIs. (136505783)
Added support for enumerated visible network interfaces. (137067672)
Added support for the Speaker Selection API on macOS. (140918327)
Resolved Issues
Fixed
MediaSession.setMicrophoneActive(true)prompting repeatedly if the microphone was muted by the user-agent once. (135941062)Fixed
setCameraActiveto not unmute microphone if the user-agent previously muted both camera and microphone. (136221456)Fixed AirPods unmuting to not unmute the camera if website muted the camera. (137065964)
Fixed voice search to not re-prompt for camera or microphone permission after a page-initiated same origin navigation. (138122655)
WKWebView
New Features
Added support for customizing the file upload flow for file inputs. (130219174)
Added support for WKNavigationAction/buttonNumber and WKNavigationAction/modifierFlags as API on iOS. (136865172)
Added support for the Writing Tools API in visionOS. (140412673)
Resolved Issues
Fixed calling
WKWebView.evaluateJavaScriptin an async context when nothing is returned by JS. (139618495) (FB15755273)