Extensions, themes, and applications are simply bundles of resources, wrapped up with a
manifest.json file that describes the package's contents. The format of this file is
generally stable, but occasionally breaking changes must be made to address important issues.
Developers should specify which version of the manifest specification their package targets by
setting a manifest_version key in their manifests.
Current version
Developers should currently specify 'manifest_version': 2:
{
...,
"manifest_version": 2,
...
}
Manifest version 1 was deprecated in Chrome 18, and support will be phased out according to the following schedule.
Manifest version 1 support schedule
August 2012
- The Web Store will block creation of new manifest version 1 extensions.
- The Web Store will allow updates to existing manifest version 1 extensions.
March 2013
- The Web Store will block updates to manifest version 1 extensions on March 4th, 2013.
April 2013
- Chrome 27 Beta will stop packaging manifest version 1 extensions (or loading them for development).
June 2013
- The Web Store will remove manifest version 1 extensions from the wall, search results, and category pages.
- Notice emails will be sent to all developers with manifest version 1 extensions still in the store reminding them that these extensions will be unpublished and providing update instructions.
September 2013
- The Web Store will unpublish all manifest version 1 extensions.
- Final notice emails will be sent to developers with manifest version 1 extensions still in the Web Store.
- Chrome will continue to load and run installed manifest version 1 extensions.
January 2014
- Chrome will stop loading or running manifest version 1 extensions.
Changes between version 1 and 2
- A content security policy is set to
`script-src 'self'; object-src 'self';by default. This has a variety of impacts on developers, described at length in thecontent_security_policydocumentation. - A package's resources are no longer available by default to external websites (as the
srcof an image, or ascripttag). If you want a website to be able to load a resource contained in your package, you'll need to explicitly allowlist it via theweb_accessible_resourcesmanifest attribute. This is particularly relevant for extensions that build up an interface on a website via injected content scripts. - The
background_pageproperty has been replaced with abackgroundproperty that contains either ascriptsorpageproperty. Details are available in the Event Pages documentation. Browser action changes:
- The
browser_actionskey in the manifest, and thechrome.browserActionsAPI are gone. Use the singularbrowser_actionandchrome.browserActioninstead. - The
iconsproperty ofbrowser_actionhas been removed. Use thedefault_iconproperty or browserAction.setIcon instead. - The
nameproperty ofbrowser_actionhas been removed. Use thedefault_titleproperty or browserAction.setTitle instead. - The
popupproperty ofbrowser_actionhas been removed. Use thedefault_popupproperty or browserAction.setPopup instead. - The
default_popupproperty ofbrowser_actioncan no longer be specified as an object. It must be a string.
- The
Page action changes:
- The
page_actionskey in the manifest, and thechrome.pageActionsAPI are gone. Use the singularpage_actionandchrome.pageActioninstead. - The
iconsproperty ofpage_actionhas been removed. Use thedefault_iconproperty or pageAction.setIcon instead. - The
nameproperty ofpage_actionhas been removed. Use thedefault_titleproperty or pageAction.setTitle instead. - The
popupproperty ofpage_actionhas been removed. Use thedefault_popupproperty or pageAction.setPopup instead. - The
default_popupproperty ofpage_actioncan no longer be specified as an object. It must be a string.
- The
The
chrome.selfAPI has been removed. Usechrome.extensioninstead.chrome.extension.getTabContentses(!!!) andchrome.extension.getExtensionTabsare gone. Use extension.getViews instead.Port.tabis gone. Use runtime.Port instead.