Version article

Download 146.0.7680.165 from the Chrome Stable for Windows 64-bit

Download Google Chrome 146.0.7680.165 with the branch, platform, release date, and file size shown clearly on the same page.

Stable Windows 64-bit Published 2026-03-24
Version 146.0.7680.165
Release date 2026-03-24
Platform Windows 64-bit
File size 182.35MB
Quick facts

What users usually want to know first

Branch Stable
Clicks

What changed in Chrome 146.0.7680.165

Google Chrome 146.0.7680.165 is available here as part of the Windows 64-bit Stable archive. Use this release page when you want the exact version, the current package details, and quick access to the correct installer.

Stable release date: March 10th, 2026

Unless otherwise noted, the following changes apply to Chrome 146 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI

Scroll-triggered animations

This feature adds scroll-position-based control of animations, for example, playing, pausing, and resetting animations.

A common pattern on pages across the web is to start an animation when a scroll position is reached. Developers often do this by using JavaScript to manually detect that an element is within its scroll container's viewport and to start a corresponding animation (for example, sliding that element into view). Many of these use cases rely on declaratively provided information. This feature lets you create such interactions declaratively with CSS, which lets the user agent offload this interaction to a worker thread. The API also includes JavaScript interfaces that let you extend the feature to web animations in addition to CSS animations.

The trigger-scope property

The trigger-scope property lets you limit the names of animation triggers declared by trigger-instantiating properties.

Trigger-instantiating properties, for example, timeline-trigger, declare names that the animation-trigger property can reference to attach animations to triggers. However, these names are global by default (similar to anchor-name), and it is often useful to limit the visibility of the names to isolate animation-to-trigger interactions.

meta name="text-scale"

The root element's default font size scales in proportion to both the operating system's and browser's text scale setting. This lets pages that follow best practices around font-relative units (that is, use rem and em for font sizes and page elements that adapt to user text size preferences) respect the user's OS-level text scale setting. This also disables existing browser-based mechanisms (that is, full-page zoom on windows) and heuristics (that is, text autosizing on mobile). You can signal to the browser that the page is constructed in a way (that is, with rem and em) that scales well across various user-selected font size preferences. Similar to env(preferred-text-scale), which provides a way to access the text scale, this API extends this by enabling scaling using the root element's default font size and opting out of automatic text scaling.

Scoped custom element registry

This feature lets multiple custom element definitions for a single tag name exist within a page. This prevents custom element name conflicts when a web app uses libraries from multiple sources. This is achieved by allowing user code to create multiple custom element registries and associate them with tree scopes and elements that function as scoping objects.

Capabilities

Populate targetURL during file handling

The Launch Handler implementation now ensures LaunchParams.targetURL is populated when a PWA is launched with file handling. Before this change, the property was null when a file launch was directed to an existing window. This change ensures that the URL from the manifest action field (the same URL the document must currently load) is available to the launchQueue consumer.

Stop re-queueing LaunchParams on reload

Prevent the launchQueue from re-sending the last LaunchParams (including file handles) when a user reloads the page. Previously, a page refresh triggered the launch consumer again with the data from the original launch. This change ensures that a reload is treated as a standard navigation rather than a "re-launch," and the launchQueue won't be populated with duplicate files unless a new file launch event occurs.

DOM

Navigation API: add post-commit handler from precommit

When intercepting navigations with the navigate event, precommitHandlers and post-commit ordinary handlers are passed separately.

This works well when there is only one or the other, but can be cumbersome when the flow includes a precommitHandler that leads to a post-commit handler.

This addition is a small ergonomic improvement that lets you register a post-commit handler while invoking a precommit handler.

Graphics

WebGPU: Texture and Sampler Lets

Add a language feature to WGSL, texture_and_sampler_let, that lets you store texture and sampler objects into a let declaration in WGSL.

WebGPU: Transient attachments

This feature adds functionality to the WebGPU spec after its first shipment in a browser.

A new TRANSIENT_ATTACHMENT GPUTextureUsage lets you create attachments that let render pass operations stay in tile memory, avoiding VRAM traffic and potentially avoiding VRAM allocation for the textures.

WebGPU Compatibility mode

