Over the last decade, Chrome and the web development community have worked towards providing users with a fast, responsive and delightful browsing experience. Features like <link rel=preload> and native lazy-loading, to name but a few, are helping pages meet this mark. Historically, Chrome has also successfully encouraged the adoption of best-practices such as HTTPS by distinguishing secure from insecure browsing in Chrome's UI.
To help users identify great experiences as they browse, we are excited to announce that Chrome will begin to highlight high quality user experiences on the web, starting with the labelling of fast links via the link context menu on Chrome for Android. This change will be rolling out starting in Chrome 85 Beta.
Labelling is based on signals from the Core Web Vitals metrics that quantify key aspects of users’ experience, as experienced by real-world Chrome users. The Core Web Vitals metrics measure dimensions of web usability such as loading time, responsiveness, and the stability of content as it loads, and define thresholds for these metrics to set a bar for providing a good user experience.
The changes that site owners make to improve on these aspects work towards making the web more delightful for users across all web browsers. Investing in these critical user-centric metrics helps to drive usability improvements for users and helps businesses see increased engagement.
Links to pages that have historically met or exceeded all metrics thresholds for the Core Web Vitals will be displayed with a new “Fast page” label. This is shown when a user long-presses a link prior to navigating to a page, and it indicates that most users navigating to it have a particularly good experience.
"Fast page" labelling may badge a link as fast if the URL (or URLs like it) have been historically fast for other users. When labelling, historical data from a site’s URLs with similar structure are aggregated together. Historical data is evaluated on a host-by-host basis when the URL data is insufficient to assess speed or is unavailable, for example, when the URL is new or less popular.
Our plan is to maintain alignment with Core Web Vitals as they evolve, so that we are always labeling pages that have optimized against the metrics that are most representative of a user's overall experience. As previously noted, developers should expect the definitions and thresholds of the Core Web Vitals to be stable, and updates to have prior notice and a predictable, annual cadence.
We anticipate that optimizing for the Core Web Vitals may require some investments in improving page quality. To help out, we updated our developer tools to surface information and recommendations: Lighthouse, DevTools, PageSpeed Insights, and Search Console team added a report dedicated to Core Web Vitals too.
Labelling is currently being rolled out to Chrome 85 beta, but if you would like to try labelling today, go to chrome://flags and enable “Context menu performance info and remote hint fetching”. Please note, this flag will only be available on Chrome for Android. Once fully rolled out, users will see labelling if they have Lite mode or “Make Searches and Browsing Better” turned on. Next, navigate to any qualifying page, such as the Wikipedia page for the Internet, and long-press on any link.
We believe the web serves a critical role in our lives, and hope that fast labelling proves helpful to users who are on slow or spotty network connections. Over time, we may also experiment with labelling in other parts of Chrome’s UI. Ultimately, our goal is to provide users of the web with a healthy level of transparency into the experience they may have with a page.
Chrome is committed to working with the ecosystem to ensure a thriving web, and the steps we take, such as the ones outlined above, are designed with these goals in mind.
By Addy Osmani, Ben Greenstein and Josh Simmons, fast page fans.
On today’s web, URLs remain the primary way users determine the identity and authenticity of a site, yet we know URLs suffer from usability challenges. For example: there are myriad ways that attackers can manipulate URLs to confuse users about a website’s identity, which leads to rampant phishing, social engineering, and scams. In one study, more than 60% of users were fooled when a misleading brand name appeared in a URL’s path.
Different browsers approach this challenge in a number of ways, including showing only the domain by default, or visually highlighting the registrable domain (the “most significant” part of the domain name). In Chrome 86, we’re likewise going to experiment with how URLs are shown in the address bar on desktop platforms (animation below). Our goal is to understand -- through real-world usage -- whether showing URLs this way helps users realize they’re visiting a malicious website, and protects them from phishing and social engineering attacks.
An experiment in Chrome 86 shows the domain name by default and full URL on hover
Prefer to see the full URL?
If you find yourself in the experimental group, and you’d like to view the full URL for a given site, you’ll have two options. First you can hover over the URL, and it will expand fully. Second, you can right-click on the URL, and choose “Always show full URLs” in the context menu (screenshot below); enabling this setting will show the full URL for all future sites you visit. (Notably: Enterprise-enrolled devices won’t be included in this Chrome 86 experiment.)
A setting in the context menu allows you to always show full URLs in the address bar
We welcome your feedback!
If you’re not randomly assigned to this Chrome 86 experiment, and you’d like to try it out, please install Chrome Canary or Dev channel, open chrome://flags in Chrome 86, enable the following flags, and re-launch Chrome:
#omnibox-ui-reveal-steady-state-url-path-query-and-ref-on-hover
#omnibox-ui-sometimes-elide-to-registrable-domain
Optionally, #omnibox-ui-hide-steady-state-url-path-query-and-ref-on-interaction to show the full URL on page load until you interact with the page.
Customizable Linux Terminal
Android Emulator support
Deploy apps directly to Chrome OS
Improved Project Wizard in Android Studio
Updated support from Android lint checks
NOTE: The timeline has been updated, please see our October 2021 post for more details.
Scheduled Date
Action
March 2020
Chrome Web Store stopped accepting new public Chrome apps. Developers will be able to update existing Chrome apps through June 2022.
Enterprise administrators may continue to submit new private and unlisted Chrome apps to the Chrome Web Store.
June 2021
General support for Chrome Apps on Windows, Mac, and Linux will end June 2021. Organizations will be able to use a policy setting to extend support on Windows, Mac, and Linux through June 2022. General support for Chrome Apps on Chrome OS will remain enabled, without requiring any policy setting, through June 2022.
June 2022
Chrome Web Store will stop accepting new and updated private and unlisted Chrome apps.
End support for Chrome Apps, NaCl, PNaCl, and PPAPI for all platforms.
Biometric authentication for payment methods in Chrome on Android.
Starting in Chrome 85 (scheduled to go to stable in late August), Chrome will automatically generate a tagged PDF when you print a web page and choose the "Save as PDF" destination. A tagged PDF is one that contains extra metadata about the structure of a document, including things like headings, lists, tables, paragraphs, and image descriptions. Tagged PDFs are more accessible to users with disabilities, such as blind users who use a screen reader to access PDF files. Tagged PDFs can have other uses too, like making it easier for software that needs to automatically process and extract data from PDFs.
We think adding this metadata to PDFs is a perfect fit for Chrome, because that information is already available in well-structured, accessible web pages. We hope this helps make more content exported from Chrome to be accessible to even more users.
Organizations that publish content for the general public online often require that all of their PDFs are accessible, either as a matter of policy or to comply with local laws such as Section 508 in the U.S. Unfortunately, a lot of software programs that are otherwise great for authoring content don't have any support for directly generating a tagged PDF. In these cases, separate remediation software or services are used to make PDFs compliant. By building this into Chrome, we're hoping some organizations that already use HTML as part of their document workflow might be able to take advantage of this new functionality and generate compliant PDFs more easily. This feature also works with Chrome Headless when you use both the --print-to-pdf and --export-tagged-pdf flags.
When we started our journey to make PDFs more accessible, we reached out to the experts - CommonLook, an organization that's been offering PDF accessibility software and services for more than 20 years and which is active in setting PDF standards. We made use of CommonLook's PDF Validator and consulted with them to ensure we were focusing our efforts on the areas that would have the biggest impact.
"To improve the accessibility of PDF documents in Chrome, Google reached out to CommonLook because of our expertise in PDF accessibility. At the time, we recognized the potential impact on PDF accessibility due to the massive number of Chrome users around the world. Two years later, we are pleased to announce that significant progress has been made, and now Chrome is rolling out this feature to all users every time they generate a PDF from Chrome. We will continue to support Google as they work to make Chrome more accessible to all their users." - Monir ElRayes, President and CEO, CommonLook
This feature is rolling out as an experiment. Use chrome://flags/#export-tagged-pdf if you'd like to try it out before it's enabled automatically for all users.
While this is an important milestone, we're not done. Future work includes both improving the quality of generated tagged PDFs, and also improving Chrome's built-in PDF reader to better consume tagged PDFs.
Posted by Dominic Mazzoni, technical lead for Chrome accessibility.
Unless otherwise noted, changes described below apply to the newest Chrome beta channel release for Android, Chrome OS, Linux, macOS, and Windows. Learn more about the features listed here through the provided links or from the list on ChromeStatus.com. Chrome 85 is beta as of July 23, 2020.
Fetch upload streaming lets web developers make a fetch with a ReadableStream body. Starting in Chrome 85, it's available for an origin trial.
Previously, you could only start a request once you had the whole body ready to go. But now, you can start sending data while you're still generating the content, improving performance and memory usage.
For example, an online form could initiate a fetch as soon as a user focuses a text input field. By the time the user clicks enter, fetch() headers would already have been sent. This feature also allows you to send content as it's generated on the client, such as audio and video. For more information, see Streaming requests with the fetch API.
See the Origin Trials section for information on signing up and for a list of other origin trials starting in this release. This origin trial is expected to run through Chrome 87 in January 2021.
Note: At the time this was originally published, WebHID was scheduled to begin an origin trial in Chrome 85. The timeline has since been pushed back to Chrome 86.
There is a long tail of human interface devices (HIDs) that are too new, too old, or too uncommon to be accessible by systems' device drivers. The WebHID API solves this by providing a way to implement device-specific logic in JavaScript.
An HID is one that takes input from or provides output to humans. Examples of devices include keyboards, pointing devices (mice, touchscreens, etc.), and gamepads.
The inability to access uncommon or unusual HID devices is particularly painful when it comes to gamepad support. Gamepad inputs and outputs are not well standardized and web browsers often require custom logic for specific devices. This is unsustainable and results in poor support for the long tail of older and uncommon devices.
We're working on an article to show you how to use the new API. In the meantime, we've found some demos from a few eager engineers that you can use to try the new API. To see those demos, check out Human interface devices on the web: a few quick examples.
The navigator.getInstalledRelatedApps() method determines whether a site's corresponding native app is installed. This allows customization of a user experience for already-installed apps. For example, users can be redirected from a product marketing page directly into an app. Functionality can be centralized to prevent users from seeing duplicate notifications and save developers from maintaining two code bases. Sites can even avoid prompting for installation of a PWA if a native app is already on a user's device.
It does all this while protecting user privacy. Entries in the web app manifest and the Android manifest file ensure that sites cannot use the API to request arbitrary information about users' installed apps.
This method was implemented on Android in Chrome 80. Starting in Chrome 85, it's available on Microsoft Windows. This addition is the result of work from Microsoft. For details on using this method, see Is your app installed? getInstalledRelatedApps() will tell you!.
CSS Houdini is a set of APIs and CSS features that exposes the CSS rendering engine. It lets developers create new CSS features without waiting for a native implementation in browsers. CSS Houdini's @property rule is part of the CSS Properties and Values API, which allows defining custom properties with inheritance, type checking, and default values. The first part of this API, CSS.registerProperty(), was implemented in Chrome 78. That method's capabilities are now available in stylesheets through the @property.
Take the image below, for example. What you're seeing is a transition created with a CSS custom property. In addition to being impossible without the new API, this transition is also type safe. For more information, see @property: giving superpowers to CSS variables.
In addition to those listed above, this version of Chrome introduces the new origin trials described below. Origin trials allow you to try new features and give feedback on usability, practicality, and effectiveness to the web standards community. To register for any of the origin trials currently supported in Chrome, including the ones described below, visit the Origin Trials dashboard. To learn more about origin trials themselves, visit the Origin Trials Guide for Web Developers.
A declarative API to allow the creation of shadow roots using only HTML and no JavaScript. This API allows Web Components that use Shadow DOM to also make use of server-side rendering (SSR), to get rendered content on screen quickly without requiring JavaScript for shadow root attachment. The origin trial is expected to run through Chrome 87 in January 2020.
The RTCRtpEncodingParameters.adaptivePtime property lets a sender in a real-time communication (RTC) system enable or disable adaptive packet rates. Because the packet rate is a big determining factor to the overall bitrate of an audio stream, an optimal congestion control is needed to adapt the packet rate. The audio packet rate is analogous to the video frame rate, which also plays an important role in the video bitrate adaptation. Although adaptive packet rate may be ubiquitously beneficial, we need this API for applications to enable and disable it, since, otherwise, it may introduce interoperability problems. Some implementations have taken a fixed packet rate as an assumption, and thus may fail or perform sub-optimally with an adaptive packet rate. The origin trial is expected to run through Chrome 87 in January 2021.
Portals enable seamless navigations between sites or pages by allowing a page to show another page as an inset. For more information, see Hands-on with Portals: seamless navigation on the Web. The origin trial is expected to run through Chrome 86 in early November.
App shortcuts are now available on desktop in addition to Android, which debuted in Chrome 84. This feature improves users' productivity and facilitates reengagement with key tasks by providing quick access to common actions. For sites that are already Progressive Web Apps, creating shortcuts requires only adding items to the web app manifest. This addition is the result of work from Microsoft. For more information, see Get things done quickly with app shortcuts.
Chrome is now auto-upgrading images served over HTTP from HTTPS sites by rewriting URLs to HTTPS without falling back to HTTP when secure content is not available. Chrome has been auto-upgrading audio and video content since version 80.
Adds support for decoding AVIF content natively using existing AV1 decoders. AVIF is a next generation image format standardized by the Alliance for Open Media. There are three primary motivations for supporting AVIF:
Getting persistent storage is easier and more predictable for installed web apps, including PWAs and Trusted Web Activities. If an installed web app requests persistent storage by calling navigator.storage.persist(), it will be granted automatically. Other sites will continue to use the existing heuristics.
navigator.storage.persist()
Chrome made two changes to match those made in the CSS Color Adjustment level 1 spec.
This means content which has a dark theme in its CSS will be able to match it with dark themed UA controls. This change improves interoperability with WebKit which already had this behavior for 'color-scheme: dark'.
Adds a CSS property called content-visibility, which allows automatic or script management of content visibility. When hidden, the element's contents (subtree or replaced element contents) are not drawn or hit-tested and have CSS containment applied, allowing for rendering optimizations. The 'auto' keyword allows for the user-agent to manage content visibility based on proximity to the viewport, whereas the 'hidden' keyword allows full script control of content visibility.
CSS counter-set is an additional property introduced in CSS Lists Module Level 3 to control counters by setting an existing counter to a specified value. This builds on other implemented counter control properties, specifically counter-reset (which creates a new counter with a specified value) and counter-increment (which increments an existing counter by a specified amount). This feature is needed for precise counter control, since otherwise it is not possible to set an existing counter to a value other than figuring out how to increment or decrement it.
The Event Timing API enables web developers to measure event latency both before and after the page load. Monitoring event latency requires an event listener. This precludes measuring event latency early in page load, and adds unnecessary performance overhead.
(Desktop only) The leavepictureinpicture event now exposes a reference to pictureInPictureWindow so that web developers no longer need to keep a global reference to that object.
Support is added for several CSS properties and descriptors for printing.
Web developers may specify a referrer policy on their documents, which impacts the Referer header sent on outgoing requests and navigations. When no such policy is specified, Chrome will now use strict-origin-when-cross-origin as the default policy, instead of no-referrer-when-downgrade. On cross-origin requests made from documents without a specified referrer policy, this reduces the Referer header to the initiating origin.
Changes the behavior of fallback content for ImageInputType and HTMLImageElement. Such content will now render exactly the same as alt text would.
Corrects several spec inconsistencies related to the <link> tag's disabled attribute.
These behaviors are eliminated in compliance with a spec update.
Adds two new methods, writeValueWithResponse() and writeValueWithoutResponse(), which resolve several issues with the existing method for writing to GATT characteristics and enable developers to control whether the device returns a response. The existing writeValue() method will remain for backwards compatibility, but its use is discouraged. The following problems with the existing method have been corrected:
The new APIs also do not depend on the GATT characteristic properties being set correctly which allows working around buggy Bluetooth devices.
WebAssembly now imports and exports WebAssembly function parameters of type i64 using BigInt.
Several methods from the Web Authentication Level 2 spec have been added.
This version of Chrome incorporates version 8.1 of the V8 JavaScript engine. It specifically includes the changes listed below. You can find a complete list of recent features in the V8 release notes.
Adds the logical assignment operators ||=, &&=, and ??= to JavaScript. This rounds out the compound assignment operators to also include logical binary operators. Currently only mathematical and bitwise binary operators are supported. This improvement is for shipping terser, clearer JavaScript. For more information, see Logical assignment.
Adds two new JavaScript features to V8. Promise.any() accepts an iterable of promises and returns a promise that is fulfilled by the first given promise to be fulfilled, or rejected with an AggregateError holding the rejection reasons if all of the given promises are rejected. AggregateError is a support class that aggregates one or more errors into a single object. This rounds out standard JS support for commonly available Promise combinators already available in userland libraries.
JavaScript now has support for global substring replacement through the new String.prototype.replaceAll() method.
This version of Chrome introduces the deprecations and removals listed below. Visit ChromeStatus.com for lists of current deprecations and previous removals.
Chrome 85 starts a spec-mandated turn down of AppCache in Chrome. For details and instructions for managing the transition gracefully, see Preparing for AppCache removal. For information on a feature that will help you identify uses of this and other deprecated APIs, see Know your code health.
Use of cookies with SameSite set to None without the Secure attribute is no longer supported. Any cookie that requests SameSite=None but is not marked Secure will be rejected. This feature started rolling out to users of Stable Chrome on July 14, 2020. See SameSite Updates for a full timeline and details. Cookies delivered over plaintext channels may be cataloged or modified by network attackers. Requiring secure transport for cookies intended for cross-site usage reduces this risk.