Safari Technology Preview Release Notes

Release 30

Web API
  • Implemented Subresource Integrity (SRI)
  • Implemented X-Content-Type-Options:nosniff
  • Added support for Unhandled Promise Rejection events
  • Updated document.cookie to only return cookies if the document URL has a network scheme or is a file URL
  • Removed the non-standard document.implementation.createCSSStyleSheet() API
  • Removed the non-standard Element.scrollByLines() and scrollByPages()
  • Changed to allow a null comparator in Array.prototype.sort
  • Changed to set the Response.blob() type based on the content-type header value
  • Changed Element.slot to be marked as [Unscopable]
  • Implemented HTMLPreloadScanner support for <link preload>
  • Fixed setting Response.blob() type correctly when the body is a ReadableStream
  • Moved offsetParent, offsetLeft, offsetTop, offsetWidth, offsetHeight properties from Element to HTMLElement
  • Moved the style property from Element to HTMLElement and SVGElement, then made it settable
JavaScript
  • Fixed Arrow function access to this after eval('super()') within a constructor
  • Added support for dashed values in unicode locale extensions
  • Fixed the behaviour of the .sort(callback) method to match Firefox and Chrome
CSS
  • Fixed space-evenly behavior with Flexbox
  • Fixed font-stretch:normal to select condensed fonts
  • Fixed custom properties used in rgb() with calc()
Accessibility
  • Fixed the behavior of aria-orientation="horizontal" on a list
  • Prevented exposing empty roledescription
  • Propagated aria-readonly to grid descendants
  • Changed to ignore aria-rowspan value if a rowspan value is provided for a <td> or <th>
  • Fixed an issue causing VoiceOver to skip cells after a cell with aria-colspan
  • Changed to treat cells with ARIA table cell properties as cells
  • Updated implementation of aria-orientation to match specifications
Web Inspector
  • Added resource load error reason text in the details sidebar
  • Fixed toggling the Request and Response resource views in certain cases
  • Fixed miscellaneous RTL and localization issues
  • Fixed Option-Click on URL behavior in Styles sidebar
  • Changed 404 Image Loads to appear as a failures in Web Inspector
WebDriver
  • Fixed several issues that prevented cookie-related endpoints from working correctly
Media
  • Removed black background from video layer while in fullscreen
Rendering
  • Fixed problem with the CSS Font Loading API’s load() function erroneously resolving promises when used with preinstalled fonts
  • Fixed flickering on asynchronous image decoding and ensured the image is incrementally displayed as new data is received

Release 29

JavaScript
  • Implemented Intl.DateTimeFormat.prototype.formatToParts
  • Improved Date.parse to accept wider range of date strings
  • Implemented Object.isFrozen() and Object.isSealed() according to ECMA specifications
CSS
  • Added support for percentage gaps for CSS Grid
  • Changed :focus-within behavior to match specifications
Rendering
  • Avoided repaints for invisible animations on tumblr.com
  • Fixed rendering flexbox children across columns
  • Fixed text-align:start and text-align:end behavior in table cells
  • Fixed animations with large negative animation-delays that fail depending on machine uptime
  • Reduced redundant text measuring during mid-word breaking
  • Changed memory handling to keep all of the decoded frames for an animated image if the total memory size of the frames is under 30MB (up from 5MB)
  • Fixed <li> content inside <ul> to wrap mid-word when word-break:break-word is set
  • Fixed the location of the “recent searches” popover of <input type="search"> in RTL mode
Web Inspector
  • Added regular expression support to XHR breakpoints
  • Added a pause reason for “All Requests” XHR breakpoint
  • Fixed the enabled state of “All Requests” XHR breakpoint to be correctly restored
  • Fixed a bug where XHR breakpoints would disappear when the inspected page is reloaded
  • Fixed XHR breakpoints restored from settings but not appearing in the sidebar
  • Fixed Network datagrid columns to correctly restore their shown or hidden state
  • Added tooltips to Network grid items for easier reading when text overflows
  • Fixed sorting by Priority column in Network datagrids
  • Fixed the display of Web Socket messages with non-latin letters
  • Prevented showing the Search tab for location links, prefer the Resources tab
  • Changed to treat Uint8ClampedArray as an array, not an object
  • Fixed Command-G (⌘G) shortcut to allow Find next to work in the console
  • Implemented autocompletion for CSS variables
  • Updated the icon for the Ignore resource cache button in the Network Tab
WebCrypto
  • Added support for ECDSA
  • Improved converting an ECDSA signature binary into DER format
Accessibility
  • Changed the role description of <hr> from “separator” to “rule”
Media
  • Restricted WebKit image formats to a known whitelist. WebKit now only loads images of the following formats:
    • PNG (.png)
    • GIF (.gif)
    • JPEG (.jpg), (.jpeg), (.jpe), (.jif), (.jfif), (.jfi)
    • JPEG 2000 (.jp2), (.j2k), (.jpf), (.jpx), (.jpm), (.mj2)
    • TIFF (.tiff), (.tif)
    • MPO (.mpo)
    • Microsoft Bitmap (.bmp), (.dib)
    • Microsoft Cursor (.cur)
    • Microsoft Icon (.ico)
Bug Fixes
  • Fixed an issue where the status bar would not display modifier key information (e.g. “Open * in new tab” when holding the Command key)
  • Improved performance of typing on pages with many <input> elements
  • Fixed an issue where a hardware “enter” key would not dismiss JavaScript alert, confirm, or prompt; previously, only the “return” key would dismiss a dialog
  • Fixed QuotaExceededError when saving to localStorage in private browsing mode or WebDriver sessions
  • Fixed an issue where the Content-Disposition header filename was ignored when the download attribute is specified
  • Fixed escaping ‘<’ and ‘>’ in attribute values when using XMLSerializer.serializeToString() API
  • Fixed issues causing beforeunload dialog to be shown even though the user did not interact with the page
  • Changed all CORS requests and cross origin access from file:// to be blocked unless Disable Local File Restrictions is selected from the Develop menu

Release 28

Power and Performance
  • Changed to pause silent WebAudio rendering in background tabs
  • Changed to pause animated SVG images on pages loaded in the background
  • Changed to make inaudible background tabs become eligible for memory kill after 8 minutes
  • Changed to kill any WebContent process using over 16 GB of memory
  • Throttled DOM Timers to 30fps in cross-origin iframes that the user did not interact with
  • Throttled requestAnimationFrame callbacks to 30fps in cross-origin iframes the user did not interact with
CSS
  • Adapted content-alignment properties to the new baseline syntax
  • Adapted place-content alignment shorthand to the new baseline syntax
  • Adapted self-alignment properties to the new baseline syntax
  • Fixed scroll offset jumps after a programmatic scroll in an overflow container with scroll snapping
  • Implemented the place-items shorthand
  • Implemented stroke-color CSS property
  • Implemented stroke-miterlimit CSS property
  • Unprefixed CSS cursor values grab and grabbing
JavaScript
  • Fixed objects with gaps between numerical keys getting filled by NaN values
  • Fixed Object.seal() and Object.freeze() on global this
  • Fixed String.prototype.replace to correctly apply special replacement parameters when passed a function
Web API
  • Changed _blank, _self, _parent, and _top browsing context names to be case-insensitive
  • Cleaned up touch event handler registration when moving nodes between documents
  • Fixed <input type="range"> to prevent breaking all mouse events when changing to disabled while active
  • Prevented double downloads of preloaded content from <link preload> when the content is in MemoryCache
  • Fixed WebSocket.send
Web Inspector
  • Added a preference for Auto Showing Scope Chain sidebar on pause
  • Changed the order of Debugger tab sidebar panels: Scope Chain, Resource, Probes
  • Changed XHR breakpoints to be global
  • Changed hierarchical path component labels to guess directionality based on content for RTL layout
  • Fixed RTL alignment of close button shown while docked
  • Fixed RTL layout issues in call frame tree elements and async call stacks
  • Fixed RTL layout issues in the debugger dashboard putting arrows on the wrong side
  • Fixed RTL layout issues in Type Profiler popovers
  • Fixed misplaced highlights in Search results of the Search navigation sidebar for RTL layout
  • Fixed disappearing section when clicking on the body of a CSS rule after editing
  • Fixed showing indicators for hidden DOM element breakpoints in the Elements tab
  • Fixed blank Network tab content view after reload
  • Made “Enter Class Name” text field wider so the placeholder text doesn’t clip
  • Fixed probe values not showing in the Debugger tab sidebar
  • Fixed focusing the Find banner immediately after showing it
  • Fixed showing Source Map Resources in the Debugger Sources list
  • Fixed Styles sidebar warning icon appearing inside property value text
  • Fixed broken tabbing in Styles sidebar when additional “:” and “;” are in the property value
  • Fixed clipped data in WebSockets data grid
  • Fixed staying scrolled to the bottom as new WebSocket log messages get added
  • Included additional pause reason details for DOM “subtree modified” breakpoint
  • Included more Network information in Resource Details Sidebar
  • Included all headers in the Request Headers section of the Resource details sidebar
WebDriver
  • Fixed an issue that prevented non-popup windows from being maximized or resized
  • Fixed an issue that caused previously opened tabs to reopen when Safari was launched in order to run a WebDriver test
Accessibility
  • Exposed a new AXSubrole for the explicit ARIA “group” role
  • Fixed VoiceOver web article navigation with an article rotor for sites like Facebook and Twitter
Media
  • Fixed seeks to currentTime=0 if currentTime is already 0
Rendering
  • Fixed clipping across page breaks when including <caption>, <thead> or <tbody> in a <table>
  • Fixed Japanese fonts in vertical text to support synthesized italics
  • Fixed long Arabic text in ContentEditable with CSS white-space=pre to prevent hangs
  • Fixed overly heavy fonts on facebook.com by attempting to normalize variation ranges
WebCrypto
  • Added support for AES-CTR
Security
  • Changed private browsing sessions to not look in keychain for client certificates
AppleScript
  • Fixed an issue where Safari would throw an exception when evaluating JavaScript ending with an implied return value, where the final statement doesn’t include the return keyword

Release 27

Browser Changes
  • Added a “Reload Page From Origin” alternate menu item to the View menu. This action reloads a page without using cached resources.
  • Removed the Option-Command-R (⌥⌘R) keyboard shortcut from “Enter/Exit Responsive Design Mode” and mapped it to “Reload Page From Origin” instead.
  • Removed the Disable Caches menu item in the Develop menu. The equivalent functionality is now available through Web Inspector’s Network tab.
JavaScript
  • Implemented ESNext Object Spread proposal
  • Changed to allow labels named let when parsing a statement in non-strict mode
  • Fixed const location = "foo" in a worker to not throw a SyntaxError
Web API
  • Aligned initEvent, initCustomEvent, initMessageEvent with the latest specification
  • Aligned Document.elementFromPoint() with the CSSOM specification
  • Changed XMLHttpRequest getAllResponseHeaders() to transform header names to lowercase before sorting
  • Fixed sending an empty "Access-Control-Request-Headers" in preflight requests
  • Implemented self.origin
  • Implemented the “noopener” feature for window.open()
  • Improved index validation when using uint index values in WebGL
  • Prevented beforeunload alerts when the user hasn’t interacted with the web page
  • Prevented innerText setter from inserting an empty text node if the value starts with a newline
  • Prevented new navigations during document unload
  • Prevented WebSQL databases from being openable in private browsing
  • Changed serialization of custom properties in longhand to be "", not the value of the shorthand property
  • Changed to tear down descendant renderers when a <slot> display value is set to "contents"
Rendering
  • Fixed pausing animated SVG images when they are outside the viewport, or removed from the document
  • Changed asynchronous image decoding to consider when the drawing size is smaller than the size of the image
  • Prevented large images from being decoded asynchronously when they are drawn on a canvas
  • Fixed the flow state for positioned inline descendants
  • Fixed initial letter rendering that follows pagination
  • Fixed clipping columns horizontally in multi-column layout
  • Fixed animated GIFs that fail to play in multi-column layout
