blob: 49dbe1698163475b4dbddee8a74b60ee3e97f15f [file] [log] [blame]
<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"&mdash;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&mdash;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&mdash;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&mdash;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&mdash;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>