Google Chrome 145

145
Added 7
  • Support for the text-justify CSS property to control how text is justified when text-align: justify is applied
  • Enable percentage values for the letter-spacing and word-spacing CSS properties, calculated relative to the advance measure of the space character
  • Support for the column-wrap and column-height CSS properties from multicol Level 2, enabling vertical and 2D column layout with explicit constrained height
  • Expose onanimationcancel event handler to GlobalEventHandlers
  • Extend customizable select support to the listbox rendering mode for single-select and multi-select using the multiple or size attributes
  • Support focusVisible option on the focus() method to control whether a focus ring is painted
  • Show elastic overscroll effects on non-root scroll containers when they reach their scroll boundary
Changed 3
  • Refine border-radius shadow edge computation for high border-radius to ensure shadows and clip boundaries on near-circular elements precisely match the visual contour
  • Enable monochrome emoji rendering in forced colors mode to ensure emojis respect system high-contrast colors
  • Accurately report the browser window's position and size on Android using window.screenX, window.screenY, window.outerWidth, and window.outerHeight instead of assuming all windows start at (0, 0)

Stable release date: February 10th, 2026 Unless otherwise noted, the following changes apply to Chrome 145 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI
Add support for the text-justify CSS property

You can control how text is justified when text-align: justify is applied by using the text-justify property. For example, you can force justification by expanding inter-character space even in English text. Tracking bug #40321528 | ChromeStatus.com entry | Spec

Enable percentage values for CSS letter-spacing and word-spacing properties

Enable percentage values for the letter-spacing and word-spacing CSS properties, as defined in the CSS Text Module Level 4 specification. Percentage values are calculated relative to the advance measure of the space character (U+0020). This provides you with more robust and flexible control over typography, particularly in responsive designs where text spacing needs to adapt to different viewports and font sizes. Tracking bug #327740939 | ChromeStatus.com entry | Spec

Refine border-radius shadow edge computation for high border-radius

This change ensures that shadows and clip boundaries on near-circular elements (where border-radius is close to 50%) precisely match the visual contour of the curved edge. This provides a more consistent rendering of complex rounded shapes, eliminating visual discrepancies for high radius values. The border-radius adjustment factor, which ensures corners appear sharp for small radii, is progressively dampened as the radius value approaches 50%. This also applies to non-round contours (using corner-shape), which now use the same radius adjustment mechanism. Tracking bug #448651073 | ChromeStatus.com entry | Spec

Column wrapping for multicol

Add support for the column-wrap and column-height CSS properties, from multicol Level 2. This enables vertical column layout, or even 2D column layout. Columns can have an explicit constrained height, rather than being derived from the content-box height of the multicol container. They wrap to a new row of columns when all columns have been filled for one row, instead of creating overflowing columns in the inline direction. Tracking bug #403183884 | ChromeStatus.com entry | Spec

Expose onanimationcancel event to GlobalEventHandlers

The CSS Animations Level 1 extends the GlobalEventHandlers interface defined in the HTML specification, declaring four new event handlers: onanimationstart, onanimationiteration, onanimationend, and onanimationcancel. Only the onanimationcancel event handler has been missing from the GlobalEventHandlers IDL. Tracking bug #464010037 | ChromeStatus.com entry | Spec

Customizable select listbox

This extends customizable select support to the listbox rendering mode, including single-select and multi-select in listbox mode. The listbox rendering mode renders the select element in-flow or in the page, rather than with a separate button and popup. You can opt into listbox rendering mode across platforms using the multiple or size attributes, for example, or . When the appearance: base-select CSS property is applied to the select element with these attributes, it has improved rendering and input behavior. This does not support customizable select for the multi-select popup, which will be supported later. You must set the following attributes to get a multi-select popup: . Tracking bug #357649033 | ChromeStatus.com entry | Spec

The focusVisible option on focus

When calling the focus() method, you can supply a focusVisible boolean in the FocusOptions dictionary. When true, a focus ring is always painted around the newly-focused element, and it matches the :focus-visible pseudo-class. When false, the focus ring is not painted, and :focus-visible does not match. When missing, the user agent makes its own determination as to whether the focus ring should be painted, and the :focus-visible pseudo-class matches accordingly. Tracking bug #462191849 | ChromeStatus.com entry | Spec

Enable monochrome emoji rendering in forced colors mode.

This change updates Chromium's emoji rendering behavior in Forced Colors Mode. During computed-value resolution, emoji whose font-variant-emoji value computes to normal or unicode are rendered using their monochrome glyphs when available. Chromium therefore suppresses color emoji rendering, which ensures emojis fully participate in the Forced Colors Mode pipeline and respect system high-contrast colors. Behavior outside Forced Colors Mode is unchanged. Tracking bug #420857717 | ChromeStatus.com entry | Spec

Overscroll effect on non-root scrollers

This shows elastic overscroll effects on non-root scroll containers. When a nested scrollable element reaches its scroll boundary, the overscroll affordance applies to that element instead of only the root scroller. This reduces the need for custom JavaScript workarounds and can be controlled per element with overscroll-behavior. Tracking bug #41102897 | ChromeStatus.com entry | Spec

Capabilities
Show true window position on Android