CSS
  • Fixed an issue where a dynamically applied :empty pseudo class with display:none does not get unapplied
  • Unprefixed -webkit-min-content, -webkit-max-content and -webkit-fit-content
Media
  • Fixed loading media files in a <video> tag that are served without a filename extension
  • Suspended silent videos playback in background tabs to save CPU
Web Inspector
  • Added “Disable Caches” toggle in the Networking tab that only applies to the inspected page while Web Inspector is open.
  • Added “Save Selected” context menu item to Console
  • Added RTL support to the Timeline tab
  • Added RTL support for the Find banner
  • Added more accurate Resource Timing data in Web Inspector
  • Added context menu item to log content of WebSocket frame
  • Added icons for SVG Image cluster path components
  • Added keyboard shortcut to clear timeline records
  • Added a connection indicator for when a WebSocket connection is open or close
  • Changed Option-clicking the close tab button to close all other tabs
  • Changed to allow the user to copy locked CSS selectors in Style Rules sidebar
  • Changed to allow users to click links in inline and user-agent styles
  • Changed SVG image content view to allow toggling between the image and source
  • Changed Event Listeners detail section to show listeners by element rather than by event
  • Changed Event Listeners to add missing ‘once’ and ‘passive’ event listener flags
  • Fixed an issue where adding a WebSocket message could change the currently selected resource
  • Fixed clicking DOM breakpoint marker to enable and disable breakpoints
  • Fixed an exception when clicking on Clear Network Items icon with the timing popover visible
  • Fixed local storage keys and values starting with truncated strings
  • Fixed empty attributes added to a DOM tree outline element adding whitespace within the tag
  • Fixed an exception when fetching computed styles that can break future updates of section
  • Fixed syntax highlighting and formatting when inspecting a main resource that is JavaScript or JSON
  • Fixed pseudo-class markers overlapping DOM breakpoints and disclosure triangles
  • Fixed an issue causing the Resource details sidebar to display previous image metrics when viewing resource where content load failed
  • Fixed text selection in the Console to select only message text
  • Fixed formatting JSON request data
  • Fixed the filename used when saving a resource from the resource image content view
  • The file save dialog no longer suggests the top level directory as the default location
Accessibility
  • Fixed VoiceOver for editable text on the web
WebCrypto
  • Added support for SPKI/PKCS8 Elliptic Curve cryptography

Release 26

WebGPU
  • Added WebGPU prototype in the Experimental Features menu
Web API
  • Added support for history.scrollRestoration
  • Aligned Document.elementFromPoint() with the CSSOM specification
  • Changed the parameter to input.setCustomValidity() to not be nullable
  • Fixed transitions and animations of background-position with right-relative and bottom-relative values
  • Fixed an issue where WebSQL directories were not removed when removing website data
  • Made the XMLHttpRequest method setRequestHeader() use “,” (including a space) as the separator
  • Prevented displaying the label of an <option> element in quirks mode
  • Prevented extra downloads of preloaded CSS
  • Dropped support for non-standard document.all.tags()
CSS
  • Implemented stroke-width CSS property
Rendering
  • Enabled asynchronous image decoding for large images
  • Fixed memory estimate for layers supporting subpixel-antialised text
  • Fixed columns getting clipped horizontally in CSS Multicolumn
Web Inspector
  • Added XHR breakpoints UI
  • Added DOM breakpoints UI for node and subtree modification events
  • Added a “Create Breakpoint” context menu item for linked source locations
  • Added settings for controlling Styles sidebar intelligence
  • Added cache source information (Memory Cache or Disk Cache) in the Network tab
  • Added protocol, remote address, priority, and connection ID in the Network tab
  • Added individual messages to the content pane for a WebSocket
  • Fixed an issue where the DOM tree is broken if an element has a debounce attribute
  • Fixed an issue in the Resources tab navigation bar allowing the same file from a contextual menu item to be saved more than once
  • Improved the layout of the compositing reasons in the Layers sidebar popover
WebDriver
  • Fixed an issue where automation commands hang making it impossible to navigate back or forward
WebCrypto
  • Implemented ECDH ImportKey and ExportKey operations

Release 25

Resource Timing
  • Added Resource Timing as an experimental feature enabled by default
  • Added Resource Timing support in Workers
  • Improved gathering timing information with reliable responseEnd time
  • Changed loads initiated by media elements to set the initiatorType to their element name
User Timing
  • Enabled User Timing by default as an experimental feature
  • Changed performance.measure in Workers to throw a SyntaxError if provided mark name is not found
WebCrypto
  • Added support for AES-CFB
Web API
  • Added a new webglcontextchanged event that is dispatched when the GraphicsContext3D notices that the active GPU has changed
  • Changed the onbeforeunload event return value coercion to match specification behavior
  • Exposed Symbol.toPrimitive and Symbol.valueOf on Location instances
  • Fixed <input type=color> and <input type=range readonly> to prevent applying the readonly attribute to match specifications
  • Fixed handling of <input>.labels when the input type changes from "text" to "hidden" to "checkbox"
  • Prevented aggressive throttling of DOM timers until they’ve reached their maximum nesting level
Web Inspector
  • Enabled import() for modules in Web Inspector console
  • Changed the zoom level in the Settings tab to use localized formatting
  • Changed Web Inspector to use the Resources tab when showing files instead of the Network tab
  • Changed the split console to be allowed in the Elements, Resources, Debugger, and Storage tabs when Web Inspector is docked to the bottom
  • Changed CSS variable uses that are unresolved to get marked with a warning icon
  • Fixed the Zoom level user interface to match the the setting value
  • Prevented dismissing popovers when dragging a Web Inspector window
  • Improved copy and paste behavior for request headers
  • Included additional detail in the display name of Timeline data elements
CSS
  • Fixed centering text inside a button set to display:flex with justify-content:center
  • Unprefixed -webkit-line-break
Rendering
  • Prevented fixed elements from bouncing when scrolling beyond the bottom of the page
  • Improved text wrapping consistency where text might wrap when its preferred logical width is used for sizing the containing block
Media
  • Fixed local audio-only streams to trigger playback to begin
Bug Fixes
  • Changed pending scripts to execute asynchronously after stylesheet loads are completed
  • Fixed an issue where font-weight in @font-face can cause a font to be downloaded even when it’s not used
  • Made special URLs without a host invalid

Release 24

User Timing
  • Added User Timing as an experimental feature
  • Implemented PerformanceObserver for User Timing
  • Added support for Performance API (performance.now(), UserTiming) in Workers
Link Preload
  • Added <link preload> as an experimental feature
  • Added support for speculative resource loading
  • Prevented preloaded resources from being cleared after parsing is done
  • Addressed memory issues related to clearing preloaded resources
Web API
  • Changed Location object to throw a TypeError for Object.preventExtensions()
  • Changed Pointer Lock to require keyboard focus
  • Changed Pointer Lock events to be delivered directly to the target element
  • Changed the HTML Form Validation popover to be dismissed when pressing the Escape key
  • Changed the HTML Form Validation popover to respect the minimum font size setting
  • Fixed an issue causing Fetch to fail when passing undefined as the headers
  • Fixed the <details> element to work correctly when content is changed between closing and opening
  • Implemented toJSON() for URL objects
  • Improved URL specification compliance
  • Prevented a redundant scroll to top-left corner of the page when navigating back to a URL with no fragment
  • Made Symbols configurable when exposed on cross-origin Window or Location objects
JavaScript
  • Implemented dynamic import operator
  • Changed dynamic import through setTimeout() and setInterval() to correctly inherit SourceOrigin
  • Changed scripts load priority to ‘high’
  • Fixed Apple Pay line validation to prevent validating line items that are “pending”
  • Implemented ArrayBuffer.prototype.byteLength and SharedArrayBuffer.prototype.byteLength
  • Implemented lifting template escape sequence restrictions in tagged templates
CSS
  • Fixed elements with a backdrop-filter and a mask to correctly mask the backdrop
  • Updated line-break:auto to match the latest version of Unicode
Web Inspector
  • Enabled the console to evaluate dynamic module import()
  • Added CSS color keyword entries for all “grey” and “gray” variations
  • Added stroke-linecap property values to CSS autocompletion
  • Added a horizontal slider for gradient editor angle value where applicable
  • Added a limit on Async Call Stacks for asynchronous loops
  • Added a setting to preserve network data on navigation for the Network tab
  • Added the ability to show the current value of CSS variables in style rules
  • Added a warning that webkitSubtle in WebCrypto is deprecated
  • Changed docking Web Inspector to collapse the split console in the Timeline and Network tabs
  • Fixed jumping from Search tab results to see the resource in other tabs (Resource, Debugger, Network)
  • Fixed a Debugger sidebar panel issue that can cause it to have multiple tree selections
  • Fixed DOM tree view collapsing when switching back to the Elements tab
  • Removed Shift-Command-W (⇧⌘W) shortcut to a close tab
Accessibility
  • Fixed text string range from index and length in text controls when there are newlines
Rendering
  • Fixed column progression after enabling pagination on a right-to-left document
Performance
  • Suspended SVG animations on hidden pages
  • Avoided initially creating a layer backing store for elements outside the visible area
Security
  • Changed CSS data URL resources to be treated as same origin loads when loaded through HTML <link> elements

Release 23

Gamepads
  • Fixed Gamepad support for PS4 controllers
  • Exposed more directional pads for other types of gamepads
Pointer Lock
  • Fixed sending Pointer Lock events directly to the target element
  • Fixed page requests to re-establish Pointer Lock without a user gesture after being released without a user gesture
Media
  • Added client notification when the user plays media otherwise prevented from autoplaying
Accessibility
  • Fixed Speak Selection for <iframe> elements
Web Inspector
  • Added a way to trigger Garbage Collection
Bug Fixes
  • Fixed Flash object placeholder painting when Safari reloads pages with Flash objects after Flash is installed
  • Improved switching between GPUs for WebGL content in order to maximize battery life

Release 22

JavaScript
  • Fixed an error when calling an async arrow function which is in a class’s member function
  • Improved the speed of Array.prototype.slice in DFG/FTL JITs
CSS
  • Implemented scroll-snap-type:proximity scroll snapping
  • Fixed updating :active and :hover states across Shadow DOM slots
  • Fixed a CSS Grid issue with very big values for grid lines
  • Implemented baseline positioning for grid containers
  • Made the CSS Grid sizing data persistent through layouts
  • Fixed overflow:scroll scroll position getting restored on back navigation
Form Validation
  • Fixed the validation message to use singular form of “character” when maxLength value is 1
  • Truncated lengthy validation messages with an ellipsis
  • Aligned email validation with the latest HTML specification
Web Inspector
  • Added “Persist Logs on Navigation” to Settings tab
  • Added UI zoom level to the Settings tab
  • Added Command-, (⌘,) keyboard shortcut to open Settings tab
  • Fixed showing application cache details in the Storage tab
  • Improved the cubic-bezier editor for invalid inputs in component fields
  • Fixed an issue clearing pseudo classes toggled on in the Styles sidebar when Web Inspector is closed
  • Fixed resources disappearing from the network tab when an iframe gets removed
  • Fixed restoring Settings tab when reopening Web Inspector
  • Improved the layout of the spring function editor with left-aligned labels and slider tracks
Web API
  • Provided more detailed role descriptions for many new HTML5 input types
  • Aligned the innerText setter with the HTML specification
  • Fixed an issue changing the modified timestamp for a given gamepad when it is updated
  • Changed pointer lock to release when the page state is reset for any reason, not just when the process exits
  • Fixed editing of nested RTL-to-LTR content
  • Support iterating over URLSearchParams objects
  • Changed the first parameter of Event.initEvent() to be mandatory
Media
  • Added support for MediaKeys.generateRequest()
  • Added protection against the MediaPlayer being destroyed in the middle of a load()
Rendering
  • Fixed an issue that caused the highlighting of text using the Yoon Gothic webfont to reflow
  • Fixed reordering text inside a blockquote when un-indenting the text
Security
  • Volume-separated file URLs: disallowed a file URL on one volume from loading a file on another volume in macOS 10.12.4 or later

Release 21

