Chrome 145 beta

Published: January 14, 2026

Unless otherwise noted, the following changes apply to the newest Chrome beta channel release for Android, ChromeOS, Linux, macOS, and Windows. Learn more about the features listed here through the provided links or from the list on ChromeStatus.com. Chrome is beta as of January 14, 2026. You can download the latest on Google.com for desktop or on Google Play Store on Android.

CSS and UI

Support the text-justify CSS property

Developers can control how text is justified when text-align: justify is applied by using the text-justify property. For example, forcing justification by expanding inter-character space, even in English text.

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

This improvement 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 produces 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 now 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.

Column wrapping for CSS multi-column layout

From Chrome 145 the column-wrap and column-height properties are supported in multi-column layout. These properties let you wrap columns onto a new row in the block direction.

Prior to Chrome 145, if the height of the multicol container was restricted, content that didn't fit into the available space would appear as overflow columns in the inline direction. This would create a horizontal scrollbar on the web. With the column-height and column-wrap properties you can set a height for the row of columns and set the overflow columns to appear as a new row.

Find out more in Support for wrapped columns in multi-column layout.

Expose onanimationcancel event to GlobalEventHandlers

CSS Animations Level 1 extends the GlobalEventsHandler Interface defined in the HTML specification, declaring four new event handlers: onanimationstart, onanimationiteration, onanimationend and onanimationcancel.

The onanimationcancel event handler was missing from the GlobalEventsHandler IDL, and is now exposed.

CSS letter-spacing and word-spacing: percentage values

Enables percentage values for the letter-spacing and word-spacing CSS property, 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 gives developers more robust and flexible control over typography, particularly in responsive designs where text spacing needs to adapt to different viewports and font sizes.

Customizable select listbox

This feature extends customizable select support to the listbox rendering mode, including single-select and multi-select in listbox mode.

The listbox rendering mode means that the <select> element is rendered in-flow or in the page rather than with a separate button and popup. Listbox rendering mode is opted into across platforms through the multiple or size attributes, like <select multiple> or <select size=4>. When the appearance:base-select CSS property is applied to the <select> element with these attributes, it will now have improved rendering and input behavior.

This feature does not support customizable select for the multi-select popup, which will come later. The following attributes must be set to get a multi-select popup: <select multiple size=1>.

Enable monochrome emoji rendering in forced colors mode.

This change updates the emoji rendering behavior in Forced Colors Mode in Chrome. During computed-value resolution, emoji whose font-variant-emoji value computes to normal or unicode are rendered using their monochrome glyphs when available.

Chrome will therefore suppress color emoji rendering, which ensures emoji fully participate in the Forced Colors Mode pipeline and respect system high-contrast colors. Behavior outside forced colors mode is unchanged.

The focusVisible option on the focus() method

When calling the focus() method, developers can now supply a focusVisible boolean in the FocusOptions dictionary. When true, a focus ring will always be painted around the newly-focused element and it will match the :focus-visible pseudo-class. When false, the focus ring won't be painted and :focus-visible won't 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.

Overscroll effect on non-root scrollers

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.

Show true window position on Android

Chrome on Android now accurately reports the browser window's position and size using window.screenX, window.screenY, window.outerWidth, and window.outerHeight.

Previously, Chrome incorrectly assumed all browser windows on Android start at coordinates (0, 0). This is inaccurate for Android tablets using freeform windowing mode, causing websites to always receive 0 when querying the window's on-screen position using window.screenX and window.screenY (these fields store the coordinates of 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.

Web APIs

Prior to Chrome 145, 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.

WebGPU: subgroup_uniformity feature

Adds a new scope to the uniformity analysis and changes which parts of the language are checked in each to allow subgroup functionality to be considered uniform in more cases.

Upsert

Implements the ECMAScript proposal for Map.prototype.getOrInsert, Map.prototype.getOrInsertComputed, WeakMap.prototype.getOrInsert, and WeakMap.prototype.getOrInsertComputed.

InputEvent types for deletion commands on non-collapsed selections

Reports accurate inputType values for deletion keyboard shortcuts on selected text. When deletion commands like Control+Backspace or Control+Delete are used with selected text in contenteditable elements, the beforeinput and input events now report deleteContentBackward or deleteContentForward instead of deleteWordBackward or deleteWordForward. This lets web developers correctly understand what editing operation occurred and implement reliable undo and redo or custom editing behaviors.

Lets callers 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.

Secure Payment Confirmation: Browser Bound Keys

Adds an additional cryptographic signature over Secure Payment Confirmation assertions and credential creation. The corresponding private key is not synced across devices. This helps web developers meet requirements for device binding for payment transactions.

Sticky activation for the clipboardchange event

Chrome now requires sticky user activation or clipboard-read permission to fire clipboardchange events, preventing unauthorized clipboard monitoring. This change is as defined in the Clipboard API specification.

Expose rtpTimestamp from WebRTC video frames using VideoFrame.metadata()

Adds a VideoFrame.metadata() method that returns a dictionary containing the rtpTimestamp field, if the underlying VideoFrame has this field in its metadata. An empty dictionary is returned otherwise. Only video frames originating from WebRTC sources will have the rtpTimestamp metadata attached.

