<!--
{
  "documentType" : "article",
  "framework" : "Safari Technology Preview Release Notes",
  "identifier" : "/documentation/Safari-Technology-Preview-Release-Notes/stp-release-97",
  "metadataVersion" : "0.1.0",
  "role" : "article",
  "title" : "Safari Technology Preview 97 Release Notes"
}
-->

# Safari Technology Preview 97 Release Notes

Preview the latest web technology updates including: Resize Observer, WebAuthn, Web Animations, Web Inspector, Rendering, Back-Forward Cache, SVG, Clipboard API, CSS, Remote Playback API, Media, JavaScript, Picture-in-Picture Web API, WebAssembly, and Web API.

## Overview

[Safari Technology Preview](https://webkit.org/blog/6017/introducing-safari-technology-preview/) Release 97 is now [available for download](https://webkit.org/downloads/) for macOS Catalina and macOS Mojave. If you already have Safari Technology Preview installed, you can update in the Software Update pane of System Preferences on macOS.

This release covers WebKit revisions [251627-252823](https://trac.webkit.org/log?stop_rev=251627&&rev=252823&limit=999).

### Resize Observer

- Enabled Resize Observer by default ([r251822](https://trac.webkit.org/changeset/251822/webkit/))

### WebAuthn

- Added UI with instructions for authenticating with a security key while authenticating
- Added support for legacy Google NFC Titan security keys ([r252297](https://trac.webkit.org/changeset/252297/webkit/))

### Web Animations

- Added support for `AnimationEvent.pseudoElement` ([r251840](https://trac.webkit.org/changeset/251840/webkit/))
- Fixed retargeted transitions targeting accelerated properties that do not stop the original transition ([r252540](https://trac.webkit.org/changeset/252540/webkit/))
- Fixed the easing property for a CSS transition effect ([r251657](https://trac.webkit.org/changeset/251657/webkit/))
- Fixed the transform property always `none` for `getKeyframes()` output of a CSS Animation ([r251839](https://trac.webkit.org/changeset/251839/webkit/))
- Fixed `getKeyframes()` to return the right timing function for declarative animations ([r251649](https://trac.webkit.org/changeset/251649/webkit/))

### Web Inspector

- Elements
  - Added support for multiline CSS property values ([r252523](https://trac.webkit.org/changeset/252523/webkit/))
  - Added support for highlighting nodes that match CSS rules with pseudo-selectors ([r252436](https://trac.webkit.org/changeset/252436/webkit/))
  - Added color picker support for P3 color space ([r252168](https://trac.webkit.org/changeset/252168/webkit/))
  - Fixed an issue where copying multiple DOM nodes would only copy the last selected DOM node ([r252615](https://trac.webkit.org/changeset/252615/webkit/))
  - Fixed `aqua` and `fuchsia` not being detected as CSS colors ([r252448](https://trac.webkit.org/changeset/252448/webkit/))
  - Outlined sRGB-safe areas on the P3 color picker ([r252747](https://trac.webkit.org/changeset/252747/webkit/))
- Sources
  - Added a context menu item to reveal the local override when a resource is loaded from it ([r252495](https://trac.webkit.org/changeset/252495/webkit/))
  - Added support for matching local overrides based on URL pattern in addition to exact match ([r252614](https://trac.webkit.org/changeset/252614/webkit/))
  - Changed to prefer non-blackboxed scripts when showing a source code location link ([r253087](https://trac.webkit.org/changeset/253087/webkit/))
  - Changed to fire Node Removed breakpoints whenever the DOM node is removed from the main DOM tree, not just when it’s removed from it’s parent ([r251871](https://trac.webkit.org/changeset/251871/webkit/))
  - Fixed “Toggle Visibility” context menu item to work for elements inside a shadow tree ([r252026](https://trac.webkit.org/changeset/252026/webkit/))
  - Made the default content of the Inspector Bootstrap Script a comment that explains how it works ([r251921](https://trac.webkit.org/changeset/251921/webkit/))
  - Moved the “Local Override…” creation item from the Breakpoints section options menu to the Create Resource menu ([r252517](https://trac.webkit.org/changeset/252517/webkit/))
  - Made call frames from blackboxed scripts visually distinct ([r252745](https://trac.webkit.org/changeset/252745/webkit/))
- Timelines
  - Added a marker for when a stop was requested ([r252199](https://trac.webkit.org/changeset/252199/webkit/))
  - Added a timeline that shows information about any recorded CSS animation/transition ([r251959](https://trac.webkit.org/changeset/251959/webkit/))
  - Labeled ResizeObserver callbacks in the JavaScript & Events timeline ([r251832](https://trac.webkit.org/changeset/251832/webkit/))
- Layers
  - Enabled the Layers Tab by default ([r252063](https://trac.webkit.org/changeset/252063/webkit/))
- Console
  - Defaulted to focusing the console prompt if no other content is focused after opening Web Inspector ([r251958](https://trac.webkit.org/changeset/251958/webkit/))
  - Fixed an issue where the saved result value was still being shown after navigating ([r253000](https://trac.webkit.org/changeset/253000/webkit/))
- Settings
  - Enabled line wrapping by default ([r251918](https://trac.webkit.org/changeset/251918/webkit/))

### Rendering

- Fixed image flashing with `transform: rotate` animation ([r252486](https://trac.webkit.org/changeset/252486/webkit/))
- Implemented accelerated video-to-texture upload path for ANGLE backend for WebGL ([r252741](https://trac.webkit.org/changeset/252741/webkit/))

### Back-Forward Cache

- Added site-specific back-forward cache quirk to work around an issue on vimeo.com ([r252301](https://trac.webkit.org/changeset/252301/webkit/))
- Fixed WebAnimation to never prevent entering the back-forward cache ([r251742](https://trac.webkit.org/changeset/251742/webkit/))
- Fixed PaymentRequest and PaymentResponse to not prevent entering the back-forward cache ([r252338](https://trac.webkit.org/changeset/252338/webkit/))
- Fixed UserMediaRequest to not prevent entering the back-forward cache ([r251746](https://trac.webkit.org/changeset/251746/webkit/))
- Made MediaStream and MediaStreamTrack back-forward cache friendly ([r252337](https://trac.webkit.org/changeset/252337/webkit/))

### SVG

- Added the `orient` property of the interface SVGMarkerElement ([r252444](https://trac.webkit.org/changeset/252444/webkit/))
- Added percentage support for `fill-opacity`, `stroke-opacity`, `stop-opacity`, and `flood-opacity` ([r251696](https://trac.webkit.org/changeset/251696/webkit/))
- Changed properties that take `<position>` to not accept 3 values ([r251668](https://trac.webkit.org/changeset/251668/webkit/))
- Disabled SVG shapes should not be hit ([r252069](https://trac.webkit.org/changeset/252069/webkit/))
- Fixed `SVGGeometryElement.getPointAtLength` to clamp its argument ([r251877](https://trac.webkit.org/changeset/251877/webkit/))
- Fixed opacity to always serialize as a number ([r251828](https://trac.webkit.org/changeset/251828/webkit/))

### Clipboard API

- Added some infrastructure to resolve ClipboardItems into pasteboard data for writing ([r252315](https://trac.webkit.org/changeset/252315/webkit/))
- Added support for `Clipboard.readText()` ([r252627](https://trac.webkit.org/changeset/252627/webkit/))

### CSS

- Added support for the Q unit ([r251662](https://trac.webkit.org/changeset/251662/webkit/))
- Changed CSS Transitions and CSS Animations properties to treat unit-less 0 as an invalid value for times ([r251658](https://trac.webkit.org/changeset/251658/webkit/))
- Fixed CSS grid line name positions after auto repeat with no line names ([r251965](https://trac.webkit.org/changeset/251965/webkit/))
- Fixed `-webkit-font-smoothing: none` not antialiasing subsequent elements ([r252622](https://trac.webkit.org/changeset/252622/webkit/))
- Fixed `::before` and `::after` elements not filling their grid cell when the container has `display: contents` ([r251780](https://trac.webkit.org/changeset/251780/webkit/))
- Fixed `calc()` serialization to match the specifications ([r253079](https://trac.webkit.org/changeset/253079/webkit/))
- Implemented the CSS `clamp()` function ([r253105](https://trac.webkit.org/changeset/253105/webkit/))

### Remote Playback API

- Enabled Remote Playback API by default ([r251784](https://trac.webkit.org/changeset/251784/webkit/), [r251737](https://trac.webkit.org/changeset/251737/webkit/))
- Ensured the MediaRemote callback always called ([r252331](https://trac.webkit.org/changeset/252331/webkit/))

### Media

- Batched multiple EME key requests into one request and response ([r251895](https://trac.webkit.org/changeset/251895/webkit/))

### JavaScript

- Added BigInt support for `++` and `--` ([r252680](https://trac.webkit.org/changeset/252680/webkit/))
- Fixed `Intl.DateTimeFormat` to return resolvedOptions in the correct order ([r251815](https://trac.webkit.org/changeset/251815/webkit/))
- Optimized Promise runtime functions ([r251671](https://trac.webkit.org/changeset/251671/webkit/))
- Implement `String.prototype.replaceAll` ([r252683](https://trac.webkit.org/changeset/252683/webkit/))

### Picture-in-Picture Web API

- Enabled the Picture-in-Picture API by default ([r251925](https://trac.webkit.org/changeset/251925/webkit/), [r251745](https://trac.webkit.org/changeset/251745/webkit/), [r251797](https://trac.webkit.org/changeset/251797/webkit/))
- Added support for the `:picture-in-picture` CSS pseudo-class for video elements in picture-in-picture mode ([r252330](https://trac.webkit.org/changeset/252330/webkit/))
- Fixed picture-in-picture events to fire when entering or exiting the picture-in-picture mode ([r252240](https://trac.webkit.org/changeset/252240/webkit/))

### WebAssembly

- Created a WebAssembly interpreter ([r251886](https://trac.webkit.org/changeset/251886/webkit/))
- Support `WebAssembly.Global` ([r253074](https://trac.webkit.org/changeset/253074/webkit/))

### Web API

- Added fullscreen style support for reddit.com ([r251827](https://trac.webkit.org/changeset/251827/webkit/))
- Changed the file input to fire an `input` event before the `change` event ([r252768](https://trac.webkit.org/changeset/252768/webkit/))
- Changed hidden framesets to provide default `edgeInfo` value ([r251680](https://trac.webkit.org/changeset/251680/webkit/))
- Fixed `<input type="range">.setAttribute("value")` to update the value ([r251718](https://trac.webkit.org/changeset/251718/webkit/))
- Fixed some captcha images rendering as a blank white space ([r252353](https://trac.webkit.org/changeset/252353/webkit/))
- Fixed content sometimes disappearing for a `<video>` with controls and clipping ([r252070](https://trac.webkit.org/changeset/252070/webkit/))
- Fixed a bug where focusing a shadow host which delegates focus will properly skip inner shadow hosts that delegate focus ([r252537](https://trac.webkit.org/changeset/252537/webkit/))
- Fixed `getComputedStyle` returning `auto` for `zIndex` property even after it has been set on non-positioned elements ([r252724](https://trac.webkit.org/changeset/252724/webkit/))
- Fixed very slow tile rendering due to event region painting in Google Docs spreadsheets ([r252419](https://trac.webkit.org/changeset/252419/webkit/))
- Fixed notification permissions not getting remembered for origins without a port ([r251709](https://trac.webkit.org/changeset/251709/webkit/))
- Fixed `VeryHigh` priority loads ([r252431](https://trac.webkit.org/changeset/252431/webkit/))

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)