# Google Chrome 147 - Product: Google Chrome (https://whatsnew.fyi/product/google-chrome) - Vendor: Google - Date: 2026-04-07 - Version: 147 - Original notes: https://developer.chrome.com/release-notes/147 - Permalink: https://whatsnew.fyi/product/google-chrome/releases/147 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Element.startViewTransition() on arbitrary HTML elements for element-scoped view transitions - **added** — CSS contrast-color() function to meet contrast requirements for accessibility - **added** — Timeline named range scroll feature for view timelines - **added** — CSS border-shape property to create non-rectangular borders with arbitrary shapes - **added** — CSSPseudoElement interface to represent pseudo-elements in JavaScript - **added** — pseudoTarget property on UIEvent, AnimationEvent, and TransitionEvent to indicate pseudo-element interactions - **changed** — border-width, outline-width, and column-rule-width computed values now reflect author-specified values independent of *-style properties - **added** — Support for path attribute on SVG element to define text path geometry inline - **added** — WebXR Plane Detection API to retrieve sets of planes detected in the user's environment Stable release date: April 7th, 2026 Unless otherwise noted, the following changes apply to Chrome 147 stable channel release for Android, ChromeOS, Linux, macOS, and Windows. ##### CSS and UI ###### Element-scoped view transitions Exposes element.startViewTransition() on arbitrary HTML elements. The element establishes a scope for the transition, which means that the transition pseudo-elements are affected by ancestor clips and transforms, and multiple transitions on separate elements can run concurrently. Tracking bug #394052227 | ChromeStatus.com entry | Spec ###### CSS contrast-color() This function helps you meet contrast requirements for accessibility. You can use the contrast-color() function anywhere in CSS where a color value is expected. It takes a color value argument and returns either 'black' or 'white', depending on which provides the highest contrast against the color argument. Tracking bug #40142548 | ChromeStatus.com entry | Spec ###### Timeline named range scroll This feature expands the set of named ranges for view timelines by adding a scroll range to the existing set of entry, exit, cover, and contain. Tracking bug #41483848 | ChromeStatus.com entry | Spec ###### CSS border-shape property The CSS border-shape property lets you create non-rectangular borders with any arbitrary shape, for example, a polygon, circle, or shape(). Although border-shape accepts the same shapes as clip-path, it is fundamentally different. border-shape defines the shape of the border, decorates it, and clips only the inside. border-shape has two variants: one that strokes a shape and another that fills between two shapes. Tracking bug #370041145 | ChromeStatus.com entry | Spec ###### CSSPseudoElement interface The CSSPseudoElement interface represents a pseudo-element in JavaScript. CSSPseudoElement is returned from Element.pseudo(type), where type is currently ::after, ::before, or ::marker. CSSPseudoElement is a proxy object that represents a pseudo-element. Unlike a pseudo-element, a CSSPseudoElement always exists. The CSSPseudoElement has the following attributes and methods: - The type attribute is a string that represents the pseudo-element's type. - The element attribute is the pseudo-element's ultimate originating element. - The parent attribute is the pseudo-element's originating element (either Element or CSSPseudoElement for nested pseudo-elements). - The pseudo(type) method retrieves nested pseudo-elements. Tracking bug #40639103 | ChromeStatus.com entry | Spec ###### Pseudo target on events Specific events now include a .pseudoTarget, which is either CSSPseudoElement (if the interaction was with a pseudo-element) or null. This provides more specific information about the event origin. For example, it indicates that a ::after pseudo-element was clicked, not just the ultimate originating element (Event.target). Note that Event.target remains unchanged, so the event only has extra information about pseudo-element interaction. The events are UIEvent, AnimationEvent, and TransitionEvent. mouseover, mouseout, mouseenter, mouseleave, and their pointer* counterparts are not yet supported. Tracking bug #40639103 | ChromeStatus.com entry | Spec ###### Decouple *-width and *-style properties Chrome 147 aligns with updated CSS specifications for the behavior of the border-width, outline-width, and column-rule-width properties. Previously, if the corresponding border-style, outline-style, or column-rule-style was set to none or hidden, the computed width of these properties was forced to 0px, regardless of the specified value. With this change, the computed values of border-width, outline-width, and column-rule-width always reflect the author-specified values, independent of the *-style property. Additionally, the resolved values (as returned by getComputedStyle()) for outline-width and column-rule-width also reflect the specified values. This change aligns Chrome with Firefox and WebKit, which have already implemented this behavi _[Truncated at 4000 characters — full notes: https://developer.chrome.com/release-notes/147]_