JavaScript
  • Enabled concurrent garbage collection
  • Enabled <script type="module">
  • Added support for the global property on the global object
Fetch API
  • Improved console logging when loading resources
IndexedDB 2.0
  • Improved the speed of IDBIndex.get()
  • Improved the speed of iterating cursors
CSS
  • Updated the syntax of the prefers-reduced-motion media query
  • Fixed CSS scroll snap to work when scrollbar is hidden
  • Fixed column overflows when text-align: justify is combined with word-spacing
Rendering
  • Fixed a font variations bug exposed by the Skia font
  • Fixed an issue with multicolumn inside SVG <foreignobject>
  • Fixed a floating element overlapping the marker within an <li>
Accessibility
  • Fixed changing focus to modal dialogs when one appears
  • Changed VoiceOver to read table headers that are not visible onscreen and do not use have an aria-hidden attribute
Web API
  • Fixed firing Input Events with null inputTypes and no data when changing the text direction
  • Fixed handling key generation with an empty challenge string
  • Fixed focus for label elements with a tabindex value of 0 or higher
  • Fixed side effects while resetting form elements
  • Corrected setting the original URL of a download request with target="_blank"
  • Updated HTML form validation bubbles to be dismissed on navigation
Web Inspector
  • Allow simple await expressions to be run in the console
  • Fixed Computed Styles to correctly show the Container Regions section for regions content flows into
  • Fixed jumping to the definition of a custom element
  • Fixed uncommenting to enable CSS rules of pseudo-elements in the Styles sidebar
  • Updated CodeMirror to add support for the async and await keywords along with other ECMAScript 2017 features
  • Fixed repositioning Timeline graph elements when resizing the window
  • Fixed zooming in the Timeline to zoom where the cursor is located
  • Improved console for narrow widths
  • Modernized the find banner UI
  • Updated keyword completions in Web Inspector for the new scroll snapping CSS properties
Security
  • Allowed HTTPS URLs to match HTTP script-src expressions for Content Security Policy
Bug Fixes
  • Fixed a Safari crash that occurs when deleting a Chinese character typed after an image
  • Selecting when zoomed in no longer jumps around

Release 20

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
Touch Bar
  • Prevented emoji buttons from displaying in the Touch Bar for password inputs
JavaScript
  • Enabled Shared Array Buffers
  • Added a syntax error to report an unexpected token when async is followed by identifier in contexts where an async arrow function cannot occur
Web API
  • Added Document.onvisibilitychange event handler attribute
  • Added reflected nonce attribute to the HTML Link element
  • Added support for the deprecated dictionary constructors of DOMPointReadOnly and DOMPoint
  • Fixed an issue where Custom Elements from a different document are not customized when created with innerHTML
  • Fixed an issue causing animations followed by a transition to not always fire the transitionend event
  • Prevented document.webkitFullscreenElement and document.webkitCurrentFullScreenElement from exposing a node inside a shadow tree
Security
  • Changed to require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language
  • Implemented Strict Mixed Content Checking; block-all-mixed-content directive
  • Content Security Policy: Taught preload scanner how to preload <script>s and <link>s with nonce attribute
  • Content Security Policy: Allow ws: and wss: with connect-src * or default-src *
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
  • Fixed short columns in elements with the columns property
  • Fixed scrolling without momentum at the end of a scroll snapping container
  • Fixed line selection in flexbox layouts
  • Fixed ::after and ::before on :host
  • Fixed an issue causing keyframes to not work when defined inside a style in a shadow tree
Pointer Lock
  • Prevented document.pointerLockElement from exposing a node inside a shadow tree
  • Changed to exit pointer lock when page goes into page cache
  • Made the cursor visible when exiting pointer lock using the ESC key
  • Changed the API for pointer lock to be hidden when disabled in the Experimental Features menu
  • Changed to exit pointer lock when a JavaScript alert is shown
  • Changed behavior to exit both fullscreen and pointer lock when the ESC key is pressed
Web Inspector
  • Added the ability to distinguish if a script was parsed as a module
  • Changed Heap Snapshot data grids to allow keyboard navigation
  • Fixed Assertion Failures breakpoint to respect the global Breakpoints enabled setting
  • Added support for template literals in the Breakpoint Log action
  • Fixed an issue where some resources fetched via Fetch API would not have data
  • Fixed a bug to allow deleting a breakpoint from a worker script
  • Updated Esprima to support new syntax for ** operators , async, await, and trailing commas
WebCrypto API
  • Added support for SPKI format for SubtleCrypto.importKey and SubtleCrypto.exportKey
  • Added support for PKCS8 format while doing SubtleCrypto.importKey and SubtleCrypto.exportKey
  • Changed to allow importing keys without usages for RSA algorithms
Bug Fixes
  • Fixed an issue that could cause YouTube to pause when switching tabs
  • 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

Release 19

Touch Bar
  • Added support for Touch Bar in WebKit
HTML Form Validation
  • Enabled HTML interactive form validation
Pointer Lock API
  • Enabled Pointer Lock API
Input Events
  • Fixed compositionEnd events to fire after input events when editing in IME
  • Fixed firing an input event with color data when setting the foreground color for selected text
URL Parser
  • Changed URL Parser to prevent treating the first slash after the colon as the path for URLs with no host
Custom Elements
  • Fixed document.createElementNS to construct a custom element
CSS Font Loading
  • Fixed promises failing to fire for FontFace.load() and FontFaceSet.load()
Shadow DOM
  • Fixed triggering style recalculation when toggling a class in .class ::slotted(*)
  • Fixed event.composedPath() to include window
  • Fixed slot to work as a flex container
  • Fixed the slotChange event to bubble and be dispatched once
  • Fixed slot nodes that ignored transition events
  • Fixed document.currentScript to be null when running a script inside a shadow tree
  • Fixed the hover state when hovering over a slotted Text node
Web Inspector
  • Added support to shift-click on a named color value to cycle through different color formats
  • Added support for the Type Profiler and the Code Coverage Profiler in Workers
  • Changed selecting folders to display content in the Resources sidebar
  • Disabled Warning Filter in Debugger Tab by default
  • Improved name sorting in HeapSnapshot data grids
  • Improved Worker debugging to pause all targets and view call frames in all targets
  • Improved Debugger stack traces to display names for Generator functions
  • Improved Debugger to show execution lines for background threads
  • Improved Debugger to include showing asynchronous call stacks
  • Fixed URL Breakpoints that resolve in multiple workers to only appear in the UI once
  • Fixed layout and display issues in the Settings tab
  • Made checkbox labels clickable in the Settings tab
Rendering
  • Fixed an issue where elements with a negative z-index could sometimes render behind the document body
  • Changed the way unsupported emoji are drawn from being invisible to being the empty box
  • Changed flex element wrapping to consider when the width is less than min-width
Indexed Database 2.0
  • Implemented IDBCursor.continuePrimaryKey()
  • Implemented IDBObjectStore.getKey()
  • De-duplicated the names returned by IDBDatabase.objectStoreNames()
  • Added support for the IDBDatabase.onclose event
  • Fixed some issues with the firing of IDBRequest.onblocked events
  • Improved the performance of key
  • Improved SQLiteStatement performance throughout the SQLite backend
  • Aggressively flush the client’s request queue to the server
Accessibility
  • Changed the inverted-colors media query to match on state change instead of page reload
  • Fixed the implicit value for aria-level on headings to match the ARIA 1.1 specification
  • Exposed aria-busy attribute for authors to indicate when an area of the page is finished updating
WebDriver
  • Exposed navigator.webdriver if the page is controlled by automation
  • Changed the automation session to terminate if the web process crashes
Media
  • Fixed an issue where some animated images would not animate after reseting their animations
Security
  • Changed the keygen element to require 2048 or higher RSA key lengths
  • Changed window.name to be cleared after a cross-origin navigation
Bug Fixes
  • Fixed an issue causing copied text to include the text of CDATA sections and comments
  • Improved the performance of setting attributes on input elements of type text
  • Fixed a crash when interacting with Issues and Pull Requests on github.com
  • Fixed broken tab-focus navigation on some sites
  • Fixed a JS bindings generation issue that erroneously caused IntersectionObserver to be exposed, which broke Pinterest, Strava and Netflix

Release 18

Input Events
  • Turned on the Input Events experimental feature by default
JavaScript
  • Fixed an issue where exception descriptions didn’t know how to handle Symbol values
Shadow DOM
  • Added support for loading stylesheets for link elements that are inside Shadow DOM trees
Web Inspector
  • Added support for pausing, stepping and debugging Web Workers in the Debugger tab
  • Fixed creating a new pseudo-selector in the Styles sidebar when it doesn’t work on the first attempt
  • Fixed a stack overflow when searching a timeline recording for JavaScript function names
CSS
  • Changed how minmax(auto, <flex>) should be serialized per the CSS Grid spec
  • Fixed CSS.supports("font-variation-settings", "'wght' 500") so it does not erroneously return false
  • Fixed filter functions grayscale(), invert(), opacity(), and sepia() so they clamp values over 100%
  • Fixed the slotted() pseudo selector so that it works with id selectors
Rendering
  • Fixed a bug where Safari does not emit compositionend if blurred for dead key or Japanese IME
Indexed Database 2.0
  • Changed IDBIndex to handle rename behavior properly when version change transaction aborts
  • Changed IDBObjectStore to handle rename behavior properly when version change transaction aborts
  • Renamed IDBKeyRange.contains() to IDBKeyRange.includes()
  • Added support for binary keys
  • Added support for IDBIndex.getAll() and IDBIndex.getAllKeys()
  • Corrected what exceptions are thrown during IDBObjectStore and IDBIndex renaming
  • Switched to using IndexedDB exceptions in places where generic exceptions were being used
Accessibility
  • Fixed a crash that would happen when attempting to clear selection on ARIA listboxes
Printing
  • Made printing to PDF produce internal links when the HTML has internal links
HTTP Authentication
  • Changed Safari’s HTTP authentication UI to not block switching tabs, navigating to other websites, or closing tabs
Web APIs
  • Changed resizeTo, resizeBy, moveTo, or moveBy to do nothing in windows that weren’t created by window.open
  • Implemented new user interface for HTML interactive form validation behind an experimental flag

Release 17

Safari Extensions
  • Removed NPAPI Plug-in support from .safariextz Safari Extensions
Custom Elements
  • Enabled Custom Elements everywhere by default
  • Changed Custom Elements reactions to have a queue per element
  • Enqueued attributeChanged and connected callbacks when upgrading a custom element
  • Custom Elements reactions are now enqueued for HTML API and CSS OM APIs
Web APIs
  • Implemented rel=noopener
  • Enabled stylesheets loading via a link element inside Shadow DOM subtrees
  • Added support for HTML formatted content from event.dataTransfer.getData(‘text/html’) and event.clipboardData.getData(‘text/html’) in onpaste or ondrop events
Input Events
  • Added support to fire insertReplacementText input events when holding down a key to choose an accented character
  • Implemented InputEvent.getTargetRanges()
  • Implemented support for insertFromDrop and deleteByDrag
  • Implemented support for insertFromComposition, deleteByComposition, insertCompositionText, and deleteCompositionText input types for Input Events
  • Implemented support for InputEvent.dataTransfer
URL Parser
  • Matched the behavior of the old URL parser when %2E is in the URL path
  • Prevented interpreting host of URLs with unrecognized schemes as an IPv4 address
Fetch API
  • Ensured the redirection count is no more than 20 in case of cross origin requests
  • Ensured redirections are upgraded only if declared by CSP policy
  • Changed ReadableStream to only clone the second branch
JavaScript
  • Fixed arrow functions with concise bodies to be able to return regular expressions
  • Fixed String.prototype.replace() to throw an OutOfMemoryError when using too much memory
  • Enabled JSON.stringify to handle an ES6 Proxy that has an array element context
