Keep track of your migration progress

> [!NOTE]
> **Note:** Manifest V3 is supported generally in Chrome 88 or later. For extension features added in later Chrome versions, see the [API reference documentation](https://developer.chrome.com/docs/extensions/reference) for support information. If your extension requires a specific API, you can specify [a minimum chrome version](https://developer.chrome.com/docs/extensions/mv3/manifest/minimum_chrome_version) in the manifest file.

The following checklists help you track your migration work. They define tasks that must be completed with links to instructions. Migration work is broadly divided into five categories as described in the [Migration summary](https://developer.chrome.com/docs/extensions/develop/migrate.md.txt).

## Update the manifest

The `manifest.json` file requires a slightly different format for Manifest V3 than for Manifest V2. This page describes changes that only affect the `manifest.json` file. But many of the changes to scripts and pages also require changes to the manifest. Those changes are covered with the migration tasks that require them.

- [Change the manifest version number](https://developer.chrome.com/docs/extensions/develop/migrate/manifest.md.txt#change-version).
- [Update host permissions](https://developer.chrome.com/docs/extensions/develop/migrate/manifest.md.txt#update-host-permissions).
- [Update web accessible resources](https://developer.chrome.com/docs/extensions/develop/migrate/manifest.md.txt#update-wa-resources).

## Migrate to a service worker

A service worker replaces the extension's background or event page to ensure that background code stays off the main thread. This enables extensions to run only when needed, saving resources.

Before beginning, read about the [differences between background scripts and extension service workers](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers.md.txt#differences-with-sws).

- [Update the "background" field in the manifest](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers.md.txt#update-bg-field)
- [Move DOM and window calls to an offscreen document](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers.md.txt#move-dom-and-window)
- [Convert localStorage to browser.storage.local](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers.md.txt#convert-localstorage)
- [Register listeners synchronously](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers.md.txt#register-listeners)
- [Replace calls to `XMLHttpRequest()` with global `fetch()`](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers.md.txt#replace-xmlhttprequest).
- [Persist states](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers.md.txt#persist-states)
- [Convert timers to alarms](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers.md.txt#convert-timers)
- [Keep the service worker alive (in exceptional cases)](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers.md.txt#keep-sw-alive)

## Update API calls

Some features need to be replaced with Manifest V3 equivalents. Others need to be removed entirely.

- [Replace `tabs.executeScript()` with `scripting.executeScript()`](https://developer.chrome.com/docs/extensions/develop/migrate/api-calls.md.txt#replace-executescript).
- [Replace `tabs.insertCSS()` and `tabs.removeCSS()` with `scripting.insertCSS()` and `scripting.removeCSS()`](https://developer.chrome.com/docs/extensions/develop/migrate/api-calls.md.txt#replace-insertcss-removecss).
- [Replace Browser Actions and Page Actions with Actions](https://developer.chrome.com/docs/extensions/develop/migrate/api-calls.md.txt#replace-browser-page-actions)
- [Replace functions that expect a Manifest V2 background context](https://developer.chrome.com/docs/extensions/develop/migrate/api-calls.md.txt#replace-mv2-function).
- [Replace callbacks with promises](https://developer.chrome.com/docs/extensions/develop/migrate/api-calls.md.txt#replace-callbacks)
- [Replace unsupported APIs](https://developer.chrome.com/docs/extensions/develop/migrate/api-calls.md.txt#replace-unsupported-apis)

## Replace blocking web request listeners

Instead of programmatically reading network requests and altering them (as you did in Manifest V2), your extension specifies rules that describe actions to perform when a given set of conditions is met.

- [Update permissions](https://developer.chrome.com/docs/extensions/develop/migrate/blocking-web-requests.md.txt#update-permissions)
- [Create declarative net request rules](https://developer.chrome.com/docs/extensions/develop/migrate/blocking-web-requests.md.txt#create-dnr-rules)

After completing the items above, you may want to review a few [common use cases](https://developer.chrome.com/docs/extensions/develop/migrate/blocking-web-requests.md.txt#common-use-cases):

- [Block a single URL](https://developer.chrome.com/docs/extensions/develop/migrate/blocking-web-requests.md.txt#block-a-single-url)
- [Redirect-multiple-urls](https://developer.chrome.com/docs/extensions/develop/migrate/blocking-web-requests.md.txt#redirect-multiple-urls)
- [Block cookies](https://developer.chrome.com/docs/extensions/develop/migrate/blocking-web-requests.md.txt#block-cookies)

## Improve extension security

Changes are required to improve the security of extensions. This includes removing remotely hosted code, which is no longer supported.

- [Remove execution of arbitrary strings](https://developer.chrome.com/docs/extensions/develop/migrate/improve-security.md.txt#remove-execution-of-strings).
- [Remove remotely hosted code](https://developer.chrome.com/docs/extensions/develop/migrate/improve-security.md.txt#remove-remote-code)
- [Update content security policy](https://developer.chrome.com/docs/extensions/develop/migrate/improve-security.md.txt#update-csp).
- [Remove unsupported content security policy values](https://developer.chrome.com/docs/extensions/develop/migrate/improve-security.md.txt#remove-unsupported-csv)

## Publish your Manifest V3 extension

After converting to Manifest Version 3, it's time to release your extension on the Chrome Web Store. Depending on the changes made, consider a step-wise roll out. This approach allows you to ensure your extension works as expected with a limited audience first, before releasing it to the entire user base.

- [Publish a beta testing version](https://developer.chrome.com/docs/extensions/develop/migrate/publish-mv3.md.txt#publish-beta).
- [Gradually roll out your release](https://developer.chrome.com/docs/extensions/develop/migrate/publish-mv3.md.txt#gradual-rollout).
- [Plan for review times](https://developer.chrome.com/docs/extensions/develop/migrate/publish-mv3.md.txt#review).
- [Additional tips](https://developer.chrome.com/docs/extensions/develop/migrate/publish-mv3.md.txt#tips).