Version article

Download 148.0.7778.97 from the Chrome Stable for macOS

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

Stable macOS Published 2026-04-29
Version 148.0.7778.97
Release date 2026-04-29
Platform macOS
File size 236.72MB
Quick facts

What users usually want to know first

Branch Stable
Clicks

What changed in Chrome 148.0.7778.97

Google Chrome 148.0.7778.97 is available here as part of the macOS 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: May 5th, 2026

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

CSS and UI

CSS name-only container queries

A CSS query container can be queried based on its container-name only, and the container does not need any container-type set:

Previously, @container required a container type in addition to the name.

At-rule: CSS feature detection

This feature adds an at-rule() function to CSS @supports which enables authors to feature-detect support for CSS at-rules.

Open Font Format avar2 text shaping and glyph rendering

Version 2 of the avar (Axis Variations) table enables font designers to create variable fonts with better control over interpolation. While the original variable font spec handles axes independently, avar2 allows axes to influence one another. This leads to fonts that are easier to use for content authors to use, and enable compact storage.

Avar2 works by using the same familiar concepts of font variations, but applies the variable delta values to the design axis specifications itself. In addition, it lets you do this over a range of multiple axes.

As an example, it lets font designers create "meta sliders" which control multiple variation axes at once, alleviating the user from fine-tuning and finding a useful corner of the font's design space.

Avar2 gives font designers better control over the usable variation space of their font, and lets them coordinate the adjustment of design axes across several axes.

By defining the relationships between axes mathematically within the avar version 2 table, fonts can achieve complex designs with fewer masters, leading to smaller file sizes, because the interpolation is stored more efficiently.

The revert-rule keyword

The revert-rule keyword rolls back the cascade to the previous rule, similar to how revert-layer rolls back the cascade to the previous layer. For example:

This is especially useful in combination with conditionals, because it lets you eliminate the current rule if some condition is not met:

Lazy loading for video and audio elements

Adds the loading attribute to <video> and <audio> elements, letting developers defer media resource loading until the element is near the viewport using loading="lazy". This matches the existing lazy loading behavior for <img> and <iframe> elements, improving page load performance and reducing data usage.

text-decoration-skip-ink: all

Add support for the all value for the CSS text-decoration-skip-ink property.

The text-decoration-skip-ink property already supports auto and none. The all value extends this by unconditionally applying ink-skipping to all glyphs —including CJK characters—whereas auto leaves CJK characters un-skipped because ink-skipping tends to produce undesirable visual results for ideographic scripts at typical underline positions.

With text-decoration-skip-ink: all, developers who have adjusted text-underline-position or text-underline-offset to avoid clashing with CJK glyphs can explicitly opt in to ink-skipping for those characters as well.

Correctly set dropEffect for dragEnter , dragLeave , and dragOver events

The drag and drop specifications require the dataTransfer's object dropEffect attribute to have certain predetermined values on dragEnter, dragOver, and dragLeave. Drag enter and drag over should have a dropEffect based on the current effectAllowed, and dragLeave should always have a none dropEffect. Currently, Chromium doesn't adhere to these rules. With the launch of this feature, Chromium will start respecting the specification and assigning the correct values to this attribute so that web developers can start relying on it.

Pointer event suppression on drag start

According to the HTML spec, when a drag starts the user agent should send the appropriate events to the drag source to indicate that the pointer event stream has ended, and that it shouldn't expect any more events from this pointer. This code had been partially implemented for mouse events and fully implemented for touch drags on Android. With the work in this feature, we aim to fully satisfy this spec requirement on all other platforms. Practically, this means that after a drag has started the drag source will now receive the pointercancel, pointerout, and pointerleave events to indicate that the current event stream has finished.

Capabilities

Manifest localization

Supports localization of manifest members so apps can adapt their names, descriptions, icons, and shortcuts to the user's language and region. Developers provide localized values in the web app manifest, and the browser automatically selects the appropriate resources based on the user's language settings, introducing language support across different markets.

Learn more in Localization support for web app manifests.

Web on Android

Web Serial API on Android

The Web Serial API provides an interface for connecting to serial devices, either through a serial port on the user's system or removable USB and Bluetooth devices that emulate a serial port. Now it is supported on Android.

Users, especially in the educational, hobbyist, and industrial sectors, connect peripheral devices to their computers that require custom software to control. For example, robotics are often used to teach computer programming and electronics in schools. This requires software which can upload code to a robot or control it remotely. In an industrial or hobbyist setting a piece of equipment such as a mill, laser cutter or 3D printer is controlled by a program running on a connected computer. These devices are often controlled by small microcontrollers using a serial connection.

For more information, see the Web Serial API guide on web.dev and the Web Serial specification.

SharedWorker on Android

For a long time, SharedWorker has been disabled on Android due to concerns about its unpredictable process lifecycle. SharedWorker instances might terminate unexpectedly, without notifying users or web developers.

However, a recent discussion on GitHub (see the GitHub discussion) suggests that the unpredictable nature of SharedWorker's process lifecycle might not be as significant an issue as previously thought. Based on this, SharedWorker is being re-enabled on Android while this behavior is investigated to ensure a stable and reliable experience.

Web APIs

WebGPU: linear_indexing feature

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

Adds two new compute shader built-in values for user quality of life. These are implemented for all backends (as polyfills of existing built-in values).

Web Authentication Immediate UI mode

A new mode for navigator.credentials.get() that causes browser sign-in UI to be displayed to the user if there is a passkey or password for the site that is immediately known to the browser, or else rejects the promise with NotAllowedError if there is no such credential available. This allows the site to avoid showing a sign-in page if the browser can offer a choice of sign-in credentials that are likely to succeed, while still allowing a traditional sign-in page flow for cases where there are no such credentials.

Get Secure Payment Confirmation capabilities

Adds a new static method to the Payment Request that lets web developers get the capabilities of the browser's implementation of Secure Payment Confirmation.

This helps web developers know what capabilities are available for Secure Payment Confirmation so they can decide whether or not they want to use Secure Payment Confirmation with those capabilities.

Extended lifetime shared workers

This update adds a new option, extendedLifetime: true, to the SharedWorker constructor. This new option requests that the shared worker be kept alive even after all current clients have unloaded. This lets pages perform asynchronous work that requires JavaScript after a page unloads, without needing to rely on a service worker.

Prompt API

The Prompt API gives web developers direct access to a browser-provided on-device AI language model. The API design offers fine-grained control, aligned with cloud API shapes, for progressively enhancing sites with model interactions tailored to individualized use cases. This complements task-based language model APIs, for example, Summarizer API, as well as a variety of APIs and frameworks for generalized on-device inference with developer-supplied ML models.

The initial implementation supports text, image, and audio inputs. In addition, response constraints ensure that generated text conforms with predefined regular expression and JSON schema formats.

This supports a variety of use cases, from generating image captions and performing visual searches to transcribing audio, classifying sound events, generating text following specific instructions, and extracting information or insights from multi-modal source material.

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

Official source: Chrome 148 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.