Web Inspector
  • Added support for Custom Elements in Web Inspector
  • Enabled showing Shadow DOM scoped styles in Web Inspector
  • Added a pinned tab for settings with various text editor preferences
  • Breakpoints not working in scripts with unicode characters
  • Fixed the alignment for arrows in the Styles scope bar item
  • Fixed the ⌘+ shortcut not increasing the size of Web Inspector’s user interface
  • Fixed Open Resource Dialog to jump to the last line when entering :*n* where n is greater than the number of lines in the file
  • Improved the debugger highlight in some exception cases
  • Improved Quick Open sorting algorithm
  • Improved console.log support in Web Workers
  • Included parameter strings for native CustomElementRegistry methods in the console
  • Prevented showing empty Closure sections in the Scope chain
CSS
  • Avoided unnecessary full style resolution in getComputedStyle for non-inherited properties
  • Fixed backdrop-filter to render properly when removed and then re-added
  • Fixed rendering dynamically-added backdrop-filter to a clip-path’d element with 3D transform
  • Changed behavior to create a stacking context while an animation is running when the animation keyframes affect stacking context properties
  • Prevented painting text selection within an SVG mask
  • Corrected the blur radius for filter: drop-shadow()
  • Changed style resolver to be updated lazily
Media
  • Allowed multiple playing videos on a page with autoplay and playsinline attributes
  • Fixed WebAudio to resume when moving from background to foreground tab
  • Fixed video playback stalls when seeking beyond the buffered range for some video sites
  • Added support for wide gamut in Quick Look image popovers
Networking
  • Changed the preloading behavior to match the behavior on iOS, where resources like images are loaded at a lower priority
Indexed Database 2.0
  • Support renaming IDBObjectStores and IDBIndexes
  • Implemented IDBTransaction.objectStoreNames()
  • Implemented IDBObjectStore.openKeyCursor()
  • Implemented IDBObjectStore.getAll() and IDBObjectStore.getAllKeys()
  • Implemented IDBIndex.getAll() and IDBIndex.getAllKeys()
Bug Fixes
  • Fixed an issue where JavaScript dialogs (alert, confirm, prompt) and Safari’s external navigation confirmation prompt showed empty messages

Release 16

URL Parser
  • Enabled a faster and more standards-compliant URL parser
Gamepad API
  • Enabled the Gamepad API by default, allowing gamepads already configured for use with macOS to work on web pages using the Gamepad API
CSS
  • Supported CSS Shapes Level 1 without a -webkit- prefix
  • Fixed an issue where CSS font-variation-settings did not handle uppercase axis names in variable fonts
Media
  • Made full access to the keyboard available when content is fullscreen
  • Made setting HTMLMediaElement.volume to NaN or Infinity throw a TypeError
  • Allowed throttling of background tabs that have media elements with no audible audio
Fetch API
  • Added support for Request cache mode
  • Forbid redirection to non-HTTP(s) URL when in non-navigation mode
  • Ensured memory cache does not bypass redirect mode
  • Improved network data transfer to stream when the application needs it
JavaScript
  • Implemented Intl.getCanonicalLocales
  • Changed ES6 method functions to not have a prototype property
  • Forbid "use strict" directive in generator functions with non-simple parameters
  • Prevented Array.prototype.concat from modifying frozen objects
  • Prevented Array.prototype.slice from modifying frozen objects
  • Prevented JSON.parse from modifying frozen objects
  • Handled non-function, non-undefined comparator in Array.prototype.sort
Web APIs
  • Changed MouseEvent coordinates to be set to 0 for simulated clicks
  • Fixed an issue where select.options could incorrectly return too many option elements
  • Made table.deleteRow(–1) do nothing when there are no rows
  • Fixed event listener order when overwriting an attribute event listener
  • Implemented DOMPoint and DOMPointReadOnly
  • Implemented DOMRect and DOMRectReadOnly
  • Added support for "CapsLock" modifier in KeyboardEvent.getModifierState()
  • Added support for window.navigator.languages attribute
  • Updated window.navigator.language to no longer return an all lowercase string
  • Updated HTMLSelectElement to ignore nested optgroup elements when recalculating
  • Ensured a toggle event is fired whenever details.open is changed
Web Inspector
  • Fixed Timeline UI updating while recording in remote Web Inspector
  • Exposed computed tree node and heading level for accessibility
  • Added toggles for debugger pauses at console.assert failures
  • Prevented changing content view when dragging to delete a breakpoint
  • Improved debugger highlight when inside of getter and setter calls
  • Improved debugger highlight when pausing on the first statement of a program
  • Improved debugger highlight for dot- and bracket-expressions in if statements
  • Removed line flash while stepping to prevent distraction
  • Prevented CSS autocompletion from adding extra unexpected characters
  • Corrected syntax highlighting for mixed case CSS values like translateX
  • Fixed an issue when pasting into a CSS rule selector
Accessibility
  • Implemented prefers-reduced-motion media query
  • Set <figcaption> to provide the accessible name for other content inside the <figure>
  • Exposed the invalid status for input types with an invalid input value
  • Exposed the placeholder attribute when both the placeholder and aria-placeholder attributes are set
  • Improved accessibility support for <summary> elements
  • Mapped the <output> element to status role and exposed its text content as a title
  • Added a new role for the <mark> element and exposed the role description
  • Improved the <meter> element to describe the status of the value
  • Provided more detailed role description for input types exposed as standard text fields
Shadow DOM
  • Fixed updating styles for stylesheets that change in a shadow tree
Bug Fixes
  • Fixed an issue where Safari Technology Preview would hang when waking from sleep
  • Fixed an issue where the contents of a tab would remain onscreen briefly after automatically switching to a new tab when opening a target=_blank link
  • Changed “Download Linked File” context menu action to use the value of the download attribute as the filename
  • Changed “Download Linked File As…” context menu action to use the value of the download attribute as the suggested filename
  • Fixed a bug where a keyframe animation on body could trigger high CPU usage
  • Fixed an issue that caused the keyboard to remain visible when swiping back on twitter.com

Release 15

Fetch API
  • Made ReadableStream throw TypeError values instead of strings
  • Changed Fetch to prevent redirection to non-HTTP URLs
  • Made FetchBody use UTF8 to encode text data
  • Added support for URLSearchParams as the body of a Fetch
JavaScript
  • Sped up String.prototype.toLowerCase() by 7–8% on benchmarks
  • Fixed cases where class, function, and arrow function names were not inferred during assignment
  • Fixed arrow functions so they don’t allow duplicate parameter names
  • Updated Generator and GeneratorFunction property descriptors to match the ES6 spec
  • Fixed a bug where String.prototype.padStart() and padEnd() would insert null in rare cases
  • Fixed a bug with Function.prototype.length when there are parameters with default values
CSS
  • Implemented rendering of font-variation-settings and enabled it by default
  • Implemented animation of font-variation-settings
  • Added mapping for font-family: cursive to KaiTi fonts in Chinese
  • Sped up the computation of CSS Grid row sizes with indefinite heights by 2×
  • Fixed setting a style element’s textContent or cssText so it properly triggers a style recalculation
  • Fixed toggling display: none on a parent element of a Shadow DOM slot to work in more cases
Web APIs
  • Enabled support for the download attribute on anchor and area elements — including Blob URLs
  • Exposed CryptoKey to Web Workers
  • Implemented Node.prototype.getRootNode()
  • Implemented ShadowRoot.prototype.elementFromPoint()
  • Implemented DOMTokenList.prototype.supports()
  • Implemented ImageData.prototype.data from the HTML spec
  • Implemented KeyboardEvent.prototype.code from the UI Event spec
  • Implemented KeyboardEvent.prototype.isComposing from the UI Event spec
  • Implemented KeyboardEvent.prototype.key from the UI Event spec
  • Implemented KeyboardEvent.prototype.repeat from the UI Event spec
  • Implemented KeyboardEvent.prototype.getModifierState() from the UI Event spec
  • Changed ReadableStream to match the Steams API spec
  • Changed DOMTokenList.prototype.value and toString() to match the DOM spec
  • Changed td.scope to only return known values
  • Changed HTMLLabelElement.prototype.form to match the HTML spec
  • Changed Element.insertAdjacentHTML() to match the HTML spec
  • Changed window.open() so it returns null when it is blocked by Safari
  • Changed HTMLSlotElement.prototype.assignedNodes() to include fallback contents when flatten option is set
  • Changed Object.prototype.getOwnPropertyDescriptor() so it works correctly across origins
  • Changed HTML serialization to always add xml: prefix for attributes in the XML namespace
  • Changed properties on Window and Location to be non-enumerable when accessing them cross origin
  • Fixed a bug where text nodes assigned to a linked slot were not clickable
  • Fixed the assignment of non-numeric values to input.minlength by setting it to 0
  • Fixed input elements so they work inside Shadow DOM trees
  • Fixed the document.title getter by stripping and collapsing the right whitespace characters
  • Fixed going into fullscreen from Silverlight a second time would hide the menu bar and dock for Safari
  • Fixed the serialization of HTML element attributes to match the HTML spec
  • Fixed the serialization of HTML void elements to ignore any child elements
  • Fixed the serialization of bgsound, keygen, and track elements
  • Fixed a bug where setting attributes on HTMLMeterElement to non-finite values would throw the wrong exception type
  • Fixed a bug where IDBIndex.prototype.openCursor() would match indices on multiple object stores
  • Fixed a bug preventing structured clones of WebCrypto keys under Safari 10
Web Inspector
  • Added line range highlighting to show where the debugger is paused — good for lines with multiple expressions or multiple function calls
  • Made breakpoints on blank lines or comments break on the next possible line
  • Fixed stepping out of a function so it always takes you to the caller instead of sometimes resuming
  • Fixed stepping to a line in the debugger with an “auto continue” breakpoint so it still pauses
  • Fixed refreshing while in the Timelines tab would cause negative timestamps in the Network tab
  • Fixed a bug where Box Model values were not updated when DOM node styles changed
  • Fixed a bug where the DOM would not update when editing Box Model values (border, margin, etc.)
  • Added a console message when an anchor download attribute is ignored
  • Made clicking a second time on the color swatch square hide the CSS color picker
Media
  • Fixed Picture in Picture playback so it always shows the correct state of the play button
Accessibility
  • Exposed a label element’s text content as the description for meter elements
  • Exposed a label element’s text content as the description for progress elements
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
Safari Extensions
  • Fixed an issue where Safari Technology Preview would consume excess memory when certain Safari Extensions were installed

Release 14

Safari Extensions
  • Fixed an issue where content blocker extensions delivered with apps wouldn’t be applied in Safari Technology Preview
Custom Elements
  • Enabled Custom Elements API
Fetch API
  • Changed combining Access-Control-Request-Headers with ',' instead of ', '
  • Added unsafe request header checks for the Referrer and Origin headers
JavaScript
  • Changed ES6 classes to allow the creation of a static method with name “arguments”
  • Improved performance for Map and Set
  • Improved performance of Function.prototype.bind
  • Fixed language tag parsing in Intl constructors
Web APIs
  • Implemented URLSearchParams
  • Added support for HTMLIFrameElement.allowFullscreen, input.minLength, and textArea.minLength attributes
  • Added support for HTMLSourceElement.prototype.sizes and HTMLSourceElement.prototype.srcset
  • Fixed an issue to allow setting input.type to file after being set to another type
  • Fixed attribute reflection as a URL for frame.longDesc, iframe.longDesc and HTMLObjectElement.codebase
  • Fixed ol.start to return the correct value for reversed lists when it is not explicitly set
  • Changed hspace, vspace, width, height attributes of HTMLImageElement along with the hspace and vspace attributes of HTMLObjectElement to be unsigned
  • Changed pageXOffset and pageYOffset attributes of Window to be replaceable
  • Changed the window.performance object wrapper to stay alive as long as the associated frame
  • Changed the invalid default value of HTMLTrackElement.kind to the metadata state
  • Fixed handling a negative radius in the coords attribute of an HTMLAreaElement in a circle shape
  • Moved HTMLButtonElement.prototype.click to HTMLElement.prototype.click
  • Updated HTMLAppletElement and HTMLAreaElement shape parsing to align with specifications
  • Exposed the WebCrypto algorithms via KeyAlgorithm dictionary
  • Dropped legacy canvas.probablySupportsContext()
  • Dropped support for <isindex>
