Release Notes for Safari Technology Preview 163

Safari Technology Preview Release 163 is now available for download for macOS Monterey 12.3 or later and macOS Ventura. If you already have Safari Technology Preview installed, you can update in the Software Update pane of System Preferences on macOS Monterey, or System Settings under General → Software Update on macOS Ventura.

This release includes WebKit changes between: 258383@main…259548@main.

Web Inspector

  • General
    • Fixed Web Inspector not remembering which side of the window it was attached to (259320@main)
    • Fixed undocked Web Inspector windows being placed in a different window set from the window they are inspecting when using Stage Manager (258672@main)
  • Elements Tab
    • Fixed the ITAL variation axis slider showing NaN values in the Fonts details sidebar panel (259351@main)
    • Fixed “Inspect Element” not revealing the selected element in the DOM tree if the element was hidden behind the “Show All Nodes” button (258805@main)
  • Timelines Tab
    • Disabled the Screenshots timeline when inspecting targets that can’t support it (259326@main)

Masonry Layout

CSS Custom Properties

  • Added dependency cycle handling that involves root style (258985@main)
  • Added detection for complex custom property cycles involving multiple loops (259506@main)
  • Added handling for computational dependencies in transform functions (259353@main, 259298@main)
  • Changed rules in shadow trees to be ignored (258880@main)
  • Updated CSS custom properties containing var() to update when the referenced property is animated (258786@main)
  • Fixed failing to provide intialValue in registerProperty with non-universal syntax should throw (258909@main)
  • Fixed “<color> | <color>+” to match “yellow blue” (259166@main)
  • Ensured transition-property values fill with a custom property when other transition CSS properties are used with a longer list of items (258770@main)

:has() pseudo-class

  • Added invalidation support for :buffering and :stalled pseudo-classes (258891@main)
  • Made :has() require valid selectors for all selectors in the selector list (258712@main)

Media Queries Level 4

  • Allowed negative values in media queries (258938@main)
  • Made “layer” an invalid media type name (258957@main)


  • Added support for leading-trim (258766@main)
  • Added support for using currentcolor with color-mix() (258970@main, 259145@main)
  • Fixed box-shadow not painting correctly on inline elements (258923@main)
  • Made CSS animations participate in cascade (258514@main)
  • Fixed invalidation for class names within :nth-child() selector lists (258917@main)
  • Fixed focusing an element with scroll snap to not always result in snapping to that element (259381@main)
  • Fixed font-face src list failing early if the component fails (258749@main, 258870@main)
  • Fixed font-face src local() to invalidate CSS-wide keywords (258695@main)
  • Fixed text-decoration-thickness property to always trigger a repaint when changed (258641@main)
  • Fixed overscroll-behavior: none to prevent overscroll when the page is too small to scroll (259227@main)
  • Fixed appearance: slider-vertical to only apply to range inputs (258924@main)
  • Fixed that initial whitespace breaks the query in window.matchMedia() (259357@main)
  • Fixed a bug that Disconnected <fieldset> elements sometimes incorrectly match :valid / :invalid selectors (259422@main)
  • Removed “specified hue” color interpolation method for gradients and color-mix() (259190@main)
  • Stopped requiring whitespace between of and the selector list in :nth-child and :nth-last-child (258703@main)

CSS Typed OM

  • Stopped treating grid-row-start, grid-column-start, grid-row-end, and grid-column-end as list properties (258764@main)


  • Fixed input[type=submit], input[type=reset], and input[type=button] to honor font-size/padding/height and to work with multi-line values (258754@main)


  • Added a guard against zero or negative space shortage (258647@main)
  • Changed the default oblique angle from 20 degrees to 14 degrees to match other browsers (258722@main)
  • Fixed underlines not appearing and disappearing when expected (258914@main)
  • Fixed hairline on selection when bidi text is involved (259537@main)
  • Fixed incorrect paint of translate property animation (259173@main)
  • Fixed incorrect repaint when inline content shrinks vertically (259141@main)
  • Fixed scrolling through content hidden with clip-path not propagating below (259368@main)
  • Fixed margin: auto to be the only rule resolved against the “available width adjusted with intrusive floats” (e.g. percent values are based on container width). (259125@main)
  • Fixed lazy image loading failure when overflow: clip was set on just one axis (259007@main)
  • Fixed scrolling for a fixed header inside overflow scroll with a transformed ancestor (259175@main)
  • Fixed incorrect custom pseudo-scrollbar sizes (259389@main)
  • Improved balancing for border, padding, and empty block content (259246@main)


  • Fixed Atomics.waitAsync to be invocable from the main thread (258856@main)
  • Fixed module scripts to always decode using UTF-8 (259251@main, 259261@main)
  • Fixed toLocaleLowerCase and toLocaleUpperCase to not throw an exception on empty string (259242@main)
  • Optimized Number constructor calls further (259533@main)
  • Optimized WebAssemblyInstance#exports (259017@main)
  • Updated Intl.DurationFormat to align with updated standards (259317@main)


