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

# Safari Technology Preview 20 Release Notes

Preview the latest web technology updates including: Visual Viewport, Touch Bar, JavaScript, Web API, Security, CSS, Pointer Lock, Web Inspector, WebCrypto API, and bug fixes.

## Overview

[Safari Technology Preview](https://webkit.org/blog/6017/introducing-safari-technology-preview/) Release 20 is now [available for download](https://webkit.org/downloads/) for macOS Sierra. If you already have Safari Technology Preview installed, you can update from the Mac App Store’s Updates tab. This release covers WebKit revisions [209238-209803](https://trac.webkit.org/log/?stop_rev=209238&rev=209803&limit=999).

### Visual Viewport

- Enabled the new “visual viewports” model for how `position: fixed` and `position: sticky` elements are positioned during pinch zooming and while zoomed in ([r209409](https://trac.webkit.org/changeset/209409))

### Touch Bar

- Prevented emoji buttons from displaying in the Touch Bar for password inputs ([r209626](https://trac.webkit.org/changeset/209626))

### JavaScript

- Enabled Shared Array Buffers ([r209568](https://trac.webkit.org/changeset/209568))
- Added a syntax error to report an unexpected token when async is followed by identifier in contexts where an async arrow function cannot occur ([r209350](https://trac.webkit.org/changeset/209350))

### Web API

- Added `Document.onvisibilitychange` event handler attribute ([r209750](https://trac.webkit.org/changeset/209750))
- Added reflected `nonce` attribute to the HTML Link element ([r209644](https://trac.webkit.org/changeset/209644))
- Added support for the deprecated dictionary constructors of  `DOMPointReadOnly` and `DOMPoint` ([r209677](https://trac.webkit.org/changeset/209677))
- Fixed an issue where Custom Elements from a different document are not customized when created with `innerHTML` ([r209610](https://trac.webkit.org/changeset/209610))
- Fixed an issue causing animations followed by a transition to not always fire the `transitionend` event ([r209675](https://trac.webkit.org/changeset/209675))
- Prevented `document.webkitFullscreenElement` and `document.webkitCurrentFullScreenElement` from exposing a node inside a shadow tree ([r209628](https://trac.webkit.org/changeset/209628))

### Security

- Changed to require preflight for non-standard CORS-safelisted request headers `Accept`, `Accept-Language`, and `Content-Language` ([r209261](https://trac.webkit.org/changeset/209261), [r209510](https://trac.webkit.org/changeset/209510))
- Implemented Strict Mixed Content Checking; `block-all-mixed-content` directive ([r209577](https://trac.webkit.org/changeset/209577))
- Content Security Policy: Taught preload scanner how to preload `<script>`s and `<link>`s with `nonce` attribute ([r209759](https://trac.webkit.org/changeset/209759))
- Content Security Policy: Allow `ws:` and `wss:` with `connect-src *` or `default-src *` ([r209789](https://trac.webkit.org/changeset/209789))

### CSS

- Enabled support for a modern CSS parser, ported from Blink, that improves performance, specification compliance, and compatibility with other browsers, while also adding support for scientific notation in all CSS numbers ([r209396](https://trac.webkit.org/changeset/209396))
- Fixed short columns in elements with the `columns` property ([r209719](https://trac.webkit.org/changeset/209719))
- Fixed scrolling without momentum at the end of a scroll snapping container ([r209477](https://trac.webkit.org/changeset/209477))
- Fixed line selection in flexbox layouts ([r209427](https://trac.webkit.org/changeset/209427))
- Fixed `::after` and `::before` on `:host` ([r209535](https://trac.webkit.org/changeset/209535))
- Fixed an issue causing keyframes to not work when defined inside a style in a shadow tree ([r209352](https://trac.webkit.org/changeset/209352))

### Pointer Lock

- Prevented `document.pointerLockElement` from exposing a node inside a shadow tree ([r209648](https://trac.webkit.org/changeset/209648))
- Changed to exit pointer lock when page goes into page cache ([r209525](https://trac.webkit.org/changeset/209525))
- Made the cursor visible when exiting pointer lock using the ESC key ([r209394](https://trac.webkit.org/changeset/209394), [r209464](https://trac.webkit.org/changeset/209464))
- Changed the API for pointer lock to be hidden when disabled in the Experimental Features menu ([r209364](https://trac.webkit.org/changeset/209364))
- Changed to exit pointer lock when a JavaScript alert is shown ([r209555](https://trac.webkit.org/changeset/209555))
- Changed behavior to exit both fullscreen and pointer lock when the ESC key is pressed  ([r209504](https://trac.webkit.org/changeset/209504))

### Web Inspector

- Added the ability to distinguish if a script was parsed as a module ([r209492](https://trac.webkit.org/changeset/209492))
- Changed Heap Snapshot data grids to allow keyboard navigation ([r209709](https://trac.webkit.org/changeset/209709))
- Fixed Assertion Failures breakpoint to respect the global Breakpoints enabled setting ([r209311](https://trac.webkit.org/changeset/209311))
- Added support for template literals in the Breakpoint Log action ([r209706](https://trac.webkit.org/changeset/209706))
- Fixed an issue where some resources fetched via Fetch API would not have data ([r209629](https://trac.webkit.org/changeset/209629))
- Fixed a bug to allow deleting a breakpoint from a worker script ([r209557](https://trac.webkit.org/changeset/209557))
- Updated Esprima to support new syntax for `**` operators , `async`, `await`, and trailing commas ([r209491](https://trac.webkit.org/changeset/209491))

### WebCrypto API

- Added support for SPKI format for `SubtleCrypto.importKey` and `SubtleCrypto.exportKey` ([r209437](https://trac.webkit.org/changeset/209437))
- Added support for PKCS8 format while doing `SubtleCrypto.importKey` and `SubtleCrypto.exportKey` ([r209633](https://trac.webkit.org/changeset/209633))
- Changed to allow importing keys without usages for RSA algorithms ([r209657](https://trac.webkit.org/changeset/209657))

### Bug Fixes

- Fixed an issue that could cause YouTube to pause when switching tabs ([r209425](https://trac.webkit.org/changeset/209425))
- Fixed an issue where typing certain queries into Safari’s Smart Search Field would crash Safari Technology Preview
- Fixed an issue where pages loading in background tabs would erroneously appear in the frontmost tab when they finished loading

---

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)