Release Notes for Safari Technology Preview 117

Safari Technology Preview Release 117 is now available for download for macOS Big Sur and macOS Catalina. 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 268651-270230.

Web Inspector

  • Elements
    • Added the option to “Edit Breakpoint…” or “Reveal Breakpoint” in Sources Tab (r269337)
    • Extra closing parenthesis added after var in styles panel (r269201)
  • Network
    • Fixed background color of rows from previous session (r269127)
    • Truncated data URLs in the Resources sidebar and Headers panel (r269075)
  • Search
    • Prevented stealing focus from the search field when shown (r269074)
  • Sources
    • Changed the default breakpoint action to be evaluate (r269547)
  • Console
    • Exposed console command line API to breakpoint conditions and actions (r269023, r269044)
    • Fixed using Show JavaScript Console in an empty tab in Safari Technology Preview (r270060)
  • Other Changes
    • Updated styles to use CSS properties with neutral directionality (r269166)


  • Added support for discrete animations of many CSS properties (r269812, r269333, r269357, r268792, r268718, r268726)
  • Added support for animations on more pseudo-elements (such as :marker) (r269813)
  • Added support for more properties on ::marker (r269774)
  • Added parse support for aspect-ratio CSS property (r269641)
  • Made CSS font shorthands parsable within a worker (r269957)
  • Changed images as flex items to use the overridingLogicalHeight when defined to compute the logical width (r270073)
  • Changed images as flex items to use the overridingLogicalWidth when defined to compute the logical height (r270116)
  • Changed background-size to not accept negative values (r269237)
  • Fixed issues with percentage height on grid item replaced children when the grid item has a scrollbar (r269717)
  • Serialized aspect ratio with spaces around the slash (r268659)


  • Enabled static public class fields (r269922, r269939)
  • Enabled static and instance private class fields (r270066)
  • Implemented Intl.DateTimeFormat.formatRangeToParts (r269706)
  • Implemented Intl.ListFormat (r268956)
  • Aligned %TypedArray% behavior with recent spec adjustments (r269670)
  • Implemented @@species support in ArrayBuffer#slice (r269574)
  • Fixed toLocaleDateString() resolving incorrect date for some old dates (r269502)
  • Resurrected SharedArrayBuffer and Atomics behind a flag (JSC_useSharedArrayBuffer=1) (r269531)


  • Added wasm atomics instructions, partially behind a flag (JSC_useSharedArrayBuffer=1) (r270208)
  • Fixed opcodes for table.grow and table.size (r269790)
  • Implemented shared WebAssembly.Memory behind a flag (JSC_useSharedArrayBuffer=1) (r269940)
  • Implemented i32 sign-extension-ops (r269929)


  • Added proper garbage collection to ResizeObserver (r268860)
  • Changed Worklet.addModule() to reject promise with an AbortError when the network load fails (r270033)
  • Changed event targets to be cleared after dispatch if the target pointed to a shadow tree (r269546)
  • Changed WebSocket constructor to not throw when the port is blocked (r269459)
  • Fixed toggling dark mode to update the scrollbar appearance in overflow: scroll elements (r269437)
  • Fixed navigator.clipboard to be exposed on *.localhost pages (r269960)
  • Fixed auto-focus of text input to not select text (r269587)
  • Fixed Canvas drawImage to not raise an IndexSizeError on empty sources (r270126)
  • Fixed getIndexedParameter indexing crash (r270160)
  • Fixed text getting clobbered when assigning to input.defaultValue (r269528)
  • Fixed <input disabled> to fire click events after dispatchEvent (r269452)
  • Fixed the space between minute and meridiem fields in time inputs being too large (r270148)
  • Fixed window.event to not be affected by nodes moving post-dispatch (r269500)
  • Improved exception messages when AudioContext.suspend() / resume() promises are rejected (r268999)
  • Promises returned by our DOM API have the caller’s global instead of the callee’s (r269227)
  • Removed unneeded whitespace between content and <br> (r268958, r269036)

Speech Recognition

  • Added audio capture for SpeechRecognition (r270158)
  • Added a default action for SpeechRecognition permission request (r269918)
  • Implemented basic permission check for SpeechRecognition (r269810)


  • Added WebRTC SFrame transform (r269830)
  • Added infrastructure for WebRTC transforms (r269764)
  • Added support for RTCPeerConnection.onicecandidateerror event (r270101)
  • Added support for RTCRtpScriptTransform (r270107)
  • Added support for VP9 Profile 2 (10-bit color) in WebRTC (r268971)
  • Increased camera failing timer to 30 seconds (r269190)


  • A video element may fail to enter picture-in-picture from fullscreen (r268816)
  • Added handling trackId changes across Initialization Segments in MSE (r269121)
  • Added addOutput() and removeOutput() utility functions to AudioSummingJunction (r268820)
  • Added skeleton implementation of Media Session API (r268735)
  • Changed to ensure WebAudio API throws exceptions with useful error messages (r268812)
  • Changed AudioBuffer channels to be neuterable and detachable (r269108)
  • Fixed an infinite loop in sample eviction when duration is NaN in MSE (r270106)
  • Fixed Web Audio continuing to play when navigating off the web page via an iframe (r268893)
  • Fixed poor resampling quality when using AudioContext sampleRate parameter (r270141, r270157)
  • Fixed AudioBuffer.getChannelData(x) to keep returning the same JavaScript wrapper for a given channel (r269081)
  • Fixed AudioContext.suspend() to not reject promise when the audio session is interrupted (r269039)
  • Fixed transparent video poster image to keep element transparent once the first frame is preloaded (r269407)
  • Fixed fetching an audio worklet module using a data URL (r270046)
  • Improved the speed of audio and video element creation up to 50x faster (r269077)

Web Animations

  • Ensured animation updates are not scheduled when there are no styles to update (r269963)
  • Fixed KeyframeEffect.pseudoElement to return a valid string when targeting ::marker or ::first-letter (r269623)
  • Fixed accelerated animations of individual transform properties to apply rotate before scale (r269527)


  • Changed programmatic scroll to stop rubberbanding (r269373, r269559)
  • Changed to update scrolling geometry immediately for programmatic scrolls (r269558)

Scroll Snap

  • Fixed scroll snap specified on :root (r269506)
  • Fixed scroll-snap on root aligning to the body margin edge, not the viewport edge (r269622)
  • Made axis in scroll-snap-type required (r268665)
  • Made scroll-margin independent of scroll snapping and applied it when scrolling to anchors (r269144)
  • Made scroll-padding independent of scroll-snap and have it affect scrollIntoView (r270023)
  • Stopped creating implicit snap points at scrollmin and scrollmax (r268856)

Private Click Measurement

  • Added persistence for pending ad clicks and attributions so they survive browser restart (r270136)
  • Changed to accept ad click data when the link opens a new window (r269129)
  • Changed attribute and JSON key names according to the W3C conversation (r269886)
  • Switched to JSON report format (r269489)

Web Driver

  • Added handling for surrogate pairs in keyboard actions (r269421)
  • Added support for a sequence of character key presses (r269035)
  • Added handling HTTPS configuration for WebDriver tests (r268723)
  • Fixed elements in Shadow DOM incorrectly marked as stale (r268867)