summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions/docs/static/packaging.html
blob: 5d539ab79f53d2c2f210085691a4774009581323 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<div id="pageData-title" class="pageData">Packaging</div>
<div id="pageData-showTOC" class="pageData">true</div>

<p>
Extensions are packaged as signed zip files
with the file extension "crx"
(for example, <code>myextension.crx</code>).
Each extension has its own unique key pair.
The public key is used as the unique identifier for the extension.
The private key is kept private
and used to sign each version of the extension.
</p>

<!--
[PENDING: Perhaps mention that once the gallery is up,
creating and updating a package will be much easier.
Also refer to instructions on submitting an extension
for inclusion in the gallery.]
-->

<h2>Creating a package</h2>

<p>To package an extension:</p>
<ol>
  <li>
    Bring up the Extensions page
    by going to this URL:
    <blockquote>
    <b>chrome://extensions</b>
    </blockquote>
  </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>OK</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>Import the extension into the extensions gallery,
once the gallery becomes available</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="images/package-success.gif"
  width="554" height="208" />


<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 page
    by going to this URL: <b>chrome://extensions</b>
  </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="images/update-success.gif"
  width="298" height="160" />

<h2>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=<em>ext-folder-path</em> --pack-extension-key=<em>ext-key-path</em>
</pre>

<p>
To suppress the dialog,
add <code>--no-message-box</code> to the command.
</p>