Apple Pay
  • Added a new -webkit-appearance CSS property for Apple Pay buttons
  • Fixed presenting a payment sheet when a sheet is already active in another window
Web Inspector
  • Added a button to the navigation bar to toggle the Control Flow Profiler
  • Added support for drag-and-drop of CSS classes and ids onto DOM nodes
  • Added JavaScript completion for ES6 keywords and global variables
  • Added a popover to show Resource Timing details in Network waterfall displays
  • Added a warning message in the Debugger sidebar when breakpoints are disabled
  • Changed the Debugger Scope sidebar to show “Local” instead of “Closure” when paused in an anonymous function
  • Fixed selecting the call frame in the Debugger sidebar on initial pause and added an indicator next to active call frame
  • Fixed debugger popover title and code horizontal alignment
  • Fixed Command-Z (⌘Z) behavior when editing CSS selectors in the Styles sidebar
  • Improved Element Search (⇧⌘C) to bring the inspector page’s window forward and highlight elements without requiring mouse movement
  • Fixed Properties section layout when clicking the “Show All” checkbox of the Computed Styles section
  • Fixed a bug causing the color picker to stop working in the Styles sidebar after the first color change
  • Fixed a bug where reloading unexpectedly switches to the Storage tab
  • Implemented Copy CSS Selector and Copy Xpath Selector context menus
  • Improved element search to bring the inspected page’s window forward
  • Made console session dividers more pronounced
Rendering
  • Added support for new emoji group candidates
WebDriver

Starting in Release 14, Safari Technology Preview now includes regular updates and bug fixes to Safari’s WebDriver implementation. You can run your WebDriver tests with the updated driver by using the safaridriver executable that is included in the Safari Technology Preview application bundle. By default, this is located at /Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver. The driver executable located at /usr/bin/safaridriver will continue to launch Safari 10 on macOS Sierra and OS X El Capitan.

For more information about using WebDriver with Safari, check out the blog post WebDriver Support in Safari 10.

Release 13

Fetch API
  • Added support for BufferSource bodies
  • Fixed blob resource handling to raise a network error when the URL is not found
  • Set the blob type correctly for an empty body
  • Set the blob type from Response/Request contentType header
  • Made the body mix-in text() decode data as UTF–8
  • Ensured response cloning works when data is loading
  • Enabled the Fetch API to load the data URL in same-origin mode
  • Prevented any body for opaque responses
  • Changed opaqueredirect responses to have their URL set to the original URL
  • Prevented setting bodyUsed when request construction fails
  • Set Response bodyUsed to check for its body-disturbed state
  • Changed response cloning to use structureClone when teeing a Response stream
  • Aligned the internal structure of ReadableStream with the specifications
  • Aligned data:// URL behavior of XHR to match specifications
Custom Elements
  • Added adopted callback for custom elements on appendChild()
  • Enabled reaction callbacks for adopted custom elements
  • Updated the semantics of :defined to re-align with specification changes
  • Added validations for a synchronously constructed custom element
  • Added support for the whenDefined() method on the CustomElementRegistry
  • Added a CustomElementRegistry check for reentrancy
JavaScript
  • Enabled assignments in for…in head in non-strict mode
  • Changed newPromiseCapabilities to check that the given argument is a constructor
  • Fixed toString() to return the correct tag when called on proxy objects
Web APIs
  • Added event support for <link preload>
  • Implemented x, y and ScrollToOptions arguments for Element.scroll(), Element.scrollTo(), and Element.scrollBy()
  • Updated location.toString to make it enumerable
  • Updated location.toString in Web Workers to make it enumerable
  • Changed Object.preventExtensions(window) to throw a TypeError exception
  • Aligned coords and srcset attribute parsing with the HTML specification
  • Added support for CanvasRenderingContext2D.prototype.resetTransform
  • Aligned cross-origin Object.getOwnPropertyNames() with the HTML specification
Web Inspector
  • Added IndexedDB Database, ObjectStore, and Index data to the details sidebar
  • Added support for Shift-Command-D (⇧⌘D) to switch to the last used dock configuration
  • Added support for Shift-Tab (⇧⇥) to un-indent the selected line
  • Changed Command-D (⌘D) to select the next occurrence instead of deleting the line
  • Added a visual indicator for shadow content in the DOM tree
  • Allowed hiding of CSS variables in the Computed styles panel
  • Fixed an issue that prevented using an Undo action in the breakpoint editor
  • Prevented the resource content view from showing “CR” characters
  • Fixed an issue preventing re-inspecting the page after a Web Inspector process crash
  • Improved the minification detection heuristic for small resources
  • Fixed an issue causing network record bars to be positioned on unexpected rows
  • Provided a way to clear an IndexedDB object store
  • Improved the debugger popover to pretty print functions
  • Corrected unexpected cursor changes while dragging ruler handle in the rendering frames timeline
  • Corrected the display of a plain text XHR response with responseType="blob"
CSS
  • Implemented CSS.escape according to the CSSOM specification
  • Improved CSS stylesheet checks to ensure clean stylesheets are accessible from JavaScript
  • Improved :enabled and :disabled selectors to only match elements that can be disabled
Rendering
  • Fixed scrollbars for a <table> with overflow content inside <div align="right">
  • Added support for non-BMP MathML operators U+1EEF0 and U+1EEF1
  • Fixed getting font bounding rect for MathML
Security
  • Changed the Image Loader to set the fetch mode according its crossOrigin attribute
  • Added a SecurityError when trying to access cross-origin Location properties
  • Updated Object.defineProperty() and Object.preventExtensions() to throw an error for a cross-origin Window or Location object
  • Updated Object.setPrototypeOf() to throw an error and return null when used on a cross-origin Window or Location object
Plugins
  • Replaced YouTube Flash embeds with HTML5 equivalents on macOS

Release 12

JavaScript
  • Added checks for TypedArray.prototype.slice to ensure the source and destination have not been detached
  • Added exception handling for const variables used in a for-in or for-of loop
  • Improved the performance of Array.prototype.map when used with Arrays
  • Implemented Object.entries and Object.values from the ES2017 specifications
  • Changed the line, column and sourceURL properties of Error to be configurable and writable
Web APIs
  • Fetch API is enabled by default
  • Updated Resource Timing implementation
  • Aligned Range.surroundContents() with the latest DOM specification
  • Added support for HTMLAreaElement.toString()
  • Changed the prefix properties of Attr and Element to be read-only
  • Changed <command> to an HTMLUnknownElement and <basefont> to an HTMLElement
  • Moved the prefix, namespaceURI, and localName attributes from Node to Attr and Element
  • Aligned text encoding labels with the Encoding specification
  • Added Animatable, AnimationEffect, KeyframeEffect and Animation interfaces for Web Animations
  • Aligned isDefaultNamespace(), lookupPrefix(), and lookupNamespaceURI() with the specification
  • Changed querySelector() and querySelectorAll() to always throw a SyntaxError when failing to parse a selector string
  • Moved embeds, plugins, and scripts attributes from HTMLDocument to Document
  • Moved the compatMode and designMode properties from HTMLDocument to Document
  • Updated getElementsByTagName() to take a qualified name parameter
  • Exposed crypto.getRandomValues to Web Workers
  • Added application/vnd.api+json as a valid JSON MIME-type
Web Inspector
  • Added Open in New Tab, Reveal in Resources Tab and Copy Link Address to the context menu of link attributes
  • Added Download File context menu item for resource tree elements
  • Added Copy Selected context menu item to the Console
  • Added a visual editor for the spring() timing-function
  • Fixed an issue where “NaN x NaN” was shown for invisible elements in the Styles → Computed → Box Model section
  • Set Open Resource Dialog to jump to the last line when the specified line number (“:n”) is more than the total line count of the resource
  • Added an icon for selectors that only affect pseudo-elements
  • Fixed DOM nodes shifting when hovering over them in the Console
  • Fixed the alignment of the Close button of the selected item in the Network tab
  • Changed the Visual Styles Sidebar behavior for SVGs to show SVG specific sections
  • Changed the Visual Styles Sidebar TextContent section to only be visible for a pseudo-element
  • Escaped Text → Content in the Visual Styles Sidebar
  • Addressed status icons flickering from rapid updates in the Visual Styles Sidebar
  • Fixed the placement of Error and Warning icons in the Visual Styles Sidebar
  • Fixed a hang when using Command-Shift-O (⌘⇧O) when the loaded web page has frames
  • Enabled editing node attributes, content, and styles for shadow DOM nodes
  • Improved the display of large numbers in the console log counter on the dashboard
  • Improved the display of large class lists and made the quick-toggle easier to discover
MathML
  • Improved the extraction of operator and token elements’ characters
  • Introduced a MathMLRowElement class for mrow-like elements
  • Introduced a MathMLAnnotationElement class for the <annotation> and <annotation-xml> elements
CSS
  • Enabled the :host pseudo-class to style elements in the shadow tree
  • Corrected the namespace prefix handling in front of element name CSS selectors
Rendering
  • Fixed SVG clip-path to work on a root SVG element
  • Fixed ctx.drawImage to clip the source rectangle if it is outside the source image
Accessibility
  • Labelled audio description tracks correctly to prevent user confusion
  • Added a percentage value description for the media control’s timeline slider
Security
  • Improved URLParser parsing IPv4 addresses and URLs without credentials
  • Added support to handle cross-origin redirect requests while in CORS mode
  • Corrected the Upgrade-Insecure-Request state handling between navigations
  • Added a sandbox for the Adobe Flash Player ESR plug-in used in enterprise environments
  • Changed instantiation of WebKit plug-ins to happen at layout time, instead of at style resolution time

Release 11

JavaScript
  • Updated behavior for a class that extends null to follow ECMAScript 2016 specifications
  • Made the second argument for Function.prototype.apply allow null, undefined or array-like data
Web APIs
  • Add support for DOMTokenList.replace()
  • Add support for Element.getAttributeNames()
  • Made the first parameter mandatory for canvas.getContext() and probablySupportsContext()
  • Made the first two parameters mandatory for window.postMessage()
  • Made the first parameter mandatory for Document.execCommand() and queryCommand*()
  • Made the first parameter mandatory for HTMLMediaElement.canPlayType()
  • Made the first parameter mandatory for indexed property getters
  • Made the first parameter mandatory for Range.createContextualFragment()
  • Made the first parameter mandatory for setTimeout() and setInterval()
  • Made the first parameter mandatory for SVGDocument.createEvent()
  • Made the parameter mandatory for a named property getter mandatory
  • Made the parameter mandatory for table.deleteRow() and body.deleteRow()
  • Made the parameter mandatory for tr.deleteCell()
  • Made the parameters mandatory for CanvasGradient.addColorStop()
  • Made the parameters mandatory for DOMParser.parseFromString()
  • Made the parameters mandatory for Event.initEvent()
  • Made the parameters mandatory for insertAdjacentText() and insertAdjacentHTML()
  • Enabled strict type checking for nullable attribute setters for wrapper types
  • Enabled strict type checking for operations’ nullable parameters for wrapper types
ApplePay
  • Stopped accepting the deprecated requiredShippingAddressFields and requiredBillingAddressFields properties
Web Inspector
  • Improved the appearance of the Timeline tab when editing the enabled timelines
  • Changed the Jump to Line keyboard shortcut to Control-G (⌃G)
  • Fixed the grid column resizing element positions
  • Added waterfall view to the Network tab and Network Timeline
  • Fixed positioning of popovers when the window resizes
  • Fixed popover drawing
  • Polished UI for the Edit Breakpoint, Open Quickly, and Goto Line dialogs
  • Update the Visual Styles Sidebar to use a one column layout when narrow
  • Fixed the behavior of Home and End keys to match system behavior
MathML
  • Polished MathML parsing
CSS
  • Aligned the CSS supports rule with the specification
  • Addressed incorrect results for the color-gamut media query
Rendering
  • Fixed performance issues with <marquee> with the truespeed attribute
Media
  • Fixed captions not rendering in the PiP window for a hidden video element
  • Addressed media controls not displaying for some autoplaying videos at certain browser dimensions
  • Fixed media stream video element to show black when all video tracks disabled
