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,
<select multiple> or <select size=4>. 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: <select multiple size=1>.
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.
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.
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.
Tracking bug #436880911 | ChromeStatus.com entry | Spec
Performance
Let web applications understand bimodal performance timings
A new confidence field on the PerformanceNavigationTiming object lets you
discern whether the navigation timings are representative for your web
application.
Tracking bug #1413848 | ChromeStatus.com entry | Spec
Add presentationTime and paintTime to performance entries
This exposes 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.
This feature entry omits event timing, which is done separately.
Tracking bug #378827535 | ChromeStatus.com entry | Spec
Use of CssPixels in 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 behavior is inconsistent with other
layout-related APIs, which all use CSS pixels. This change improves consistency,
simplifies usage for you, and aligns with expected units in debugging and
tooling.
Tracking bug #399058544 | ChromeStatus.com entry | Spec
Security
Device Bound Session Credentials
Device Bound Session Credentials (DBSC) lets websites bind a user's session to their specific device, making it significantly harder for stolen session cookies to be used on other machines.
The Origin API
The origin is a fundamental component of the web's implementation, essential to both the security and privacy boundaries that 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 you. 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, you 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 you struggle to polyfill accurately.
In Chrome 145, Chrome addresses this gap in the platform by introducing an
Origin object that encapsulates the origin concept and provides helpful
methods such as comparison, serialization, and parsing.
Tracking bug #434131026 | ChromeStatus.com entry | Spec
Local Network Access split permissions
This is an enhancement to the Local Network Access (LNA) restrictions, where Chrome splits the permission required from one Local Network Access permission into two separate permissions.
The old permission is local-network-access. The new permissions are
local-network (for LNA requests to IPs in the local address space) and
loopback-network (for LNA requests to IPs in the loopback address space).
The old permission is kept as an alias and continues to work for
permissions.query and Permissions Policy. Enterprise policies continue to
work the same; newer, more granular enterprise policies are added later.
Tracking bug #465491626 | ChromeStatus.com entry | Spec
Trusted Types specification alignment
Trusted Types was originally implemented and launched in Chromium in 2019 and
has since found use in numerous websites. It has recently gained interest from
other browser vendors.
The Trusted Types spec was co-written as a "monkey patch" spec along with the
original implementation. It receives fresh attention as others are trying to
implement the same spec. It has been "upstreamed" into HTML + DOM (plus a bit of
CSP). As part of that process, various inconsistencies are being identified and
fixed. Some of these fixes might be developer observable. The intent is to
update the implementation to match the spec as it is upstreamed into HTML.
Meanwhile, WebKit has launched their implementation of the updated Trusted
Types spec, which gives Chrome high confidence that this update is highly web
compatible.
Tracking bug #330516530 | ChromeStatus.com entry | Spec
Graphics
WebGPU: subgroup_uniformity feature
This adds a new scope to the uniformity analysis and changes which parts of the language are checked in each to enable subgroup functionality to be considered uniform in more cases.
Tracking bug #454653380 | ChromeStatus.com entry | Spec
Isolated Web Apps
WebRequest.SecurityInfo in Controlled Frame
This feature introduces a WebRequest.SecurityInfo API for
ControlledFrame. It lets a web app intercept an
HTTPS, WSS, or WebTransport request to a server, retrieve the server's
certificate fingerprint (as verified by the browser), and then use that
fingerprint to manually verify the certificate of a separate raw TCP/UDP
connection to the same server. This provides a method for the app to confirm
it's communicating with the correct server.
Tracking bug #462114142 | ChromeStatus.com entry | Spec
Origin trials
JPEG XL decoding support (image/jxl) in blink
Adds support for decoding JPEG XL (image/jxl) images in Blink using jxl-rs,
a memory-safe pure Rust decoder.
JPEG XL is a modern image format standardized as ISO/IEC 18181 that offers:
- Progressive decoding for improved perceived loading performance.
- Support for wide color gamut, HDR, and high bit depth.
- Animation support.
This implementation uses jxl-rs instead of the C++ libjxl reference decoder to
meet Chromium's memory safety requirements. The decoder is gated behind the
enable-jxl-image-format flag and enable_jxl_decoder build flag.
WebAudio: Configurable render quantum
AudioContext and OfflineAudioContext now take an optional renderSizeHint,
which allows users to 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.
Origin Trial | ChromeStatus.com entry
Deprecations and removals
Remove support for obsolete virtual cameras on macOS
Chrome removes support for obsolete virtual cameras for all macOS releases that it supports.
Tracking bug #461717105 | ChromeStatus.com entry
Remove BMP Extension for Embedding JPEG-or-PNG-in-BMP
Chrome removes the BMP extension for embedding JPEG-or-PNG-in-BMP.