Manifest V3 migration checklist
This page provides a quick reference to help you identify any changes you might need to make to an Manifest V2 extension so that it works under Manifest V3. For more description of the nature of these changes see the Manifest V3 migration guide.
There are some changes you may need to make based on changes to the API surface. This section lists these changes.
Do you have host permissions in your manifest?
Host permissions in Manifest V3 are a separate element; you don't specify them in
- Move host permissions into the
host_permissionsfield in manifest.json.
Are you using background pages?
Background pages are replaced by service workers in Manifest V3.
background.service_workerin manifest.json. Note that the
service_workerfield takes a string, not an array of strings.
- Update background scripts to adapt to the service worker execution context.
Service workers must be registered at root level: they cannot be in a nested directory.
Are you using the
page_action property in manifest.json?
These properties are unified into a single property in Manifest V3.
- Replace these properties with
Are you using the
These two equivalent APIs are unified into a single API in Manifest V3.
- Migrate to the
Are you currently using the blocking version of
This API is replaced by
declarativeNetRequest in Manifest V3.
This only applies to user-installed extensions; force installed extensions (extensions distributed using ExtensionInstallForcelist). These extensions — typically used in an enterprise setting — can still use the blocking version of
- Migrate request modification logic to
- Replace the
- Remove the
webRequestpermission if you no longer need to observe network requests.
- Remove unnecessary host permissions; blocking a request or upgrading a request's protocol doesn't require host permissions with
Are you using these scripting/CSS methods in the chrome.tabs API?
In Manifest V3, several methods move from
chrome.tabs to the
- Change any of the following Manifest V2 calls to use the correct Manifest V3 API:
|Manifest V2||Manifest V3|
Are you executing remote code or arbitrary strings?
You can no longer execute external logic using
- Move all external code (JS, Wasm, CSS) into your extension bundle.
- Update script and style references to load resources from the extension bundle.
chrome.runtime.getURL()to build resource URLs at runtime.
Are you executing functions that expect an Manifest V2 background context?
The adoption of service workers in Manifest V3 isn't compatible with methods like
- Migrate to a design that passes messages between other contexts and the background service worker.
There are some changes you may need to make based on changes in security policy. This section lists these changes.
Are you making CORS requests in content scripts?
- Move these requests to the background service worker.
Are you using a custom
content_security_policy in manifest.json?
- Remove references to external domains in
style-srcdirectives if present.