This mode adds an opt-in, lightly restricted subset of the WebGPU API that can run older graphics APIs, for example, OpenGL and Direct3D11. By opting into this mode and obeying its constraints, you can extend the reach of your WebGPU applications to many older devices that don't have the modern, explicit graphics APIs that core WebGPU requires. For simple applications, the only required change is to specify the compatibility featureLevel when calling requestAdapter. For more advanced applications, some modifications might be necessary to accommodate the mode's restrictions. Since Compatibility mode is a subset, the resulting applications are also valid WebGPU Core applications and run even on user agents that don't support Compatibility mode.

JavaScript

Iterator sequencing

A TC39 proposal to create iterators by sequencing existing iterators. This introduces Iterator.concat (...items).

Selective permissions intervention

When you grant a website permission to access a powerful API (for example, Bluetooth, Camera, Clipboard, DisplayCapture, Geolocation, Microphone, Serial, and USB), your consent is intended for the site, not necessarily for every third-party script running on the page. In particular, embedded ad scripts running in the main frame or same-origin iframes can use the page's permission to opportunistically access this sensitive data. You might not be aware that an advertisement is accessing your information.

This intervention aims to better align a granted permission with your intent by preventing ad script in a context with API permission from using it, reinforcing your trust and control over your data.

Preserve dropEffect values from dragover to drop Events

The HTML5 Drag and Drop API lets web applications handle drag-and-drop operations through a series of events: dragstart, dragenter, dragover, dragleave, drop, and dragend. During these events, the dataTransfer.dropEffect property indicates which operation (copy, move, link, or none) should be performed.

According to the HTML5 specification, the dropEffect value set by web applications during the last dragover event should be preserved and available in the subsequent drop event.

However, Chromium-based browsers were overwriting the web application's dropEffect value with the browser's own negotiated operation before the drop event fired, breaking specification compliance and limiting your control over drag-and-drop behavior. This behavior has now been changed.

Multimedia

Playback Statistics API for WebAudio

This feature adds an AudioContext.playbackStats attribute which returns an AudioPlaybackStats object. This object provides audio playback statistics, for example, average latency, minimum/maximum latency, underrun duration, and underrun count. This API lets web applications monitor audio playback quality and detect glitches.

Network

Data URL MIME Type Parameter Preservation

Preserve MIME type parameters (for example, charset, boundary) in data URL Content-Type headers as specified in the Fetch Standard.

Performance

LCP: Match specced behavior for emitting candidates

The LCP algorithm now emits candidates based on the largest painted image instead of the largest pending-but-not-yet-painted image. This might cause more intermediate candidates to be emitted to the performance timeline.

In each animation frame, after it has been presented, the LCP algorithm emits a new candidate (at most one) to the performance timeline if there is a new largest text or image that was painted in that frame. The algorithm also tracks the "largest pending image", which is the largest still-loading image, and uses that image's size to determine whether the new candidate is largest. This means a slow loading large image can prevent emission of intermediate LCP candidates, and these candidates often provide useful information for you to understand the loading progression.

This behavior emerged during Interop 2025 as a difference with other engines, and the team agreed to align to emit at most one candidate per frame based on the set of painted image and text elements for that frame.

This page highlights the release changes most relevant to users. The official source below contains the full technical detail.

Official source: Chrome 146 Release Notes

Installation notes

After downloading the package, confirm that the branch and platform match your device before launching the installer or extracting the archive. If you only need a standard everyday browser, Stable is usually the safest choice. If you are testing new behavior, Beta, Dev, and Canary are better fits.

Related release pages

For newer or older builds in the same branch, open the category archive linked above. For different platforms, use the related desktop archives in the sidebar.

Frequently asked questions

These FAQ blocks help the page read like a complete release article instead of a download stub, which is better for trust and better for SEO.

Should I use this release or stay on Stable?

If you just want the safest everyday browsing experience, Stable is usually the right default. Preview branches are better for testing, compatibility checks, and early feature access.

Why show exact version numbers so prominently?

Because exact-version queries are common in English search behavior, especially for QA teams, enterprise users, and people trying to reproduce a bug or environment.

Why keep a full article around the download buttons?

A stronger page body gives users context and gives Google clearer signals about what the release page actually covers.

Where should older releases live?

Older versions belong in the category archive page, with this article template handling exact-version landing pages one release at a time.