Accessibility
  • Added localizable strings when inserting list types
  • Improved the accessibility of media controls
Content Blockers
  • Enabled Content Blockers to block WebSocket connections

Release 10

JavaScript
  • Introduced exponentiation expressions (x ** y) from ECMAScript 2016
  • Improved specification compatibility of use strict in functions
Web APIs
  • Moved dir attribute from HTMLDocument to Document
  • Aligned Node.isEqualNode() with the specification
  • Made DOMTokenList iterable
  • Moved properties for ClientRect to the prototype
  • Made the parameters of DOMImplementation.createDocumentType() mandatory and non-nullable
  • Made the first parameter of Window.getComputedStyle() mandatory and non-nullable
  • Fixed null handling of SVGAngle.valueAsString and SVGLength.valueAsString
  • Fixed null handling of HTMLFontElement.color
  • Fixed null handling for several HTMLTableElement attributes
  • Fixed null handling for HTMLObjectElement.border
  • Fixed null handling for td.bgColor and tr.bgColor
  • Fixed null handling for several HTMLBodyElement attributes
  • Fixed null handling of the marginWidth and marginHeight attributes for HTMLFrameElement and HTMLIFrameElement
  • Fixed null handling for HTMLImageElement.border
  • Fixed null handling of several Document attributes
  • Fixed null handling of HTMLMediaElement.mediaGroup
  • Fixed null handling of HTMLSelectElement.value attribute
  • Fixed null handling of SVGScriptElement.type attribute
  • Fixed null handling of several HTMLDocument attributes
  • Fixed null handling of HTMLScriptElement.text attribute
  • Fixed null handling of the enctype, encoding and method properties of the form element
  • Fixed null handling of formEnctype and formMethod properties for input and button elements
  • Changed the letter-case for the playsInline IDL attribute
  • Dropped the SVGElement.xmlbase attribute
  • Aligned CSSStyleDeclaration.setProperty() with the specification
  • Made the EventTarget.dispatchEvent() parameter non-nullable
Apple Pay
  • Fixed deprecated errors thrown when using requiredBillingAddressFields
  • Fixed onPaymentAuthorized callback not received when authorizing a second time
  • Fixed ending the payment session if the user closes all windows
Web Inspector
  • Fixed slowdowns when switching away from the Console tab with a lot of messages
  • Fixed filtering in the Overview timeline view
  • Fixed maintaining the selected function when switching between different profile representations
  • Improved styles for the Open Quickly and Goto Line dialogs
MathML
  • Changed the CSS display property of many MathML elements to allow page authors to override
  • Mapped “combining” to “non-combining” character equivalents
  • Improved alignment inside vertically stretched operators
  • Removed the padding and margin around the <math> element
  • Reset the font-style property on the <math> element
Rendering
  • Added support for new emoji group candidates
  • Fixed moving scrollbars to the right when the text direction changes to right-to-left
  • Fixed image zoom animations that were broken on medium.com
  • Fixed computing elements-based snap points for containers with large maximum scroll offset values
  • Fixed a rendering issue causing theguardian.co.uk crossword puzzles to sometimes not display text
Accessibility
  • Fixed an issue causing duplicate children when first-letter is being used in CSS
  • Fixed name calculation of headings from the aria-label attribute for VoiceOver
  • Added a new attribute to expose the auto-fill button type to VoiceOver
  • Fixed volume adjustments using VoiceOver and improved spoken feedback
Security
  • Changed behavior to block insecure scripts running in a data: frame when the top-level page is HTTPS
  • Changed URL handling to remove credentials when accessed through location.href
  • Changed behavior to block mixed-content synchronous XHRs
  • Improved support for multiple policies to more closely conform to the CSP Level 2 specifications
  • Applied the Content Security Policy object-src and plugin-types directives for plugin replacements
  • Changed the behavior to prevent history.pushState and history.replaceState where a username is in the URL
  • Changed behavior to allow LocalStorage access for file URLs by default

Release 9

JavaScript
  • Improved spec compliance for Array and %TypedArray%
  • Improved the performance of %TypedArray%.prototype.subarray
  • Fixed Date.setYear() to be more spec compliant
  • Fixed Date.toGMTString() to be the Date.toUTCString() function
  • Fixed a successful RegExp.compile to properly return the regular expression
  • Improved String to better match specs
  • Fixed cyclic prototypes to throw the right error type according to specs
  • Implemented HasRestrictedGlobalProperty when checking for global lexical tier conflicts
  • Fixed an unexpected “Out of memory” error for String.prototype.repeat() with a negative value argument
  • Fixed use strict handling when parsing functions that include use strict after other non-strict statements
Web APIs
  • Changed FontFaceSet.load and FontFaceSet.check to honor the second argument
  • Moved assignedSlot from CharacterData to Text to match the latest Shadow DOM specs
  • Replaced Event.prototype.scoped by Event.prototype.composed to reflect the latest Shadow DOM spec
  • Aligned document.body setter with the HTML specification
  • Fixed document.body to return the first child of the HTML element that is either a body or frameset element
  • Fixed document.title setter for SVG documents
  • Fixed an issue that prevented calling the document.fonts.ready callback
  • Added support for unprefixed version of the CSS image-set() function
  • Setting table.tFoot or calling table.createTFoot() should append HTML <tfoot> element to the end of the table
  • Exposed <td> and <th> elements as HTMLTableCellElement objects
  • Prevented tbody.deleteRow(–1) and tr.deleteCell(–1) from throwing an error when there are no rows or cells
MathML
  • Added support for href attribute in MathML
  • Improved the layout of <munderover> using parameters from the OpenType MATH table
  • Added support for mathvariants that cannot be emulated via CSS.
  • Refactored MathML layout functions to avoid using flexbox
Apple Pay
  • Fixed a bug allowing multiple payment sheets in Safari to be open at the same time
  • Renamed addressFields tocontactFields
  • Added type and paymentPass properties in PaymentMethod
Web Inspector
  • Added “Copy as cURL” feature for resource requests in the timeline
  • Fixed an issue causing Top Functions data to show even when disabled
  • Improved JSON pretty printing in more scenarios
  • Added spring to transition-timing-function value auto-completion
  • Added pixel area column to the Layout timeline view
  • Improved the API view of native DOM APIs
  • Fixed ⌘⇧S in the Styles sidebar to always show the save dialog
  • Fixed an issue causing a scrolled JavaScript Snapshot list to be drawn blank when switching back from a comparison view
  • Fixed an issue that caused a UTF8-encoded XHR to show garbled data in the Resource sidebar
  • Added Shadow Content type to DOM tree in the Elements tab
  • Fixed an issue preventing the last normal tab from being closed with the “Close Tab” context menu item
  • Fixed an issue causing the wrong function name to show in the Scope Chain sidebar of the Debugger tab
Media
  • Pause small video elements when returning to inline when they are too small
  • Changed the picture-in-picture control glyph
  • Changed fullscreen and picture-in-picture to not animate when navigating away from the host page
  • Fixed WebAudio convolver channels to throw exceptions for an invalid number of channels
  • Fixed clearing of MSE buffers by switching to MediaTime
  • Fixed an issue where Facebook videos without audio tracks will sometimes cause playback controls to appear
Rendering
  • Fixed rendering an <img> element with a wide gamut PDF
  • Fixed drawing an SVG image into a <canvas> that is not in the DOM
Bug Fixes
  • Fixed database process crashes when deleting a corrupt SQLite database file
  • Fixed blob content type when retrieving blobs from IndexedDB
  • Prevented a crash when attempting to copy an image

Release 8

JavaScript
  • Achieved 100% ECMAScript 2015 (ES6) support by adding back Symbol.isConcatSpreadable
  • Unified the handling of regular expression character escapes \w and \W and word assertions \b and \B
  • Implemented isFinite and isNaN in JavaScript for a performance benefit
  • Fixed a crash when a finally clause is used inside a for-in loop
CSS
  • Updated :default CSS pseudo-class to match checkbox and radio inputs with a checked attribute
  • Fixed an issue where the :hover CSS pseudo-class would match after the cursor left the element
  • Prevented :in-range and :out-of-range CSS pseudo-classes to not match on inputs that do not have range limitations
  • Changed :in-range and :out-of-range CSS pseudo-classes to not match disabled or readonly inputs
  • Fixed border rendering for elements with min-width: -webkit-fill-available and zero available width
  • Fixed style updates applied by :host() when changing the CSS class name of a shadow-host element
Web APIs
  • Added fallback mechanisms for stretching and mirroring radical symbols in MathML
  • Used the MathOperator to handle some non-stretchy operators in MathML
  • Set the upper limit for the size or number of pieces of stretchy operators in MathML
  • Allowed phrasing content to be accepted in <mo> elements
  • Fixed a bug retrieving Blobs from IndexedDB using cursors in WebKit2 sandboxing
  • Changed synchronous event tracking to each event type instead of each event sequence
Apple Pay
  • Moved Apple Pay code to the open source repository
  • Moved WebKit2 Apple Pay code to the open source repository
  • Moved the WebKit1 Apple Pay code to the open source repository
  • Added a logged error message when passing an invalid API version to ApplePaySession constructor
  • Moved the user gesture requirement to the ApplePaySession constructor
  • Fixed the Apple Pay total amount error message to trigger for the correct limits
  • Added shippingType to the list of valid Apple Pay payment request properties
  • Added an exception to Apple Pay when the shipping method has an invalid amount
  • Fixed discounted Apple Pay line items to display positive amounts
Web Inspector
  • Changed console.profile to use the new Sampling Profiler
  • Fixed an infrequent but persistent crash that could occur when closing Web Inspector
  • Prevented automatic timeline recording when Web Inspector is not visible
  • Delayed the first auto-capture heap snapshot during page reloads until after the page performs its first navigation
  • Fixed showing impossible values for underflowed bmalloc sizes in the Memory Timeline
  • Uncoupled the Quick Console selection updates from the UI to improve testing
  • Fixed selectElement.options entries in console for named indexes beyond the collection length
  • Fixed the Snapshot List to show the total size and the total live size
  • Improved JavaScript Heap Snapshot clean up handling
  • Ensured localStorage is updated when modifying sessionStorage
  • Fixed broken text search in resources with <CR>
Media
  • Fixed picture-in-picture placeholder visibility when the controls attribute is removed
  • Fixed the volume slider for web video playback controls for right-to-left content
  • Implemented support for “replacement” codec
  • Fixed an issue where media controls stop working after exiting picture-in-picture mode
  • Fixed media elements to not lose playback controls when muted by a user gesture
  • Fixed the playback controls element used when playing multiple items in a page
Rendering
  • Fixed the position for composition underlines in right-to-left content
  • Fixed <attachment> elements jumping around when subtitle text changes slightly
  • Fixed style invalidation for :active when the activated node has no renderer
  • Flipped the behavior for the Forward and Back keyboard shortcuts in right-to-left content
  • Fixed the placement of <select> popup menus in right-to-left content
  • Corrected the behavior of the :active state of elements when focus changes
Accessibility
  • Added support for CSS4 :focus-within pseudo-class
  • Exposed anonymous RenderMathMLOperators to the accessibility tree
  • Fixed the ARIA role attribute for label elements
Security
  • Prevent file scheme access to a resource on a different volume
  • Set CORS preflight with a non–200 response to be a preflight failure
  • Allowed * to match the originating page’s scheme for Content Security Policy
  • Changed security origin inheritance check to ignore case
Bug Fixes
  • Fixed parent document scrolling when a focus event is dispatched in an <iframe>
  • Fixed an issue causing Google Maps transit schedule explorer to initially load blank
  • Changed HTMLElement and SVGElement to implement GlobalEventHandlers
  • Implemented a constructor for TouchEvent
  • Fixed double-tap to zoom on Yahoo Finance
  • Implemented support for Vary:Cookie validation in private browsing
  • Fixed playback controls on Vimeo.com videos
  • Improved resource handling when navigating by discarding decoded image that is only “in use” due to page cache not actual pages

Release 7