Gamepad API

  • Added support for vibrationActuator (258680@main)
  • Added experimental support for “trigger-rumble” effect type behind a feature flag (259507@main)
  • Fixed GamepadHapticActuator.playEffect() with a magnitude less than 0.1 having no effect (258874@main)
  • Fixed how magnitude values passed to GamepadHapticActuator.playEffect() (258988@main)
  • Made gamepad.vibrationActuator.playEffect() throw for invalid effect parameters (258752@main)
  • Made vibrationActuator limit the duration of vibration effects (258759@main)
  • Made vibrationActuator stop vibrating when its document becomes hidden (258802@main)
  • Made Gamepad.vibrationActuator work with the GameController framework (258674@main)
  • Made Gamepad.vibrationActuator return null when the gamepad doesn’t support dual-rumble (258812@main)
  • Set Gamepad.vibrationActuator.type to “dual-rumble” (258758@main)


  • Enabled default ARIA for custom elements (258743@main)
  • Implemented StorageManager.estimate() (258610@main)
  • Added support for Ed25519 keys to Web Crypto (259277@main, 259489@main)
  • Changed queryCommandValue("stylewithcss") to always return an empty string (258777@main)
  • Disabled DOMParser’s support for declarative shadow DOM (258768@main)
  • Fixed a bug that FileSystemSyncAccessHandle’s close function throws an exception on the second call (258736@main)
  • Fixed data written via FileSystemSyncAccessHandle disappearing after creating a new FileSystemFileHandle (258876@main)
  • Fixed negative shadow repaint issue (259497@main)
  • Fixed getting input.value for number inputs with over 39 characters returning an empty string (258614@main)
  • Fixed right-to-left tab handling (259428@main, 259460@main)
  • Fixed Clear-Site-Data HTTP header to obey origin partitioning (259466@main)
  • Fixed a bug that a new SharedWorker will be dysfunctional after the old one terminated via SharedWorkerGlobalScope.close() (259228@main)
  • Fixed a bug that HTMLSelectElement’s value setter sets incorrect values if there are grouped options (259249@main)
  • Fixed stripping of leading slashes in URL.hostname setter (259366@main)
  • Fixed a bug that formDisabledCallback() is sometimes called even when disabledness hasn’t changed (259372@main)
  • Made autofilling form to trigger input event in addition to change event (259434@main)
  • Moved oncopy, oncut, and onpaste to GlobalEventHandlers (258390@main)
  • Removed the precision="float" attribute on <input type="range"> (258625@main)
  • Removed HTMLHeadElement.profile (258397@main)
  • Removed HTMLPreElement.wrap (258445@main)
  • Removed SVGFEMorphologyElement.setRadius(radiusX, radiusY) (258733@main)
  • Removed HTMLFrameElement.location (259067@main)
  • Updated Content Security Policy when the header is sent as part of a 304 response (258931@main)


  • Enabled WEBGL_provoking_vertex by default (259499@main)


  • Fixed rotate: x and transform: rotate(x) yielding different behavior with SVG (258882@main)
  • Fixed SVG textLength (258921@main)
  • Handled animation freeze when repeatDur is not a multiple of dur (259212@main)
  • Fixed the bug that SVG sometimes doesn’t repaint when resolving color changes (259082@main)
  • Fixed computing the keyTimes index correctly for discrete values animations (258939@main)


  • Fixed page scrolling more than one screenful when pressing Space or Fn+Down (259146@main)


  • Enabled AudioSession API by default with a reduced subset (259074@main)
  • Moved Media Source API settings back into the Experimental Features (258853@main)
  • Changed to try using low latency for the WebRTC HEVC encoder, if available (259128@main)
  • Fixed HLS videos sometimes failing to reach “ended” state and not able to be restarted (259342@main)
  • Fixed MediaStreamTrack ending due to a capture failure when using bluetooth headsets (259150@main)
  • Fixed AudioBufferSourceNode.start with a duration sometimes failing (259234@main)
  • Fixed duplicate timeupdate events in Text Track Code (259023@main)
  • Fixed a bug that video element pauses after bluetooth audio input is disconnected (259415@main, 259478@main)
  • Updated MediaController.currentTime to return the previously set position (259020@main)


  • Fixed aria-controls to be exposed as AXLinkedUIElements and not AXARIAControls (258922@main)
  • Fixed VoiceOver when selecting “Sign in with Apple” on some websites (259147@main)


  • Fixed the Shift modifier key not applying to typed text (259039@main)

Safari Web Extensions

  • Added support for support setExtensionActionOptions() in the declarativeNetRequest API
  • Changed declarativeNetRequest rules to default to false for isUrlFilterCaseSensitive
  • Increased data limit to 10MB
  • Fixed :has() selector for Safari Content Blockers (259068@main)