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

# Safari Technology Preview 91 Release Notes

Preview the latest web technology updates including: Security, JavaScript API, JavaScript Performance, Media, Web API, Rendering, Pointer Events, WebDriver, Web Inspector, and WebGPU.

## Overview

[Safari Technology Preview](https://webkit.org/blog/6017/introducing-safari-technology-preview/) Release 91 is now [available for download](https://webkit.org/downloads/) for macOS Mojave and the macOS Catalina beta. 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 [248705-249190](https://trac.webkit.org/log?stop_rev=248705&&rev=249190&limit=999).

### Security

- Disabled legacy TLS 1.0 and TLS 1.1 ([r249019](https://trac.webkit.org/changeset/249019/webkit/))

### JavaScript API

- Added a public API for unhandled promise rejections ([r249058](https://trac.webkit.org/changeset/249058/webkit/))
- Added support for hashbang in ESNext ([r248826](https://trac.webkit.org/changeset/248826/webkit/))
- Implemented optional chaining in ESNext ([r248829](https://trac.webkit.org/changeset/248829/webkit/))
- Implemented `StaticRange` constructor ([r249079](https://trac.webkit.org/changeset/249079/webkit/))
- Fixed `Date.prototype.toJSON` to not throw an exception if `toISOString` returns an object ([r248876](https://trac.webkit.org/changeset/248876/webkit/))
- Fixed more missing exception checks in `String.prototype` ([r248716](https://trac.webkit.org/changeset/248716/webkit/))
- Fixed a bad error message when `for-await-of` is used in a non-async function ([r248711](https://trac.webkit.org/changeset/248711/webkit/))
- Fixed ProxyObject to not allow access to its target’s private properties ([r248796](https://trac.webkit.org/changeset/248796/webkit/))
- Updated the Promise constructor to check argument before `Construct?`` ([r248787](https://trac.webkit.org/changeset/248787/webkit/))
- Updated `Promise.prototype.finally` to accept non-promise objects ([r248793](https://trac.webkit.org/changeset/248793/webkit/))

### JavaScript Performance

- Changed to avoid looking up the `join` function each time `Array.prototype.toString` is called ([r248906](https://trac.webkit.org/changeset/248906/webkit/))
- Ensured `x?.y ?? z` is fast ([r249117](https://trac.webkit.org/changeset/249117/webkit/))

### Media

- Fixed firing `webkitpresentationmodechanged` twice when exiting picture-in-picture ([r249141](https://trac.webkit.org/changeset/249141/webkit/))
- Updated to stop `MediaDevices` timer when stopping `MediaDevices` ([r248853](https://trac.webkit.org/changeset/248853/webkit/))
- Fixed removing fullscreen element in a `requestAnimationFrame()` callback after `requestFullscreen()` leaving fullscreen in an inconsistent state ([r249147](https://trac.webkit.org/changeset/249147/webkit/))
- Disabled devices should not be taken into account when searching for a capture device ([r249154](https://trac.webkit.org/changeset/249154/webkit/))

### Web API

- Started to expose Geolocation interfaces (`GeolocationPosition`, `GeolocationPositionError, and` `GeolocationCoordinates`) on the global `Window` object ([r249066](https://trac.webkit.org/changeset/249066/webkit/))
- Fixed Emoji with variation selectors to be rendered in emoji style, not text style ([r248815](https://trac.webkit.org/changeset/248815/webkit/))
- Changed SVG elements to become focusable when `focus` and `key` event listeners are added ([r248983](https://trac.webkit.org/changeset/248983/webkit/))
- Changed the default tab index of `output` and `fieldset` to be -1 ([r248914](https://trac.webkit.org/changeset/248914/webkit/))

### Rendering

- Fixed drawing an animated image to a canvas via `drawImage` to draw the first frame ([r249162](https://trac.webkit.org/changeset/249162/webkit/))

### Pointer Events

- Fixed removing the capture element preventing future pointer events from being dispatched on macOS ([r248855](https://trac.webkit.org/changeset/248855/webkit/))

### WebDriver

- Fixed mouse buttons to be correctly printed in `SimulatedInputDispatcher` logging ([r248715](https://trac.webkit.org/changeset/248715/webkit/))

### Web Inspector

- Elements
  - Fixed issue where “Copy Rule” menu item copied commented out properties incorrectly ([r249089](https://trac.webkit.org/changeset/249089/webkit/))
  - Changed to automatically enable the event listener when setting a breakpoint on it in the Node details sidebar ([r248765](https://trac.webkit.org/changeset/248765/webkit/))
  - Changed the DOM tree to always be LTR, even in RTL mode ([r248991](https://trac.webkit.org/changeset/248991/webkit/))
- Network
  - Changed the Headers pane to always be LTR, even in RTL mode ([r248889](https://trac.webkit.org/changeset/248889/webkit/))
- Resources
  - Added syntax highlighting for more CSS media queries ([r248810](https://trac.webkit.org/changeset/248810/webkit/))
  - Added syntax highlighting for JavaScript `BigInt` ([r248898](https://trac.webkit.org/changeset/248898/webkit/), [r248908](https://trac.webkit.org/changeset/248908/webkit/))
  - Added pretty printing support for more modern JavaScript language features ([r248760](https://trac.webkit.org/changeset/248760/webkit/), [r248785](https://trac.webkit.org/changeset/248785/webkit/), [r248922](https://trac.webkit.org/changeset/248922/webkit/), [r248923](https://trac.webkit.org/changeset/248923/webkit/))
  - Fixed a CodeMirror issue where tabs were still used even when the “Prefer indent using” setting is set to “Spaces” ([r248739](https://trac.webkit.org/changeset/248739/webkit/))
- Debugger
  - Added a global breakpoint for pausing in the next microtask ([r248894](https://trac.webkit.org/changeset/248894/webkit/))
  - Fixed an issue where the Assertion Failures breakpoint didn’t work when inspecting a JSContext ([r248891](https://trac.webkit.org/changeset/248891/webkit/))
- Console
  - Implemented `queryHolders` Command Line API function ([r248925](https://trac.webkit.org/changeset/248925/webkit/))
  - Updated `console.dir` to start out expanded when given an object ([r249034](https://trac.webkit.org/changeset/249034/webkit/))
  - Created additional Command Line API functions for other `console` methods ([r249078](https://trac.webkit.org/changeset/249078/webkit/))
  - Changed the Console to always be LTR, even in RTL mode ([r248766](https://trac.webkit.org/changeset/248766/webkit/))
- Sources (Experimental)
  - Fixed an issue where the gear icon would move to the second line when the navigation sidebar is narrow ([r248818](https://trac.webkit.org/changeset/248818/webkit/))
  - Fixed an issue where the “No Filter Results” message was displayed on top of all of the other content, preventing any interaction ([r248737](https://trac.webkit.org/changeset/248737/webkit/))
  - Gave Origins their own icon in the navigation sidebar ([r248912](https://trac.webkit.org/changeset/248912/webkit/))
  - Moved the resource type scope bar to be next to the filter in the navigation sidebar ([r248916](https://trac.webkit.org/changeset/248916/webkit/), [r248940](https://trac.webkit.org/changeset/248940/webkit/))
  - Provided a way to create an arbitrary Inspector Style Sheet ([r248753](https://trac.webkit.org/changeset/248753/webkit/))
- Layers (Experimental)
  - Fixed the background of the 3D area not updating when transitioning to/from Dark Mode ([r248735](https://trac.webkit.org/changeset/248735/webkit/))

### WebGPU

- Added unary plus ([r248756](https://trac.webkit.org/changeset/248756/webkit/))
- Changed enums to not be shadowed by local variables ([r248812](https://trac.webkit.org/changeset/248812/webkit/))
- Fixed WebGPU layers not showing up sometimes ([r248879](https://trac.webkit.org/changeset/248879/webkit/))
- Implemented GPUErrors for and relax GPUBuffer validation rules ([r249183](https://trac.webkit.org/changeset/249183/webkit/))
- Made `operator==` native and added bool matrices ([r248795](https://trac.webkit.org/changeset/248795/webkit/))
- Updated matrices to have constructors that take a flattened list of scalars ([r248754](https://trac.webkit.org/changeset/248754/webkit/))
- Updated vertex shader and fragment shader to be able to come from two different programs ([r248993](https://trac.webkit.org/changeset/248993/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)