JavaScript
  • Implemented options argument to addEventListener
  • Updated JSON.stringify to correctly transform numeric array indices
  • Improved the performance of Encode operations
  • Addressed issues with Date setters for years outside of 1900-2100
  • Fixed an issue where reusing a function name as a parameter name threw a syntax error
  • Added the error argument for window.onerror event handlers
  • Improved performance for accessing dictionary properties
  • Updated Proxy.ownKeys to match recent changes to the spec
  • Prevented RegExp unicode parsing from reading an extra character before failing
  • Updated SVGs to report their memory cost to the JavaScript garbage collector
  • Improved the sampling profiler to protect itself against certain forms of sampling bias that arise due to the sampling interval being in sync with some other system process
  • Fixed global lexical environment variables scope for functions created using the Function constructor
  • Fixed parsing super when the default parameter is an arrow function
  • Added support for trailing commas in function parameters and arguments
CSS
  • Added the unprefixed version of the pseudo element ::placeholder
  • Fixed a crash when computing the style of a grid with only absolute-positioned children
  • Fixed computing a grid container's height by accounting for the horizontal scrollbar
  • Fixed placing positioned items on the implicit grid
  • Fixed rendering for the text-decoration-style values: dashed and dotted
  • Fixed support for using border-radius and backdrop-filter properties together
  • Fixed clipping for border-radius with different width and height
  • Fixed CSS reflections for elements with WebGL
  • Fixed CSS reflections for elements with a backdrop-filter property
  • Improved the Document's font selection lifetime in preparation for the CSS Font Loading API
  • Improved memory management for CSS value parsing
  • Improved font face rule handling for style change calculations
  • Fixed multiple selector rule behavior for keyframe animations
  • Fixed applying CSS variables correctly for writing-mode properties
  • Added experimental support for spring() based CSS animations
  • Changed the initial value of background-color to transparent per specs
Web APIs
  • Changed CanvasRenderingContext2D.createPattern() and CanvasRenderingContext2D.putImageData() to throw the correct exception type and align with the specification
  • Fixed a number of issues with Web Workers
Web Inspector
  • Added ⌘T keyboard shortcut to open the New Tab tab
  • Added the ability to show and hide columns in data grid tables
  • Fixed an error when trying to delete nodes with children
  • Added a Top Functions view for Call Trees in the JavaScript & Events timeline
  • Added gaps to the overview and category graphs in the Memory timeline where discontinuities exist in the recording
  • Improved the performance of DOM tree views
  • Fixed filtering to apply to new records added to the data grid
  • Improved snapshot comparisons to always compare the later snapshot to the earlier snapshot no matter what order they were selected
  • Improved performance when processing many DOM.attributeModified messages
  • Fixed the 60fps guideline for the Rendering Frames timeline when switching timeline modes
  • Included the exception stack when showing internal errors in Web Inspector
  • Added ⌘P keyboard shortcut for quick open
  • Removed Text → Content subsection from the Visual Styles Sidebar when not necessary
  • Show <template> content that should not be hidden as Shadow Content
  • Fixed elements in the Elements tab losing focus when selected by the up or down key
  • Enabled combining diacritic marks in input fields in Web Inspector
Media
  • Prevented double-painting the outline of a replaced video element
  • Properly prevented video.play() for video.src="file" with audio user gesture restrictions in place
  • Prevented showing the caption menu if the video has no selectable text or audio tracks
  • Improved performance of HTMLMediaElement.prototype.canPlayType that was accounting for 250–750ms first loading theverge.com
  • Fixed inline media controls to show PiP and fullscreen buttons
Rendering
  • Fixed a repaint issue with vertical text in an out-of-flow container
  • Show text in a placeholder font while downloading the specified font
  • Fixed rendering an SVG in the correct vertical position when no vertical padding is applied, and in the correct horizontal position when no horizontal padding is applied
  • Fixed blending of inline SVG elements with transparency layers
  • Fixed display of hairline borders on 3x displays
  • Prevented flickering and rendering artifacts when resizing the web view
  • Fixed logic to trigger new layout after changing canvas height immediately after page load
Bug Fixes
  • Fixed an issue where Find on Page would show too many matches
  • Exposed static text if form label text only contains static text
  • Added Origin header for CORS requests on preloaded cross-origin resources
  • Added support for the upgrade-insecure-requests (UIR) directive of Content Security Policy
  • Added proper element focus and caret destination for keyboard users activating a fragment URL
  • Increased disk cache capacity when there is lots of free space
  • Prevented hangs during synchronous XHR requests if a network session doesn't exist
  • Fixed the response for a POST request on a blob resource to return a “network error” instead of HTTP 500 response
  • Restricted HTTP/0.9 responses to default ports and cancelled HTTP/0.9 resource loads if the document was loaded with another HTTP protocol
  • Fixed parsing URLs containing tabs or newlines
  • Fixed cookie validation in private browsing
  • Provided memory cache support for the Vary header

Release 6

JavaScript
  • Added support for trailing commas in function parameters per draft ECMAScript spec
  • Improved RegExp matching when the result array becomes large
  • Made RegExp throw an exception instead of a crash when matching deeply nested subexpressions
  • Made TypedArray.prototype.slice no longer throw an exception if no arguments are provided
  • Improved performance of TypedArray access by 30% in the 64-bit low-level interpreter
  • Fixed a regression where String.prototype.replace would fail after being used many times with different replace values
  • Improved integer to float conversion code generation in the B3 JIT Compiler
  • Fixed arrow functions as default parameter values so they capture this properly
CSS
  • Added support for normal keyword value per draft CSS Box Alignment Module Level 3 spec
  • Updated the parsing of CSS Grid’s fixed-size per the draft spec
  • Made elements with backdrop-filter clip when used with clip-path or mask
  • Made changing border-color and border-width on table cells with border-collapse: collapse repaint properly
  • Fixed overflow: hidden so it always repaints clipped content when overflow changes
Web APIs
  • Started allowing empty strings in the FontFace constructor and parse them as if they are omitted
  • Stopped firing a popstate event with a null state when navigating back to a stateless cached page
  • Started allowing custom drag-and-drop even without placing data in the pasteboard
Web Inspector
  • Made the split console stay closed when using Inspect Element context menu item
  • Fixed a regression where CSS properties modified via JavaScript didn’t update in the DOM tree or Styles sidebar
  • Improved garbage collection time by 2x when recording heap snapshots
  • Made heap snapshot views remove objects that have been garbage collected
  • Corrected how transitively dominated objects in heap snapshots display their retained size
  • Made ShadowChicken properly handle when the entry stack frame is a tail deleted frame
  • Added indicators to show nesting levels for DOM elements in the Elements tab
  • Fixed a regression where WebSQL databases were no longer shown in the Storage tab on first open
  • Improved load time of Web Inspector by profiling with Web Inspector
  • Fixed resuming the debugger after breaking on an exception inside a Promise callback
  • Fixed the main resource not showing up in the Debugger tab sidebar after a reload
Media
  • Reduced flicker and jumpiness when entering and exiting fullscreen presentation mode
Bug Fixes
  • Fixed scrolling on iTunes Connect pages
  • Fixed autocorrection so it is easier to type contractions and email addresses
  • Fixed a crash during font download failure after garbage collection
  • Reverted the change to ignore clicks inside button elements when the mouse moves, due to a regression
  • Fixed a regression that broke Zoom In (⌘+) on pages

Release 5

JavaScript
  • Corrected the entropy of Math.random() for the first two invocations
  • Corrected sticky RegExp handling when backtracking alternatives with dissimilar match lengths
  • Fixed ES6 site compatibility when Function.name is inferred from property names
  • Sped up ES6 Array iterators between 4x to 6x
  • Made the Object constructor be aware of new.target by storing the target’s prototype to the newly created object’s prototype
  • Fixed calls to getters and setters on super being called with wrong this object
  • Improved error messages for accessing arguments.callee and similar getters in strict mode
  • Made TypedArray.prototype.slice use the byteLength of passed array for memmove
CSS
  • Fixed the cascading order for !important properties in ::slotted and ::host rules correctly
  • Added color-gamut media query support for wide gamut displays
  • Made Web Fonts only download when characters are used in its unicode-range
  • Restored legacy parsing of color attributes with 4 and 8 digits
  • Corrected how transitions behave when auto values are used
  • Unprefixed -webkit-cross-fade()
  • Corrected cross-fade() rendering to match expectations
  • Corrected how prefixed and unprefixed variants in CSSStyleDeclaration are handled
  • Stopped attempting to compute min/max width for replaced elements with no intrinsic size
  • Unprefixed CSS Grid Layout properties
  • Fixed static position for positioned CSS Grid items
  • Corrected parsing when just using span as a grid-line value
  • Implemented CSS Grid auto-repeat computation
Web APIs
  • Started blocking Geolocation API calls on pages served over insecure connections
  • Made NodeList iterable
  • Added support for title attribute tooltips inside Shadow DOM content
  • Stopped retargeting event.target when an event bubbles up from an assigned node to its assigned slot
  • Enabled IndexedDB in Web Worker scripts
  • Fixed IndexedDB transactions so they can’t be committed or aborted twice
  • Started propagating user gesture state across postMessage boundaries
  • Aligned window.scroll(), scrollTo(), and scrollBy() with the CSSOM spec with support for the options argument
  • Made all scrolling height and width values be integral rounded
  • Added support for ArrayBufferView in the CSS Font Loading API
Web Inspector
  • Hook up ShadowChicken in the Debugger tab to properly show tail call deleted frames
  • Made let and const work as expected in Console evaluations
  • Improved organization of the Debugger tab sidebar
  • Added Object Graph view to heap snapshots and removed the Summary view
  • Fixed sites that relied on putting custom properties on console.prototype
  • Improved performance of filtering large timeline recordings
  • Made Inspect Element and element selection work with Shadow DOM nodes
  • Fixed the start times in the Frames timeline data grid
  • Started persisting breakpoints in scripts named via //# sourceURL
  • Fixed the scrollbar covering the last column in data grids when always showing scrollbars
  • Fixed Computed Style so it no longer shows both prefixed and unprefixed variants of properties
  • Made the Call Trees view in the Timelines tab filterable and hide it from views that are not filterable
  • Started showing in-progress message in timeline views that do not show data until the recording finishes
  • Improved performance of the Console when it tries to render thousands of messages at once
  • Fixed filtering by duration in the Frames timeline view
  • Fixed loading of //# sourceMappingURL with a relative URL
  • Improved console.count() to better match other browsers
  • Improved performance of the Timelines tab by profiling Web Inspector with Web Inspector
Media
  • Made media elements not pause right away when removed from the document
  • Started returning a Promise from HTMLMediaElement.prototype.play()
  • Stopped updating media duration at playback end while seeking
Security
  • Fixed case matching against the path portion of CSP source expression URLs that ends in a forward-slash
  • Corrected a CORS check what was sometimes incorrectly failing for media loads
Networking
  • Stopped restarting a resource preload if there is already one pending for the same URL
Accessibility
  • Media controls are now keyboard accessible along with other Shadow DOM elements
Bug Fixes
  • Fixed large animated GIFs not animating until the last frame on slow networks
  • Fixed Zoom In and Zoom Out on PDF documents

Release 4

Networking
  • Allow non-standard HTTP headers in WebSocket handshakes, which makes the 1Password extension work again
Media
  • Fixed Netflix video playback
JavaScript
  • Disabled Symbol.isConcatSpreadable due to performance concerns; is expected to return in the next release
  • Made super() available to object literals, not just ES6 classes
  • Sped up calling bound functions with no bound arguments by 4x
  • Implemented String.prototype.localeCompare from ECMA-402
  • Optimized JSON.parse for a 1–2.5% improvement in Kraken json-parse-financial
  • Implemented RegExp.prototype.@@replace and use it for String.prototype.replace
  • Implemented spec changes for String.prototype.padStart and String.prototype.padEnd
  • Unified how Math.pow() is optimized across all JIT tiers
  • Made Reflect.toString() be [object Object] not [object Reflect]
