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

# Safari Technology Preview 139 Release Notes

Preview the latest web technology updates including: Web Inspector, CSS, :has(), Web Animations, Rendering, SVG, WebAuthn, Web API, JavaScript, Content Security Policy, Media, Service Workers, and Web Extensions.

## Overview

[Safari Technology Preview](https://webkit.org/blog/6017/introducing-safari-technology-preview/) Release 139 is now [available for download](https://webkit.org/downloads/) for macOS Big Sur and macOS Monterey. 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 [286944-287834](https://trac.webkit.org/log?stop_rev=286944&rev=287834&limit=890).

**Note:** Tab Groups do not sync in this release.

### Web Inspector

- Elements Tab
  - Added `revert-layer` to CSS autocompletion ([r287636](https://trac.webkit.org/changeset/287636/webkit/))
  - Supported CSS conic gradients in gradient editor and auto-completion ([r287409](https://trac.webkit.org/changeset/287409/webkit/))
  - Made gradient editor angle input readable in dark mode ([r287408](https://trac.webkit.org/changeset/287408/webkit/))
- Sources Tab
  - Added icon for collapsed blackboxed section ([r287586](https://trac.webkit.org/changeset/287586/webkit/))
  - Fixed expanding a grouping of blackboxed call frames to be persistent ([r287590](https://trac.webkit.org/changeset/287590/webkit/))

### CSS

- Fixed CSS Cascade Layers specified in import rules can not be reordered on media query evaluation ([r286972](https://trac.webkit.org/changeset/286972/webkit/))
- Fixed `revert-layer` to revert the style attribute to the regular author style for CSS Cascade Layers ([r287018](https://trac.webkit.org/changeset/287018/webkit/))
- Fixed absolutely positioned children to be aligned using the margin box inside a flexbox ([r287064](https://trac.webkit.org/changeset/287064/webkit/))
- Used the correct margins in computeInlinePreferredLogicalWidths in orthogonal flows ([r286952](https://trac.webkit.org/changeset/286952/webkit/))
- Fixed `:focus-visible` not matching on accessKey focus after focusing something via mouse ([r287563](https://trac.webkit.org/changeset/287563/webkit/), [r287662](https://trac.webkit.org/changeset/287662/webkit/))
- Fixed flexbox ignoring margins of absolute positioned children when `align-items: flex-end` or `justify-content: flex-end` ([r287128](https://trac.webkit.org/changeset/287128/webkit/))
- Fixed `drop-shadow` filter to use the value of the color property when it has no specified color ([r287817](https://trac.webkit.org/changeset/287817/webkit/))
- Fixed `transform` property to take into account transform reference box ([r287606](https://trac.webkit.org/changeset/287606/webkit/))
- Fixed inline blocks that contain text with `min-width`, `box-sizing: border-box` to include the border in width calculation ([r287779](https://trac.webkit.org/changeset/287779/webkit/))
- Fixed text-decoration color not changing back after input blur with outline removed ([r287674](https://trac.webkit.org/changeset/287674/webkit/))
- Implemented `text-combine-upright` property (standard version of `-webkit-text-combine`) ([r287487](https://trac.webkit.org/changeset/287487/webkit/))
  - Made `-webkit-text-combine` an inherited property ([r287451](https://trac.webkit.org/changeset/287451/webkit/))
- Unprefixed `-webkit-print-color-adjust` CSS property ([r287712](https://trac.webkit.org/changeset/287712/webkit/))
- Removed non-standard `-webkit-background-composite` property (r287433)
- Removed non-standard `-webkit-margin-*-collapse` properties (r287429)

### :has()

- Added style invalidation for `:disabled`, `:enabled`, `:valid`, and `:invalid` ([r287445](https://trac.webkit.org/changeset/287445/webkit/), [r287551](https://trac.webkit.org/changeset/287551/webkit/))
- Fixed `:has()` matching wrong elements due to style sharing ([r287362](https://trac.webkit.org/changeset/287362/webkit/))
- Fixed `:has()` selector invalidation issue with toggling `:checked` ([r287363](https://trac.webkit.org/changeset/287363/webkit/))
- Used a bloom filter to quickly reject `:has()` selectors ([r287091](https://trac.webkit.org/changeset/287091/webkit/))

### Web Animations

- Added support for the `animation` shorthand property in the computed style ([r287535](https://trac.webkit.org/changeset/287535/webkit/))
- Changed reversing factor to be computed before canceling the previous transition ([r287548](https://trac.webkit.org/changeset/287548/webkit/))
- Changed transitions without an explicit `transition-property` to not be considered ([r287764](https://trac.webkit.org/changeset/287764/webkit/))
- Fixed `animation` shorthand to parse values in the right order ([r287509](https://trac.webkit.org/changeset/287509/webkit/))
- Fixed `animation` shorthand to list all longhand values when serializing ([r287534](https://trac.webkit.org/changeset/287534/webkit/))
- Fixed calling `setKeyframes()` on a running CSS Transition having no immediate effect ([r287549](https://trac.webkit.org/changeset/287549/webkit/))
- Fixed changing the effect of a transition to no longer mark it as running ([r287550](https://trac.webkit.org/changeset/287550/webkit/))
- Fixed `getKeyframes()` for a CSS Animation to not use computed style for keyframes ([r287820](https://trac.webkit.org/changeset/287820/webkit/))
- Fixed `getKeyframes()` to ensure that all properties are present on 0% and 100% keyframes ([r287518](https://trac.webkit.org/changeset/287518/webkit/))
- Fixed `getKeyframes()` to return an empty object when there are no animatable properties in `@keyframes` rule ([r287517](https://trac.webkit.org/changeset/287517/webkit/))
- Fixed inserting a rule within a `@keyframes` rule should update animations ([r287707](https://trac.webkit.org/changeset/287707/webkit/))
- Fixed inserting a new `@keyframes` rule to start animations that already used this name ([r287769](https://trac.webkit.org/changeset/287769/webkit/))
- Fixed implicit keyframe for a CSS Animation to always use the underlying style ([r287827](https://trac.webkit.org/changeset/287827/webkit/))
- Fixed interpolation for the `filter` property failing with a single keyframe ([r287826](https://trac.webkit.org/changeset/287826/webkit/))
- Fixed `translate()` function in the transform property to remove trailing 0 value when parsing ([r287822](https://trac.webkit.org/changeset/287822/webkit/))

### Rendering

- Changed to pre-layout orthogonal children to compute the preferred logical width inside a flexbox ([r287263](https://trac.webkit.org/changeset/287263/webkit/))
- Fixed paint order of CSS text decorations ([r286955](https://trac.webkit.org/changeset/286955/webkit/))
- Fixed incorrect percent-based height inside `display: table` child elements defined when combined with `box-sizing: border-box` and `padding`. ([r287063](https://trac.webkit.org/changeset/287063/webkit/))
- Fixed aspect-ratio size calculation ([r287023](https://trac.webkit.org/changeset/287023/webkit/))

### SVG

- Fixed SVG resource invalidation logic causing incorrect layout state ([r287076](https://trac.webkit.org/changeset/287076/webkit/))

### WebAuthn

- Changed to allow `get()` for a same-site, cross-origin iframe ([r286993](https://trac.webkit.org/changeset/286993/webkit/), [r287116](https://trac.webkit.org/changeset/287116/webkit/))
- Fixed authenticator to fallback to clientPIN after internal verification fails and is blocked ([r287315](https://trac.webkit.org/changeset/287315/webkit/))

### Web API

- Added support for using a user-specified preference before using the system’s preferred color scheme ([r287030](https://trac.webkit.org/changeset/287030/webkit/))
- Fixed FormData constructed in the form’s submit event listener to not include the submitter ([r286988](https://trac.webkit.org/changeset/286988/webkit/))
- Fixed TextDecoder to detect invalid UTF-8 sequences early enough ([r287024](https://trac.webkit.org/changeset/287024/webkit/))

### JavaScript

- Aligned `Array.prototype.toLocaleString` to ECMA402 definition ([r287560](https://trac.webkit.org/changeset/287560/webkit/))
- Fixed `Intl.PluralRules.selectRange` input validation ([r287546](https://trac.webkit.org/changeset/287546/webkit/))
- Fixed length of `Intl.NumberFormat.formatRange` and `Intl.PluralRules.selectRange` ([r287543](https://trac.webkit.org/changeset/287543/webkit/))

### Content Security Policy

- Changed to always use UTF-8 encoded content when checking hashes ([r287270](https://trac.webkit.org/changeset/287270/webkit/))
- Implemented CSP `strict-dynamic` for module scripts ([r287756](https://trac.webkit.org/changeset/287756/webkit/))

### Media

- Added MediaRecorder support for the `bitsPerSecond` option ([r287613](https://trac.webkit.org/changeset/287613/webkit/))
- Changed to prevent packing audio samples with discontinuity together ([r287249](https://trac.webkit.org/changeset/287249/webkit/))

### Service Workers

- Added full support for Service Worker interception of fetch requests with FormData body ([r287612](https://trac.webkit.org/changeset/287612/webkit/))
- Fixed `FetchRequest.clone` to not need to be called with the current context ([r287532](https://trac.webkit.org/changeset/287532/webkit/))

### Web Extensions

- Added support for the `redirect` rule type in `declarativeNetRequest`, which requires host permissions to be granted for the host of the URL being redirected
- Added support for `declarativeNetRequest.getMatchedRules`, which requires host permissions to be granted to view the URLs of blocked resources

---

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)