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
Navigation API: expose destination in navigation.transition
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.
Cookie Store API maxAge attribute
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.