CSS
  • Made -webkit-image-set work inside CSS variables
  • Changed transitions to no longer animate to/from auto values
  • Implemented proper handling of animation-delay with a negative delay
  • Started parsing play-state as part of the animation shorthand
  • Made toggling animation-play-state not restart a finished animation
  • Fixed a regression which caused position: absolute pseudo elements to inherit text-decoration
  • Moved CSS Grid behind a runtime switch that is currently enabled by default
  • Started implementation of auto-fill and auto-fit for CSS Grid
  • Fixed computed style of grid-template-columns and grid-template-rows properties
  • Fixed a bug with positioned grid items in vertical writing mode
  • Fixed alignment with CSS Grid content distribution
  • Improved user agent styles for <math> elements
Web APIs
  • Fixed wheel events so they fire with body, html { height: 100% }
  • Marked IndexedDB constructors as hidden on the worker global object until it is supported
  • Made ping attribute for anchor elements only work for http/https URLs
  • Renamed Shadow DOM’s getAssignedNodes to assignedNodes and support flattened option
  • Removed Shadow DOM’s Node.prototype.rootNode because it was not compatible with existing websites
  • Made document.currentScript return null when executing a script inside a shadow tree
  • Fixed clicks sometimes being ignored inside button elements when the mouse moves
Web Inspector
  • Made console a namespace object (like Math and JSON), allowing functions to be called unbound
  • Fixed an issue where scripts would not load due to Esprima.js not being found
  • Started showing dynamically added <script> elements added to a frame as resources
  • Made sourceURL and sourceMappingURL always work when using the Function constructor
  • Restored filtering to the Timelines tab
  • Added column number info to event listener locations
  • Fixed profiles missing from records in JavaScript & Events timeline
  • Fixed selecting a bar in the Frames timeline mode
  • Made sorting by name or location columns work as expected
  • Fixed the line error widget showing up on the wrong resource
  • Clarified Retained Size in heap snapshots by hiding retained size of non-dominated children
  • Made the debugger statements evaluated in the console properly show the source code
  • Made jump to line work correctly the first time in pretty-printed JavaScript
  • Improved scrolling performance in Timelines tab
  • Improved performance of rendering many console messages
  • Changed console.assert and console.trace to allow format specifiers
  • Improved performance of console.assert by 10x when the assertion is true
  • 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
  • Added CSS autocompletion suggestions for -webkit-user-select
Rendering
  • Made non-accelerated CSS and SVG animations run at 60fps
  • Made <select multiple> padding consistent with other browsers
  • Fixed blur filter escaping an enclosing overflow: hidden
  • Fixed a regression with min-content and box-sizing: border-box that affected Facebook’s messenger.com
Accessibility
  • Made VoiceOver properly speak superscript content
  • Fixed navigation around composed emoji characters and content with multiple whitespace sequences
  • Made aria-label attribute work on <label> elements
  • 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
Bug Fixes
  • Corrected how WebKit determines the user’s preferred region from the system language setting.

Release 3

JavaScript
  • Added support for Symbol.isConcatSpreadable per the ES6 spec
  • Made RegExp constructor get the Symbol.match property to decide if an object should be constructed like a RegExp object per the ES6 spec
  • Changed String.match and String.search to use RegExp constructor per the ES6 spec
  • Corrected how function declarations are hoisted per the ES6 spec
  • Improved parsing of ES6 arrow functions
  • Added RegExp.prototype[@@split] and made String.prototype.split use it per the ES6 spec
  • Added RegExp.prototype[@@search]
  • Updated the treatment of invoking methods on RegExp.prototype per the ES6 spec
  • Made more test cases pass with ES6 RegExp unicode flag
  • Added support for caching accesses to arguments.length for a performance speed-up
  • Corrected the behavior of throw() for generators yielding to an inner generator per draft ECMAScript spec
CSS
  • Implemented the functional :host() pseudo class
  • Improved support for SVG cursor images
  • Started using OpenType math fonts by default for MathML
  • Fixed measurement of hanging punctuation
  • Improved hyphenation when the last line in a paragraph only contains one syllable of a word
  • Fixed a layout problem affecting CSS Grid items without a static inline position in RTL languages
  • Fixed positioned items with gaps for CSS Grid
  • Added support for CSS Grid grid-template-columns repeat(auto-fill, …) and repeat(auto-fit, …)
  • Fixed positioned items with content alignment in CSS Grids
  • Started using grid-template-areas to determine the explicit grid
  • Corrected CSS Grid layout by using the margin box for non-auto minimum sizes
Web APIs
  • Added support setting and retrieving Blob values in IndexedDB
  • Corrected MessageEvent.source result once window has been fully created
  • Improved stability when the first child of a shadow root is a comment node
  • Made CSS be a proper constructor on the window object with static functions
  • Exposed the Crypto constructor on the window object
  • Added support for display: contents on <slot> elements
  • Fixed FontFace so it will be properly reject the returned promise if Content Security Policy blocks all the URLs
  • Made FontFaceSet handle null correctly
  • Corrected DOMTokenList.contains() so it does not throw an exception
  • Made Selection.deleteFromDocument not delete a character when the selection is a caret per the spec
  • Improved the IndexedDB bindings to better match the spec
  • Made AudioBufferSourceNode.buffer nullable
  • Improved stability handling a wheel event that closes a frame
Web Inspector
  • Made it possible to expand objects in the Instances heap snapshot view to see what it retains
  • Improved performance dramatically in the Timelines tab when recording pages with a lot of rapid activity and for long recordings
  • Improved JavaScript pretty printing performance by using Esprima and by no longer blocking the main thread
  • Improved the profiler’s sampling rate to get closer to a 1ms sample frequency
  • Improved filtering in Open Quickly dialog
  • Made the Open Quickly dialog keep its resource list up to date
  • Stopped trying to match color patterns in JavaScript source code to improve performance of large resources
  • Changed take snapshot navigation button to a camera glyph
  • Corrected source code location links in the JavaScript profile Call Trees view
  • Made XHRs and Web Workers full-text searchable
  • Improved the appearance of DOM nodes in object previews
  • Improved the tab bar rendering when the tabs are small
  • Corrected dock controls disappearing from the toolbar after leaving fullscreen
  • Started remembering the zoom factor as a persistent setting across sessions
  • Corrected sourceMappingURL not being used when sourceURL was also set
  • Started localizing sizes and times by using Number.prototype.toLocaleString
  • Made sourceMappingURL work more reliably across reloads
Rendering
  • Improved the time to display for some pages — allowing a short page header to render immediately before other content populates later
  • Fixed page tile layers disappearing when graphics acceleration is unavailable
  • Made font-size: 0 render as 0 width when text-rendering: optimizeLegibility is used
  • Corrected focus ring drawing at incorrect location on image map with a CSS transform
  • Made negative letter-spacing affect the right edge of the content’s visual overflow
  • Corrected compositing for WebGL based canvases after they changed size
  • Started clearing the rendered icon on <input type=file> when an empty files list is set
  • Improved performance of border-collapse: collapse on tables
  • Improved rendering of select[multiple] to better match other browsers
  • Fixed backdrop filter so it honors visibility: hidden
Security
  • Made nested browsing context created for <object> or <embed> respect Content Security Policy’s object-src directive
  • Started ignoring Content Security Policy meta tags if it is not a descendent of <head> per the spec
  • Started ignoring report-only Content Security Policy directives delivered via meta tag per the spec
  • Started ignoring paths in Content Security Policy URL matching after redirects per spec
  • Removed support for X-Frame-Options in <meta> per the spec
Networking
  • Stopped speculatively revalidating cached redirects
  • Stopped cacheing responses with Content-Range headers to avoid serving incorrect results
  • Fixed clearing the application cache when removing website data in Privacy preferences
Accessibility
  • Changed the application role description to "web application" to avoid confusion with the top-level system application description
  • Made presentation role be preferred over child <title> and <desc> elements in SVG content

Release 2

Browser Differences
  • Changed the CFBundleSignature to allow Apple Events, like those sent from AppleScript, to correctly distinguish between Safari and Safari Technology Preview
JavaScript
  • Added ES6 support for Symbol.isConcatSpreadable
  • Disallowed var assignments in for-in loops according to ES6 specs
  • Improved stability for ES6 classes when invoking a method of the parent class before calling super() in a constructor
  • Allowed undefined or null for Symbol.search and Symbol.match
  • Enabled Array.prototype native functions' species constructors to work with proxies
  • Implemented the proposal for String.prototype.padStart() and String.prototype.padEnd()
  • Implemented ES6 spec for String.prototype.match and RegExp.prototype[@@match]
  • Included a workaround for web compatibility on ES6 TypeErrors when accessing RegExp.prototype flag properties
  • Corrected quantified unicode regular expressions
  • Ensured greedy unicode regular expressions properly backtrack past non-BMP characters
CSS
  • Implemented the allow-end value of the hanging-punctuation CSS property
  • Improved web compatibility by resetting CSS spacing rules on <math> elements
  • Added the new color-gamut CSS media query
  • Updated screen queries to check the capabilities of the current screen instead of the deepest available screen
Web APIs
  • Restricted WebSockets header parsing according to RFC6455 and RFC7230
  • Improved performance of certain draw calls in WebGL with a non-power-of-two texture optimization
  • Disabled the Fetch API until the implementation is ready to be enabled by default
  • Enhanced Shadow DOM support to compute styles for the style attribute of <slot> elements
  • Softened pushState and replaceState frequency restrictions
Web Inspector
  • Timelines tab performance and bug fixes
  • Disabled debugger statements while profiling a page to ensure maximum performance accuracy
  • Added the ability to configure timeline instruments to use for recordings
  • Added a paint count indicator in the top left corner of non-opaque layers
  • Added font-variant-numeric to CSS autocompletions
  • Added the console.takeHeapSnapshot method for capturing heap snapshots
  • Changed details sidebar shortcuts to Command-Option-0 and Command-Shift-0
  • Double-quotes and backslashes in strings are now displayed correctly in the console
  • Improved the consistency of CSP directive violation messages reported in the console
Accessibility
  • Corrected new lines in content editable elements to notify accessibility
  • Updated the handling of SVG elements with a presentational role to be the same as other host language elements
  • Limited the numbered list announcement for a list item number to the first line of text in the list item
  • Changed the accessibility role descriptions for JavaScript alerts to "web dialog" and "web alert dialog" to make them more understandable to screen reader users
Rendering
  • Updated backdrop filter to repaint when changed in JavaScript
  • Corrected drawing SVG stroke patterns for objects with empty bounding box elements
Media
  • Improved stability when an audio source is changed while being processed
  • Fixed audio track listings
Networking
  • Improved the reliability of speculative disk cache validation requests with the HTTP Referer header
Bug Fixes
  • Fixed autoscrolling in a drag selection when a window is against the screen edge, including while in full screen mode

Release 1

This release of Safari Technology Preview contains the most recent additions and improvements to WebKit and the latest advances in Safari web technologies.

Browser Differences
  • Safari Technology Preview can be run side-by-side with Safari and set as the default browser
  • Separate local data stores are used for history, bookmarks, cookies, and cache
  • Browsing history and bookmarks are synced over iCloud when iCloud sync is enabled
  • The Develop menu is enabled by default
  • Receives regular updates through the Updates tab of the Mac App Store
  • Bug reports made on bugreport.apple.com should specify Safari Technology Preview
JavaScript Improvements
  • ECMAScript 6 support including lexical scoping, iterators, generators, arrow functions, default parameter values and many new built-in APIs
  • Better standards compliant IndexedDB support with more stability
  • Included the B3 JavaScript JIT compiler with low-latency, high-throughput that boosts performance
  • Added the ability to use document.execCommand('copy') and document.execCommand('cut') in response to a user gesture to copy and cut text programmatically
HTML Enhancements
  • The latest implementation of the Shadow DOM specification
  • Added support for Content Security Policy Level 2
Web Inspector Changes
  • Added memory summary and JavaScript allocations timelines
  • Added a fast JavaScript sampling profiler
  • Improved JavaScript profiling timeline view
Behavior Changes
  • Included many web compatibility fixes and bug fixes