Chrome on Android accurately reports the browser window's position and size using window.screenX, window.screenY, window.outerWidth, and window.outerHeight. Chrome previously incorrectly assumed that all browser windows on Android start at coordinates (0, 0). This assumption is inaccurate for Android tablets that use freeform windowing mode. Websites always received 0 when querying the window's on-screen position using window.screenX and window.screenY. These fields store the coordinates of the window's top-left corner in global work area coordinate space. Moreover, Chrome on Android incorrectly assumed that outer dimensions of the browser window are equal to the inner dimensions of the website viewport. window.screenX and window.screenY have aliases: window.screenLeft and window.screenTop. Tracking bug #417632037 | ChromeStatus.com entry | Spec

JavaScript
Upsert

This is an ECMAScript proposal for Map.prototype.getOrInsert, Map.prototype.getOrInsertComputed, WeakMap.prototype.getOrInsert, and WeakMap.prototype.getOrInsertComputed. Tracking bug #434977728 | ChromeStatus.com entry | Spec

Crash Reporting key-value API

A new key-value API, window.crashReport, is backed by a per-Document map holding data that Chrome appends to crash reports. The data placed in this API's backing map is sent in the CrashReportBody if any renderer process crashes are incurred by the site. This lets you debug what specific state in your application might be causing a given crash. Tracking bug #400432195 | ChromeStatus.com entry | Spec

Reduced User-Agent strings by default

Starting in Chrome 145, Chrome removes the UserAgentReduction policy. This policy was available to control whether Chrome sent a reduced or full User-Agent string. To enhance user privacy and reduce passive tracking capabilities, Chrome began reducing the information contained in the User-Agent header by default in Chrome version 110. The UserAgentReduction policy was provided as a temporary measure for enterprises to manage this transition. The recommended mechanism for websites to access browser and device information is User-Agent Client Hints (UA-CH). UA-CH requires websites to actively request specific information, which is a more privacy-preserving approach than the legacy User-Agent string. For more information, see the web.dev article, Migrate to User-Agent Client Hints. From Chrome 145 onwards, the UserAgentReduction policy has no effect. Chrome sends a reduced User-Agent string by default. Systems or applications that relied on this policy to receive the full (legacy) User-Agent string might no longer receive the detailed information they expect. ChromeStatus.com entry

Navigation API: expose destination in navigation.transition

NavigationTransition has a from property, exposing the old URL of the navigation. Exposing to (a NavigationDestination) completes this. It is especially useful when using precommit handlers, as during precommit the current URL has not yet switched to the destination. navigation.transition is only exposed for intercepted navigations—which means same-origin document-initiated navigations. Tracking bug #447171238 | ChromeStatus.com entry | Spec

Secure Payment Confirmation: Browser Bound Keys

This adds an additional cryptographic signature over Secure Payment Confirmation assertions and credential creation. The corresponding private key is not synced across devices. This helps you meet requirements for device binding for payment transactions. Tracking bug #377278827 | ChromeStatus.com entry | Spec

Secure Payment Confirmation: UX Refresh

Updates the UX elements for the SPC dialog on Android Chrome. In addition to UX presentation, the following are added:

  • Merchants can provide an optional list of payment entity logos related to the payment that are displayed in the UX.
  • Different output states are returned to the merchant depending on whether the user wants to continue the transaction without SPC or to cancel the transaction. Only a single output state is sent for both cases.
  • A new payment detail label field is added to the payment instrument so the text is presented across two lines in SPC. Tracking bug #405173922 | ChromeStatus.com entry | Spec
Cookie Store API maxAge attribute

You can specify a maxAge when setting a cookie with the Cookie Store API. Cookie expiry time is already configurable using the expires attribute, but maxAge provides a more idiomatic option and aligns the Cookie Store API with the options provided by document.cookie and the Set-Cookie HTTP Header. Tracking bug #430926231 | ChromeStatus.com entry | Spec

InputEvent types for deletion commands on non-collapsed selections

This reports accurate inputType values for deletion keyboard shortcuts on selected text. When deletion commands like Ctrl+Backspace or Ctrl+Delete are used with selected text in contenteditable elements, the beforeinput and input events report deleteContentBackward or deleteContentForward instead of deleteWordBackward or deleteWordForward. This lets you correctly understand what editing operation occurred and implement reliable undo, redo, or custom editing behaviors. Tracking bug #41423062 | ChromeStatus.com entry | Spec

Sticky activation for the clipboardchange event

This requires sticky user activation or clipboard-read permission to fire clipboardchange events, preventing unauthorized clipboard monitoring. The clipboardchange event is relatively new (Chrome 144), and this has minimal web-facing change. In most cases, sticky user activation or clipboard-read permission is already present where clipboard monitoring occurs (for example, in remote desktop clients). Tracking bug #468821937 | ChromeStatus.com entry | Spec

Multimedia
Expose rtpTimestamp from WebRTC video frames with VideoFrame.metadata()

Adds a VideoFrame.metadata() method that returns a dictionary containing the rtpTimestamp field, if the underlying VideoFrame has this field in its native metadata. An empty dictionary is returned otherwise. Only video frames originating from WebRTC sources have the rtpTimestamp metadata attached. Additional metadata fields are already present in the native implementation and might be exposed to JavaScript over time, as outlined in the proposed spec. ChromeStatus.com entry | Spec

Storage
IndexedDB: SQLite backend (in-memory contexts)

Chromium's IndexedDB implementation has been rewritten on top of SQLite, to replace the previous implementation that uses a hybrid of LevelDB and flat files. There is no change to the Web API. This improves reliability and, to a lesser extent, performance. This is applied only to in-memory contexts such as Incognito mode in Chromium and Google Chrome. This limits the impact of any new bugs and defers the need to migrate existing data persisted to disk. …

View original

Upgraded? How did it go?

Discussion