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

# Safari Technology Preview 4 Release Notes

Preview the latest web technology updates including: Networking, Media, JavaScript, CSS, Web APIs, Web Inspector, Rendering, Accessibility, and bug fixes.

## Overview

[Safari Technology Preview](https://developer.apple.com/safari/technology-preview/) Release 4 is now [available for download](https://developer.apple.com/safari/download/). If you already have Safari Technology Preview installed, you can update from the [Mac App Store’s Updates tab](macappstore://showUpdatesPage). Release 4 of Safari Technology Preview covers WebKit revisions [199865–200417](http://trac.webkit.org/log/?rev=200417&stop_rev=199865&limit=999).

### Networking

- Allow non-standard HTTP headers in WebSocket handshakes, which makes the *1Password* extension work again ([r200120](http://trac.webkit.org/changeset/200120), [r200219](http://trac.webkit.org/changeset/200219))

### Media

- Fixed *Netflix* video playback ([r200172](http://trac.webkit.org/changeset/200172))

### JavaScript

- Disabled `Symbol.isConcatSpreadable` due to performance concerns; is expected to return in the next release ([r200149](http://trac.webkit.org/changeset/200149))
- Made `super()` available to object literals, not just ES6 classes ([r199927](http://trac.webkit.org/changeset/199927))
- Sped up calling bound functions with no bound arguments by 4x ([r199946](http://trac.webkit.org/changeset/199946))
- Implemented `String.prototype.localeCompare` from ECMA-402 ([r199967](http://trac.webkit.org/changeset/199967))
- Optimized `JSON.parse` for a 1–2.5% improvement in Kraken *json-parse-financial* ([r199968](http://trac.webkit.org/changeset/199968))
- Implemented `RegExp.prototype.@@replace` and use it for `String.prototype.replace` ([r200117](http://trac.webkit.org/changeset/200117))
- Implemented spec changes for `String.prototype.padStart` and `String.prototype.padEnd` ([r200194](http://trac.webkit.org/changeset/200194), [r200210](http://trac.webkit.org/changeset/200210))
- Unified how `Math.pow()` is optimized across all JIT tiers ([r200208](http://trac.webkit.org/changeset/200208))
- Made `Reflect.toString()` be `[object Object]` not `[object Reflect]` ([r200355](http://trac.webkit.org/changeset/200355))

### CSS

- Made `-webkit-image-set` work inside CSS variables ([r199884](http://trac.webkit.org/changeset/199884))
- Changed transitions to no longer animate to/from `auto` values ([r200360](http://trac.webkit.org/changeset/200360))
- Implemented proper handling of `animation-delay` with a negative delay ([r200042](http://trac.webkit.org/changeset/200042))
- Started parsing play-state as part of the `animation` shorthand ([r200043](http://trac.webkit.org/changeset/200043))
- Made toggling `animation-play-state` not restart a finished animation ([r200047](http://trac.webkit.org/changeset/200047))
- Fixed a regression which caused `position: absolute` pseudo elements to inherit `text-decoration` ([r200302](http://trac.webkit.org/changeset/200302))
- Moved CSS Grid behind a runtime switch that is currently enabled by default ([r200215](http://trac.webkit.org/changeset/200215), [r200389](http://trac.webkit.org/changeset/200389))
- Started implementation of `auto-fill` and `auto-fit` for CSS Grid ([r200182](http://trac.webkit.org/changeset/200182), [r200368](http://trac.webkit.org/changeset/200368))
- Fixed computed style of `grid-template-columns` and `grid-template-rows` properties ([r199981](http://trac.webkit.org/changeset/199981))
- Fixed a bug with positioned grid items in vertical writing mode ([r199874](http://trac.webkit.org/changeset/199874))
- Fixed alignment with CSS Grid content distribution ([r200181](http://trac.webkit.org/changeset/200181))
- Improved user agent styles for `<math>` elements ([r199869](http://trac.webkit.org/changeset/199869))

### Web APIs

- Fixed wheel events so they fire with `body, html { height: 100% }` ([r200247](http://trac.webkit.org/changeset/200247))
- Marked IndexedDB constructors as hidden on the worker global object until it is supported ([r199889](http://trac.webkit.org/changeset/199889))
- Made `ping` attribute for anchor elements only work for http/https URLs ([r199900](http://trac.webkit.org/changeset/199900))
- Renamed Shadow DOM’s `getAssignedNodes` to `assignedNodes` and support flattened option ([r200285](http://trac.webkit.org/changeset/200285))
- Removed Shadow DOM’s `Node.prototype.rootNode` because it was not compatible with existing websites ([r200297](http://trac.webkit.org/changeset/200297))
- Made `document.currentScript` return `null` when executing a script inside a shadow tree ([r200327](http://trac.webkit.org/changeset/200327))
- Fixed clicks sometimes being ignored inside button elements when the mouse moves ([r200414](http://trac.webkit.org/changeset/200414))

### Web Inspector

- Made `console` a namespace object (like `Math` and `JSON`), allowing functions to be called unbound ([r200350](http://trac.webkit.org/changeset/200350), [r200373](http://trac.webkit.org/changeset/200373))
- Fixed an issue where scripts would not load due to *Esprima.js* not being found ([r200229](http://trac.webkit.org/changeset/200229))
- Started showing dynamically added `<script>// <![CDATA[ ` elements added to a frame as resources ([r200065](http://trac.webkit.org/changeset/200065))
- Made `sourceURL` and `sourceMappingURL` always work when using the `Function` constructor ([r199939](http://trac.webkit.org/changeset/199939))
- Restored filtering to the Timelines tab ([r200067](http://trac.webkit.org/changeset/200067))
- Added column number info to event listener locations ([r199940](http://trac.webkit.org/changeset/199940))
- Fixed profiles missing from records in JavaScript & Events timeline ([r199979](http://trac.webkit.org/changeset/199971))
- Fixed selecting a bar in the Frames timeline mode ([r199972](http://trac.webkit.org/changeset/199972))
- Made sorting by name or location columns work as expected ([r199974](http://trac.webkit.org/changeset/199974))
- Fixed the line error widget showing up on the wrong resource ([r200064](http://trac.webkit.org/changeset/200064))
- Clarified Retained Size in heap snapshots by hiding retained size of non-dominated children ([r200086](http://trac.webkit.org/changeset/200086))
- Made the `debugger` statements evaluated in the console properly show the source code ([r199897](http://trac.webkit.org/changeset/199897))
- Made jump to line work correctly the first time in pretty-printed JavaScript ([r200262](http://trac.webkit.org/changeset/200262))
- Improved scrolling performance in Timelines tab ([r200270](http://trac.webkit.org/changeset/200270))
- Improved performance of rendering many console messages ([r200401](http://trac.webkit.org/changeset/200401))
- Changed `console.assert` and `console.trace` to allow format specifiers ([r200370](http://trac.webkit.org/changeset/200370))
- Improved performance of `console.assert` by 10x when the assertion is `true` ([r200371](http://trac.webkit.org/changeset/200371))
- Changed `console.time` and `console.timeEnd` to use a default label when none if specified, and warn when attempting to start an already started timer ([r200400](http://trac.webkit.org/changeset/200400))
- Added CSS autocompletion suggestions for `-webkit-user-select` ([r200154](http://trac.webkit.org/changeset/200154))

### Rendering

- Made non-accelerated CSS and SVG animations run at 60fps ([r200164](http://trac.webkit.org/changeset/200164), [r200171](http://trac.webkit.org/changeset/200171))
- Made `<select multiple>` padding consistent with other browsers ([r200265](http://trac.webkit.org/changeset/200265))
- Fixed blur filter escaping an enclosing `overflow: hidden` ([r200283](http://trac.webkit.org/changeset/200283))
- Fixed a regression with `min-content` and `box-sizing: border-box` that affected Facebook’s messenger.com ([r199895](http://trac.webkit.org/changeset/199895))

### Accessibility

- Made VoiceOver properly speak superscript content ([r200214](http://trac.webkit.org/changeset/200214))
- Fixed navigation around composed emoji characters and content with multiple whitespace sequences ([r200258](http://trac.webkit.org/changeset/200258))
- Made `aria-label` attribute work on `<label>` elements ([r200290](http://trac.webkit.org/changeset/200290))
- Made `region` a landmark and `

### Bug Fixes

- Corrected how WebKit determines the user’s preferred region from the system language setting. ([r200105](http://trac.webkit.org/changeset/200105))

---

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)