| <h1>Packaging</h1> |
| |
| |
| <p> |
| This page describes how to package your extension. |
| As the <a href="overview.html">Overview</a> explains, |
| extensions are packaged as signed ZIP files |
| with the file extension "crx"—for example, |
| <code>myextension.crx</code>. |
| </p> |
| |
| <p> |
| <b>Note:</b> |
| You do not need to package your own extension. |
| If you publish your extension using the |
| <a href="https://chrome.google.com/webstore/developer/dashboard">Chrome Developer Dashboard</a>, |
| then the only reason to create your own <code>.crx</code> file |
| would be to distribute a non-public version—for example, |
| to alpha testers. |
| You can find information on publishing extensions and apps in the |
| Chrome Web Store getting started tutorial, starting at |
| <a href="http://code.google.com/chrome/webstore/docs/get_started_simple.html#step5">Step 5: Zip up your app</a>. |
| </p> |
| |
| <p> |
| When you package an extension, |
| the extension is assigned a unique key pair. |
| The extension's ID is based on a hash of the public key. |
| The private key is used to sign each version of the extension |
| and must be secured from public access. |
| Be careful not to include your private key within |
| your extensions! |
| </p> |
| |
| |
| <h2 id="creating">Creating a package</h2> |
| |
| <p>To package an extension:</p> |
| <ol> |
| <li> |
| Bring up the Extensions management page |
| by going to this URL: |
| <blockquote> |
| <b>chrome://extensions</b> |
| </blockquote> |
| </li> |
| |
| <li> |
| Ensure that the "Developer mode" checkbox in the top right-hand corner |
| is checked. |
| </li> |
| |
| <li> |
| Click the <b>Pack extension</b> button. |
| A dialog appears. |
| </li> |
| |
| <li> |
| In the <b>Extension root directory</b> field, |
| specify the path to the extension's folder—for example, |
| <code>C:\myext</code>. |
| (Ignore the other field; |
| you don't specify a private key file |
| the first time you package a particular extension.) |
| </li> |
| |
| <li> |
| Click <b>Package</b>. |
| The packager creates two files: |
| a <code>.crx</code> file, |
| which is the actual extension that can be installed, |
| and a <code>.pem</code> file, |
| which contains the private key. |
| </li> |
| </ol> |
| |
| |
| <p> |
| <b>Do not lose the private key!</b> |
| Keep the <code>.pem</code> file secret and in a safe place. |
| You'll need it later if you want to do any of the following: |
| </p> |
| <ul> |
| <li><a href="#update">Update</a> the extension</li> |
| <li><a href="#upload">Upload</a> the extension to the Chrome Web Store</li> |
| </ul> |
| |
| <p> |
| If the extension is successfully packaged, you'll see a dialog like this |
| that tells you where to find |
| the <code>.crx</code> and <code>.pem</code> files:</p> |
| </p> |
| |
| <img src="{{static}}/images/package-success.png" |
| width="540" height="251" /> |
| |
| |
| <h2 id="update">Updating a package</h2> |
| |
| <p>To create an updated version of your extension:</p> |
| <ol> |
| <li> |
| Increase the version number in <code>manifest.json</code>. |
| </li> |
| |
| <li> |
| Bring up the Extensions management page |
| by going to this URL: <b>chrome://extensions</b> |
| </li> |
| |
| <li> |
| Click the <b>Pack extension</b> button. |
| A dialog appears. |
| </li> |
| |
| <li> |
| In the <b>Extension root directory</b> field, |
| specify the path to the extension's folder—for example, |
| <code>C:\myext</code>. |
| </li> |
| |
| <li> |
| In the <b>Private key file</b> field, |
| specify the location of the |
| already generated <code>.pem</code> file for this extension—for |
| example, <code>C:\myext.pem</code>. |
| </li> |
| |
| <li> |
| Click <b>OK</b>. |
| </li> |
| </ol> |
| |
| <p>If the updated extension is successfully packaged, you'll see a dialog like this:</p> |
| |
| <img src="{{static}}/images/update-success.png" |
| width="540" height="191" /> |
| |
| |
| <h2 id="upload"> Uploading a previously packaged extension to the Chrome Web Store</h2> |
| |
| <p> |
| You can use the Chrome Developer Dashboard |
| to upload an extension that you've previously packaged yourself. |
| However, unless you take special steps, |
| the extension's ID in the Chrome Web Store |
| will be different from its ID in the package you created. |
| This different ID might be a problem if you've |
| distributed your extension package, |
| because it allows users to install multiple versions of your extension, |
| each with its own local data. |
| </p> |
| |
| <p> |
| If you want to keep the extension ID the same, |
| follow these steps: |
| </p> |
| |
| <ol> |
| <li> Rename the private key that was generated |
| when you created the <code>.crx</code> file to <code>key.pem</code>. </li> |
| <li> Put <code>key.pem</code> in the top directory |
| of your extension. </li> |
| <li> Compress that directory into a ZIP file. </li> |
| <li> Upload the ZIP file using the |
| <a href="https://chrome.google.com/webstore/developer/dashboard">Chrome Developer Dashboard</a>. </li> |
| </ol> |
| |
| |
| <h2 id="packaging">Packaging at the command line</h2> |
| |
| <p> |
| Another way to package extensions |
| is by invoking <code>chrome.exe</code> at the command line. |
| Use the <code>--pack-extension</code> flag |
| to specify the location of the extension's folder. |
| Use <code>--pack-extension-key</code> |
| to specify the location of the extension's private key file. |
| For example: |
| </p> |
| |
| <pre> |
| chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem |
| </pre> |
| |
| <h2 id="format">Package format and scripts</h2> |
| <p> |
| For more information on the format, as well as pointers to scripts you can use |
| to create <code>.crx</code> files, see <a href="crx.html">CRX Package Format</a>. |
| </p> |