Release Notes for Safari Technology Preview 4

Safari Technology Preview Release 4 is now available for download. If you already have Safari Technology Preview installed, you can update from the Mac App Store’s Updates tab. Release 4 of Safari Technology Preview covers WebKit revisions 199865–200417.


  • Allow non-standard HTTP headers in WebSocket handshakes, which makes the 1Password extension work again (r200120, r200219)


  • Fixed Netflix video playback (r200172)


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


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

Web APIs

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

Web Inspector

  • Made console a namespace object (like Math and JSON), allowing functions to be called unbound (r200350, r200373)
  • Fixed an issue where scripts would not load due to Esprima.js not being found (r200229)
  • Started showing dynamically added <script>// <![CDATA[ elements added to a frame as resources (r200065)
  • Made sourceURL and sourceMappingURL always work when using the Function constructor (r199939)
  • Restored filtering to the Timelines tab (r200067)
  • Added column number info to event listener locations (r199940)
  • Fixed profiles missing from records in JavaScript & Events timeline (r199979)
  • Fixed selecting a bar in the Frames timeline mode (r199972)
  • Made sorting by name or location columns work as expected (r199974)
  • Fixed the line error widget showing up on the wrong resource (r200064)
  • Clarified Retained Size in heap snapshots by hiding retained size of non-dominated children (r200086)
  • Made the debugger statements evaluated in the console properly show the source code (r199897)
  • Made jump to line work correctly the first time in pretty-printed JavaScript (r200262)
  • Improved scrolling performance in Timelines tab (r200270)
  • Improved performance of rendering many console messages (r200401)
  • Changed console.assert and console.trace to allow format specifiers (r200370)
  • Improved performance of console.assert by 10x when the assertion is true (r200371)
  • 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)
  • Added CSS autocompletion suggestions for -webkit-user-select (r200154)


  • Made non-accelerated CSS and SVG animations run at 60fps (r200164, r200171)
  • Made <select multiple> padding consistent with other browsers (r200265)
  • Fixed blur filter escaping an enclosing overflow: hidden (r200283)
  • Fixed a regression with min-content and box-sizing: border-box that affected Facebook’s (r199895)


  • Made VoiceOver properly speak superscript content (r200214)
  • Fixed navigation around composed emoji characters and content with multiple whitespace sequences (r200258)
  • Made aria-label attribute work on <label> elements (r200290)
  • Made region a landmark and <section> elements have a role of region if there is an author provided accessible name via the aria-label or aria-labelledby attributes (r200415)

Bug Fixes

  • Corrected how WebKit determines the user’s preferred region from the system language setting. (r200105)

You can file bugs or feature requests at the WebKit bug tracker, or you can submit feedback or bugs to Apple on Apple’s bug reporting website. For other questions or feedback, feel free to reach us on Twitter at @webkit or Jonathan Davis at @jonathandavis.