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

# Safari Technology Preview 15 Release Notes

Preview the latest web technology updates including: Fetch API, JavaScript, CSS, Web APIs, Web Inspector, Media, Accessibility, URL Handling, Security, and Safari Extensions.

## Overview

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

This is the last release of Safari Technology Preview that will install and run on OS X El Capitan. To continue testing or living on the latest enhancements to Safari and WebKit, please upgrade to macOS Sierra.

### Fetch API

- Made `ReadableStream` throw `TypeError` values instead of strings ([r206770](https://trac.webkit.org/changeset/206770/))
- Changed Fetch to prevent redirection to non-HTTP URLs ([r206716](https://trac.webkit.org/changeset/206716/))
- Made `FetchBody` use UTF8 to encode text data ([r206636](https://trac.webkit.org/changeset/206636/))
- Added support for `URLSearchParams` as the `body` of a Fetch ([r206632](https://trac.webkit.org/changeset/206632/))

### JavaScript

- Sped up `String.prototype.toLowerCase()` by 7–8% on benchmarks ([r206804](https://trac.webkit.org/changeset/206804/))
- Fixed cases where class, function, and arrow function names were not inferred during assignment ([r206599](https://trac.webkit.org/changeset/206599/), [r206610](https://trac.webkit.org/changeset/206610/))
- Fixed arrow functions so they don’t allow duplicate parameter names ([r206647](https://trac.webkit.org/changeset/206647/))
- Updated `Generator` and `GeneratorFunction` property descriptors to match the ES6 spec ([r206711](https://trac.webkit.org/changeset/206711/), [r206738](https://trac.webkit.org/changeset/206738/))
- Fixed a bug where `String.prototype.padStart()` and `padEnd()` would insert `null` in rare cases ([r206573](https://trac.webkit.org/changeset/206573))
- Fixed a bug with `Function.prototype.length` when there are parameters with default values ([r206268](https://trac.webkit.org/changeset/206268/))

### CSS

- Implemented rendering of `font-variation-settings` and enabled it by default ([r206679](https://trac.webkit.org/changeset/206679/), [r206701](https://trac.webkit.org/changeset/206701/), [r206761](https://trac.webkit.org/changeset/206761/))
- Implemented animation of `font-variation-settings` ([r206690](https://trac.webkit.org/changeset/206690/))
- Added mapping for `font-family: cursive` to KaiTi fonts in Chinese ([r206791](https://trac.webkit.org/changeset/206791/))
- Sped up the computation of CSS Grid row sizes with indefinite heights by 2× ([r206253](https://trac.webkit.org/changeset/206253/))
- Fixed setting a style element’s `textContent` or `cssText` so it properly triggers a style recalculation ([r206404](https://trac.webkit.org/changeset/206404/))
- Fixed toggling `display: none` on a parent element of a Shadow DOM slot to work in more cases ([r206493](https://trac.webkit.org/changeset/206493/))

### Web APIs

- Enabled support for the `download` attribute on anchor and area elements — including Blob URLs ([r206356](https://trac.webkit.org/changeset/206356), [r206358](https://trac.webkit.org/changeset/206358/), [r206439](https://trac.webkit.org/changeset/206439/), [r206478](https://trac.webkit.org/changeset/206478/), [r206630](https://trac.webkit.org/changeset/206630/))
- Exposed `CryptoKey` to Web Workers ([r206627](https://trac.webkit.org/changeset/206627/))
- Implemented `Node.prototype.getRootNode()` ([r206285](https://trac.webkit.org/changeset/206285/))
- Implemented `ShadowRoot.prototype.elementFromPoint()` ([r206795](https://trac.webkit.org/changeset/206795/))
- Implemented `DOMTokenList.prototype.supports()` ([r206561](https://trac.webkit.org/changeset/206561/), [r206616](https://trac.webkit.org/changeset/206616/))
- Implemented `ImageData.prototype.data` from the HTML spec ([r206634](https://trac.webkit.org/changeset/206634/))
- Implemented `KeyboardEvent.prototype.code` from the UI Event spec ([r206803](https://trac.webkit.org/changeset/206803/))
- Implemented `KeyboardEvent.prototype.isComposing` from the UI Event spec ([r206796](https://trac.webkit.org/changeset/206796/))
- Implemented `KeyboardEvent.prototype.key` from the UI Event spec ([r206750](https://trac.webkit.org/changeset/206750/))
- Implemented `KeyboardEvent.prototype.repeat` from the UI Event spec ([r206724](https://trac.webkit.org/changeset/206724/))
- Implemented `KeyboardEvent.prototype.getModifierState()` from the UI Event spec ([r206725](https://trac.webkit.org/changeset/206725/))
- Changed `ReadableStream` to match the Steams API spec ([r206508](https://trac.webkit.org/changeset/206508/))
- Changed `DOMTokenList.prototype.value` and `toString()` to match the DOM spec ([r206560](https://trac.webkit.org/changeset/206560/))
- Changed `td.scope` to only return known values ([r206733](https://trac.webkit.org/changeset/206733/))
- Changed `HTMLLabelElement.prototype.form` to match the HTML spec ([r206332](https://trac.webkit.org/changeset/206332/))
- Changed `Element.insertAdjacentHTML()` to match the HTML spec ([r206308](https://trac.webkit.org/changeset/206308/))
- Changed `window.open()` so it returns `null` when it is blocked by Safari ([r206777](https://trac.webkit.org/changeset/206777/))
- Changed `HTMLSlotElement.prototype.assignedNodes()` to include fallback contents when `flatten` option is set ([r206534](https://trac.webkit.org/changeset/206534/))
- Changed `Object.prototype.getOwnPropertyDescriptor()` so it works correctly across origins ([r206221](https://trac.webkit.org/changeset/206221/))
- Changed HTML serialization to always add `xml:` prefix for attributes in the XML namespace ([r206663](https://trac.webkit.org/changeset/206663/))
- Changed properties on `Window` and `Location` to be non-enumerable when accessing them cross origin ([r206233](https://trac.webkit.org/changeset/206233/))
- Fixed a bug where text nodes assigned to a linked slot were not clickable ([r206605](https://trac.webkit.org/changeset/206605/))
- Fixed the assignment of non-numeric values to `input.minlength` by setting it to 0 ([r206588](https://trac.webkit.org/changeset/206588/))
- Fixed input elements so they work inside Shadow DOM trees ([r206403](https://trac.webkit.org/changeset/206403/))
- Fixed the `document.title` getter by stripping and collapsing the right whitespace characters ([r206309](https://trac.webkit.org/changeset/206309/))
- Fixed going into fullscreen from Silverlight a second time would hide the menu bar and dock for Safari ([r206675](https://trac.webkit.org/changeset/206675/))
- Fixed the serialization of HTML element attributes to match the HTML spec ([r206240](https://trac.webkit.org/changeset/206240/))
- Fixed the serialization of HTML void elements to ignore any child elements ([r206266](https://trac.webkit.org/changeset/206266/))
- Fixed the serialization of `bgsound`, `keygen`, and `track` elements ([r206246](https://trac.webkit.org/changeset/206246/))
- Fixed a bug where setting attributes on `HTMLMeterElement` to non-finite values would throw the wrong exception type ([r206243](https://trac.webkit.org/changeset/206243/))
- Fixed a bug where `IDBIndex.prototype.openCursor()` would match indices on multiple object stores ([r206280](https://trac.webkit.org/changeset/206280/))
- Fixed a bug preventing structured clones of `WebCrypto` keys under Safari 10 ([r206684](https://trac.webkit.org/changeset/206684))

### Web Inspector

- Added line range highlighting to show where the debugger is paused — good for lines with multiple expressions or multiple function calls ([r206654](https://trac.webkit.org/changeset/206654/), [r206655](https://trac.webkit.org/changeset/206655/))
- Made breakpoints on blank lines or comments break on the next possible line ([r206653](https://trac.webkit.org/changeset/206653/))
- Fixed stepping out of a function so it always takes you to the caller instead of sometimes resuming ([r206652](https://trac.webkit.org/changeset/206652/), [r206693](https://trac.webkit.org/changeset/206693/))
- Fixed stepping to a line in the debugger with an “auto continue” breakpoint so it still pauses ([r206698](https://trac.webkit.org/changeset/206698/))
- Fixed refreshing while in the Timelines tab would cause negative timestamps in the Network tab ([r206464](https://trac.webkit.org/changeset/206464/))
- Fixed a bug where Box Model values were not updated when DOM node styles changed ([r206406](https://trac.webkit.org/changeset/206406/))
- Fixed a bug where the DOM would not update when editing Box Model values (border, margin, etc.) ([r206363](https://trac.webkit.org/changeset/206363/))
- Added a console message when an anchor `download` attribute is ignored ([r206562](https://trac.webkit.org/changeset/206562/))
- Made clicking a second time on the color swatch square hide the CSS color picker ([r206729](https://trac.webkit.org/changeset/206729/))

### Media

- Fixed Picture in Picture playback so it always shows the correct state of the play button ([r206520](https://trac.webkit.org/changeset/206520/))

### Accessibility

- Exposed a `label` element’s text content as the description for `meter` elements ([r206581](https://trac.webkit.org/changeset/206581/))
- Exposed a `label` element’s text content as the description for `progress` elements ([r206391](https://trac.webkit.org/changeset/206391/))

### URL Handling

- Navigations to `tel:` and `mailto:` links now require a user gesture; navigations without a user gesture will show a confirmation prompt
- Users are now prompted when navigating to URLs that open other applications

### Security

- Fixed an issue where a CSP violation report may be sent to the wrong domain when the `frame-ancestors` directive is violated ([r206278](https://trac.webkit.org/changeset/206278/))

### Safari Extensions

- Fixed an issue where Safari Technology Preview would consume excess memory when certain Safari Extensions were installed ([r206885](https://trac.webkit.org/changeset/206885))

---

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)