Manifest version

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 the content_security_policy documentation.
  • A package's resources are no longer available by default to external websites (as the src of an image, or a script tag). If you want a website to be able to load a resource contained in your package, you'll need to explicitly allowlist it via the web_accessible_resources manifest attribute. This is particularly relevant for extensions that build up an interface on a website via injected content scripts.
  • The background_page property has been replaced with a background property that contains either a scripts or page property. Details are available in the Event Pages documentation.
  • Browser action changes:

  • Page action changes:

  • The chrome.self API has been removed. Use chrome.extension instead.

  • chrome.extension.getTabContentses (!!!) and chrome.extension.getExtensionTabs are gone. Use extension.getViews instead.

  • Port.tab is gone. Use runtime.Port instead.