Let web applications understand bimodal performance timings

Web applications might suffer from bimodal distribution in page load performance due to factors outside of the application's control. For example, when a user agent first launches in a "cold start" scenario, it must perform many expensive initialization tasks that compete for system resources. Browser extensions can also affect performance, since some extensions run additional code on every page you visit, increasing CPU usage and slowing response times. Likewise, when a machine is already busy with intensive tasks, web pages might load more slowly as a result.

In these scenarios, content the web app attempts to load will be in competition with other work happening on the system. This makes it difficult to detect if performance issues exist within web applications themselves, or because of external factors.

A new confidence field on the PerformanceNavigationTiming object lets developers discern if the navigation timings are representative for their web application.

Add presentationTime and paintTime to performance entries

Expose paintTime and presentationTime in element timing, LCP, long animation frames, and paint timing.

paintTime means the time when the rendering phase ended and the browser started the paint phase. presentationTime means the time when the "pixels reached the screen", which is somewhat implementation-defined. See LCP and INP are now Baseline Newly available.

Use of CSS pixels in the LayoutShift API

This feature changes the attribution data (prevRect and currentRect) in the LayoutShift API to be reported in CSS pixels instead of physical pixels. The current behavior is inconsistent with other layout-related APIs, which all use CSS pixels. This change improves consistency, simplifies usage for developers, and aligns with expected units in debugging and tooling.

Note that this does not impact the CLS metric value, but does affect debugging tools showing screenshots and images of those shifts.

Device Bound Session Credentials (DBSC)

A way for websites to securely bind a session to a single device.

It lets servers have a session that is securely bound to a device. The browser renews the session periodically as requested by the server, with proof of possession of a private key.

Local Network Access split permissions

This is an enhancement to the Local Network Access (LNA) restrictions, where we split the permission required from one Local Network Access permission, into two separate permissions.

Old permission: local-network-access

New Permissions:

  • local-network: for LNA requests to IPs in the local address space.
  • loopback-network: for LNA requests to IPs in the loopback address space.

The old permission is kept as an alias and should continue to work for permissions.query and Permissions Policy. Current enterprise policies will continue to work the same; newer more granular enterprise policies will be added at a later point in time.

The Origin API

The origin is a fundamental component of the web's implementation, essential to both the security and privacy boundaries which user agents maintain. The concept is well-defined between HTML and URL, along with widely-used adjacent concepts like site.

Origins, however, are not directly exposed to web developers. Though there are various origin getters on various objects, each of those returns the ASCII serialization of an origin, not the origin itself. This has a few negative implications. Practically, developers attempting to do same-origin or same-site comparisons when handling serialized origins often get things wrong in ways that lead to vulnerabilities. Philosophically, it seems like a missing security primitive that developers struggle to polyfill accurately.

The Origin API addresses this gap in the platform by introducing an origin object that encapsulates the origin concept, and provides helpful methods for comparison, serialization, and parsing.

Sanitizer API

The Sanitizer API provides a way for developers to remove content that may execute script from arbitrary, user-supplied HTML content. The goal is to make it easier to build XSS-free web applications.

Trusted Types specification alignment

Trusted Types was originally implemented and launched in Chrome in 2019.

The Trusted Type specification is now being implemented in other browsers. As part of that process, various inconsistencies are being identified and fixed in the specification. This release fixes these issues in Chrome to align with the new specification.

New origin trials

In Chrome 145 you can opt into the following new origin trials.

WebAudio: Configurable render quantum

AudioContext and OfflineAudioContext now take an optional renderSizeHint, which lets users ask for a particular render quantum size when an integer is passed, to use the default of 128 frames if nothing or default is passed, or to ask the User-Agent to pick a good render quantum size if hardware is specified.

Deprecations and removals

This version of Chrome introduces the following deprecations and removals. Visit ChromeStatus.com for lists of planned deprecations, current deprecations and previous removals.

Chrome removes support for obsolete virtual cameras on macOS

From Chrome 145, support is removed for obsolete virtual cameras for all macOS releases that it supports.

On macOS, modern virtual cameras are built using the Core Media IO framework, which has been available since macOS 12.3. Apple has performed outreach, and all modern virtual camera software has been migrated to use this Core Media IO framework.

Obsolete virtual cameras, built as DAL plugins, have been blocked by macOS itself starting with macOS 14.1 (2023), and have been unsupported in Safari since 2018, if not earlier.

Remove BMP Extension for Embedding JPEG-or-PNG-in-BMP

Chrome is removing the BMP extension for embedding JPEG-or-PNG-in-BMP as no other browsers support this extension, and it has no use (as registered using UMA data).

Reduced User-Agent strings by default

Starting in Chrome 145, the UserAgentReduction policy will be completely removed. This policy was previously 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 now 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.

From Chrome 145 onwards, the UserAgentReduction policy will have no effect. Chrome will send a reduced User-Agent string by default. Systems or applications that relied on this policy to receive the full (legacy) User-Agent string may no longer receive the detailed information they expect.