Learn how Chrome removes features that don't work well, while minimizing disruption to end users and developers.


![Sam Dutton](https://web.dev/images/authors/samdutton.jpg) Sam Dutton [X](https://twitter.com/sw12) [GitHub](https://github.com/samdutton) [Mastodon](https://techhub.social/@samdutton) [Bluesky](https://bsky.app/profile/samdutton.bsky.social) [Homepage](https://samdutton.com)

<br />

Chrome is continually adding new features and functionality, but sometimes
features need to be removed.

Feature removal can reduce the complexity of the browser codebase, and help
keep browsers safe and secure by reducing potential attack vectors. A carefully
coordinated approach across the web platform ensures that browser vendors can
remove platform features which don't work well, while minimizing disruption to
end users and developers.
For example: problems with the design of [AppCache](https://en.wikipedia.org/wiki/Cache_manifest_in_HTML5) were discovered once it was used on production sites in stable browsers, and the feature was eventually removed.

## Removal of browser features

If browsers removed features without warning, that would cause websites to
break, and make it difficult for developers to plan migration to alternative
technologies. Instead, browser vendors take a systematic approach, by providing
warnings, supporting resources, and detailed timelines well in advance of
feature removal.

### Deprecation and removal

There are two main phases to removing a feature from Chrome:

- **Deprecation:** Warn developers that a feature is scheduled for removal, and [provide resources](https://developer.chrome.com/docs/web-platform/deprecating-unload) to help sites migrate to alternatives. Warnings are displayed in [Chrome DevTools Issues panel](https://developer.chrome.com/docs/devtools/issues) when deprecated features are used, and information about deprecation timelines and support is published on [Chrome Platform
  Status](https://chromestatus.com/roadmap) and in [Chrome for Developers](https://chromium.googlesource.com/devtools/devtools-frontend/+/main/docs/checklist/README.md#warnings_deprecations_removals) articles and blog posts.
- **Removal** : Initially, disable the feature by default, but allow developers to continue using the feature temporarily by setting a [Chrome
  flag](https://developer.chrome.com/docs/web-platform/chrome-flags) or by participating in a [deprecation trial](https://developer.chrome.com/docs/web-platform/chrome-deprecation#deprecation-trials). Once sites are no longer relying on the disabled feature, remove the code.

> [!IMPORTANT]
> **Deprecation ≠ Removal!**   
>
> You'll sometimes hear developers say a feature is "deprecated" when they mean "deprecated and removed".   
>
> Deprecation is the announcement phase before feature removal, when browser vendors warn developers that they plan to remove a feature. "This feature is deprecated" means that the feature is still available, but is scheduled for removal.   
>
> To allow developers time to act once a feature is deprecated, the feature typically remains available for several versions of Chrome before being disabled by default, and subsequently removed.

## Blink Intents

[Chromium](https://developer.chrome.com/docs/web-platform/chrome-chromium)-based
web browsers such as Chrome use the [Blink rendering
engine](https://developer.chrome.com/docs/web-platform/blink) to transform code
and resources into web pages you can view and interact with. When engineers want
to make a change to Blink, they post on the [blink-dev mailing
list](https://groups.google.com/a/chromium.org/g/blink-dev) to get approval to
proceed. These mailing list posts are called Blink Intents.
Learn more: [What are Blink Intents?](https://developer.chrome.com/docs/web-platform/blink-intents)

When engineers intend to deprecate and then remove a feature from Blink, they
post an Intent to Deprecate on the [blink-dev mailing
list](https://groups.google.com/a/chromium.org/g/blink-dev), followed by an
Intent to Remove. The two Intents are often combined as an
[Intent to Deprecate and Remove](https://groups.google.com/a/chromium.org/g/blink-dev/search?q=title:%22Intent+to+Deprecate+and+Remove%22).

### Intent to Deprecate

An Intent to Deprecate is posted by Blink engineers when they want to start
warning developers that a browser feature is planned for removal. At this point,
the feature will continue to be available, but developers will be provided with
support and information from Chrome DevTools, as well as in
[blog posts](https://developer.chrome.com/s/results?q=deprecations),
on [chromestatus.com](https://chromestatus.com), and in feature documentation on
[MDN](https://developer.mozilla.org/docs/Web/API/MutationEvent) and
elsewhere.

Example:
[Intent to Deprecate: Mutation Events](https://groups.google.com/a/chromium.org/g/blink-dev/c/qDsKRU-cQ_4/m/isA1mZ_aAAAJ)

### Intent to Remove

An Intent to Remove is posted when Blink engineers intend to deactivate a
feature and remove code for it. An Intent to Remove is often combined with an
Intent to Deprecate, as an Intent to Deprecate and Remove.

Example:
[Intent to Deprecate and Remove: Web SQL](https://groups.google.com/a/chromium.org/g/blink-dev/c/fWYb6evVA-w/m/fKsbZyd1EgAJ)

## Minimize disruption to users and developers

Chrome avoids removing features whenever possible.

Chrome engineers always review feature usage rates and other data before
proceeding with deprecations. A feature will only be removed if, for example,
it's only used by
[a very small proportion of users](https://groups.google.com/a/chromium.org/g/blink-dev/c/1wWhVoKWztY)
and better alternatives are available, or if ecosystem changes mean that the
feature may now pose severe security vulnerabilities. A feature is not usually
removed from Chrome if other browsers plan to continue supporting it: feature
removal must be
[coordinated between browser engines](https://www.chromium.org/blink/launching-features/#deprecation-coordinate).

In addition to Intent posts on the [blink-dev mailing
list](https://groups.google.com/a/chromium.org/g/blink-dev), deprecations are
[announced on the Chrome developer blog](https://developer.chrome.com/s/results?q=deprecation#gsc.tab=0&gsc.q=deprecation&gsc.sort=).
Warnings and support information are also provided in Chrome DevTools, and in
feature documentation. Timelines are also published within the
[chromestatus.com](https://chromestatus.com) entry for a deprecated feature.

### Temporarily re-enable a deprecated feature

There are several ways you may temporarily be able to gain continued access to
a feature after support has been removed by default from Chrome.

- **Deprecation trial**   

  This is a a type of [origin trial](https://developer.chrome.com/docs/web-platform/origin-trials) that allows
  a feature that has been changed, or disabled by default prior to removal, to be
  temporarily re-enabled. For example, [support for mutation events was removed](https://developer.chrome.com/blog/mutation-events-deprecation),
  starting in Chrome 127. Sites that needed extra time before migrating from these
  events could register for the [deprecation trial](https://developer.chrome.com/blog/mutation-events-deprecation#timeline_and_deprecation_trial_information)
  to re-enable the events temporarily, on specified sites. That gave developers
  additional time to implement alternative solutions.

- **Chrome Enterprise policy**   

  Sometimes a policy is made available to allow sites to temporarily opt back in to
  a feature that has been deprecated and removed. For example, a
  `MutationEventsEnabled` [policy](https://chromeenterprise.google/policies/#MutationEventsEnabled)
  was provided for Chrome versions 124 to 136.

- **Chrome flag**   

  For some deprecated features, a [Chrome flag](https://developer.chrome.com/docs/web-platform/chrome-flags)
  provides temporary access to the feature for local development. For example, the
  `enable-unsafe-swiftshader` flag was provided to allow developers to re-enable
  usage of [SwiftShader](https://chromestatus.com/feature/5166674414927872)
  as a fallback for software WebGL.

## Take action

As a developer you need to be ready for web platform changes.

You can check release notes for every new version of every browser, but you
should also use
[pre-Stable browser channels](https://developer.chrome.com/docs/web-platform/chrome-release-channels)
to test and adapt your sites so they're ready for upcoming changes, including
removals. At a minimum, ensure your development team uses both
[Chrome Dev channel](https://developer.chrome.com/docs/web-platform/chrome-release-channels#chrome_dev)
and
[Chrome Stable](https://developer.chrome.com/docs/web-platform/chrome-release-channels#chrome_stable)
to access sites you work on. As a developer, you can run multiple channels
simultaneously. That lets you test with future versions of Chrome, as well
as experiencing your site in Chrome Stable, which is likely to be the channel
used by the vast majority of your users.

Regularly check the Chrome DevTools console for deprecation warnings. DevTools
provides information and links to resources to help you migrate away from
deprecated features. You should also use multiple Chrome channels for automated
and manual testing.

## Find out more

- [What are Blink Intents?](https://developer.chrome.com/docs/web-platform/blink-intents)
- [What are Chrome release channels?](https://developer.chrome.com/docs/web-platform/chrome-release-channels)
- [The Chromium Projects: feature deprecations](https://www.chromium.org/blink/launching-features/#feature-deprecations)
- [Chrome Platform Status roadmap](https://chromestatus.com/roadmap)