<h1>Manifest Version</h1>

<style type="text/css">
#schedule h3 {
  margin-bottom:0;
}

#schedule p {
  margin-top:0;
  margin-bottom:1em;
}
</style>

<p>
  Extensions, themes, and applications are simply bundles of resources, wrapped
  up with a <a href="manifest.html"><code>manifest.json</code></a> 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 <code>manifest_version</code> key in their
  manifests.
</p>

<h2 id="current-version">Current Version</h2>

<p>
  Developers should currently specify
  <strong><code>'manifest_version': 2</code></strong>:
</p>

<pre>{
  ...,
  "manifest_version": 2,
  ...
}</pre>

<p>
  Manifest version 1 was <em>deprecated</em> in Chrome 18, and support will
  be phased out according to the following schedule.
</p>

<h2 id="manifest-v1-support-schedule">Manifest version 1 support schedule</h2>

<div id="schedule">
<h3 id="manifest-v1-august2012">August 2012</h3>
<ul>
  <li>The Web Store will block creation of new manifest version 1 extensions.
  <li>The Web Store will allow updates to existing manifest version 1 extensions.
</ul>

<h3 id="manifest-v1-march2013">March 2013</h3>
<ul>
  <li>The Web Store will block updates to manifest version 1 extensions on March
  4th, 2013.
</ul>

<h3 id="manifest-v1-april2013">April 2013</h3>
<ul>
  <li>Chrome 27 Beta will stop packaging manifest version 1 extensions (or loading
    them for development).
</ul>

<h3 id="manifest-v1-june2013">June 2013</h3>
<ul>
  <li>The Web Store will remove manifest version 1 extensions from the wall,
    search results, and category pages.
  <li>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.
</ul>

<h3 id="manifest-v1-september2013">September 2013</h3>
<ul>
  <li>The Web Store will unpublish all manifest version 1 extensions.
  <li>Final notice emails will be sent to developers with manifest
    version 1 extensions still in the Web Store.
  <li>Chrome will continue to load and run installed manifest
    version 1 extensions.
</ul>

<h3 id="manifest-v1-january2014">January 2014</h3>
<ul>
  <li>Chrome will stop loading or running manifest
    version 1 extensions.
</ul>
</div>

<h2 id="manifest-v1-changes">Changes between version 1 and 2</h2>

<ul>
  <li>
    <p>
      A content security policy is set to <code>`script-src 'self'
      chrome-extension-resource:; object-src 'self'</code> by default. This has
      a variety of impacts on developers, described at length in the
      <a href="../extensions/contentSecurityPolicy.html">
      <code>content_security_policy</code></a> documentation.
    </p>
  </li>
  <li>
    <p>
      A package's resources are no longer available by default to external
      websites (as the <code>src</code> of an image, or a <code>script</code>
      tag). If you want a website to be able to load a resource contained in
      your package, you'll need to explicitly whitelist it via the
      <a href="manifest/web_accessible_resources.html">
        <code>web_accessible_resources</code>
      </a> manifest attribute. This is particularly relevant for extensions that
      build up an interface on a website via injected content scripts.
    </p>
  </li>
  <li>
    <p>
      The <code>background_page</code> property has been replaced with a
      <code>background</code> property that contains <em>either</em> a
      <code>scripts</code> or <code>page</code> property. Details are available
      in the <a href="event_pages.html">Event Pages</a> documentation.
    </p>
  </li>
  <li>
    <p>Browser action changes:</p>
    <ul>
      <li>
        <p>
          The <code>browser_actions</code> key in the manifest, and the
          <code>chrome.browserActions</code> API are gone. Use the singular
          <a href="browserAction.html">
            <code>browser_action</code> and <code>chrome.browserAction</code>
          </a> instead.
        </p>
      </li>
      <li>
        <p>
          The <code>icons</code> property of <code>browser_action</code> has
          been removed. Use <a href="browserAction.html#manifest">
            the <code>default_icon</code> property
          </a> or $ref:browserAction.setIcon instead.
        </p>
      </li>
      <li>
        <p>
          The <code>name</code> property of <code>browser_action</code> has been
          removed. Use <a href="browserAction.html#manifest">
            the <code>default_title</code> property
          </a> or $ref:browserAction.setTitle instead.
        </p>
      </li>
      <li>
        <p>
          The <code>popup</code> property of <code>browser_action</code> has
          been removed. Use <a href="browserAction.html#manifest">
            the <code>default_popup</code> property
          </a> or $ref:browserAction.setPopup instead.
        </p>
      </li>
      <li>
        <p>
          The <code>default_popup</code> property of <code>browser_action</code>
          can no longer be specified as an object. It must be a string.
        </p>
      </li>
    </ul>
  </li>
  <li>
    <p>Page action changes:</p>
    <ul>
      <li>
        <p>
          The <code>page_actions</code> key in the manifest, and the
          <code>chrome.pageActions</code> API are gone. Use the singular
          <a href="pageAction.html">
            <code>page_action</code> and <code>chrome.pageAction</code>
          </a> instead.
        </p>
      </li>
      <li>
        <p>
          The <code>icons</code> property of <code>page_action</code> has been
          removed. Use <a href="pageAction.html#manifest">
            the <code>default_icon</code> property
          </a> or $ref:pageAction.setIcon instead.
        </p>
      </li>
      <li>
        <p>
          The <code>name</code> property of <code>page_action</code> has been
          removed. Use <a href="pageAction.html#manifest">
            the <code>default_title</code> property
          </a> or $ref:pageAction.setTitle instead.
        </p>
      </li>
      <li>
        <p>
          The <code>popup</code> property of <code>page_action</code> has been
          removed. Use <a href="pageAction.html#manifest">
            the <code>default_popup</code> property
          </a> or $ref:pageAction.setPopup instead.
        </p>
      </li>
      <li>
        <p>
          The <code>default_popup</code> property of <code>page_action</code>
          can no longer be specified as an object. It must be a string.
        </p>
      </li>
    </ul>
  </li>
  <li>
    <p>
      The <code>chrome.self</code> API has been removed. Use
      <a href="extension.html"><code>chrome.extension</code></a> instead.
    </p>
  </li>
  <li>
    <p>
      <code>chrome.extension.getTabContentses</code> (!!!) and
      <code>chrome.extension.getExtensionTabs</code> are gone. Use
      $ref:extension.getViews instead.
    </p>
  </li>
  <li>
    <p>
      <code>Port.tab</code> is gone. Use
      $ref:runtime.Port
      instead.
    </p>
  </li>
</ul>
