• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<div id="pageData-name" class="pageData">Other Deployment Options</div>
2<div id="pageData-showTOC" class="pageData">true</div>
3
4<p>
5Usually, users install their own extensions.
6But sometimes you might want an extension
7to be installed automatically.
8Here are two typical cases:
9</p>
10
11<ul>
12  <li>
13    An extension is associated with some other software,
14    and the extension should be installed
15    whenever the user installs that other software.
16    The extension could also be uninstalled
17    when the user removes that other software.
18  </li>
19  <li>
20    A network admin wants to install the same extensions
21    throughout the company.
22  </li>
23</ul>
24
25<p>
26An extension that's installed automatically is known as an
27<em>external extension</em>.
28Google Chrome supports two ways of
29installing external extensions:
30</p>
31
32<ul>
33  <li> Using a preferences JSON file </li>
34  <li> Using the Windows registry (Windows only) </li>
35</ul>
36
37<p>
38Both ways support installing an extension from a <code>.crx</code> extension
39file on the user's computer.  The preferences JSON file also supports installing
40an extension hosted at an
41<a href="autoupdate.html#H2-1">update URL</a>.
42See <a href="hosting.html">hosting</a> for details on hosting an extension.
43</p>
44
45<h2 id="prereqs">Before you begin</h2>
46
47<p>
48First, package a
49<a href="packaging.html"><code>.crx</code> file</a>
50and make sure that it installs successfully.
51</p>
52<p>
53If you wish to install from an
54 <a href="autoupdate.html#H2-1">update URL</a>, ensure that the extension
55is properly <a href="hosting.html">hosted</a>.
56</p>
57
58<p>
59Then, before you edit the preferences file or the registry,
60make a note of the following:
61</p>
62
63<ul>
64 <li> The intended <b>location</b> of the extension's <code>.crx</code> file,
65        or the update URL from which it is served </li>
66 <li> The extension's <b>version</b>
67   (from the manifest file or the <b>chrome://extensions</b> page) </li>
68 <li> The extension's <b>ID</b>
69   (from the <b>chrome://extensions</b> page
70   when you've loaded the packed extension) </li>
71</ul>
72
73<p>
74The following examples assume the version is <code>1.0</code>
75and the ID is <code>aaaaaaaaaabbbbbbbbbbcccccccccc</code>.
76</p>
77
78<h2 id="preferences">Using a preferences file</h2>
79
80<p class="note">
81<b>Windows note:</b>
82Until <a href="http://crbug.com/41902">bug 41902</a> is fixed,
83you might want to use the <a href="#registry">Windows registry</a>
84instead of the preferences file.
85
86</p>
87
88<ol>
89<li>If you are installing from a file, make the <code>.crx</code> extension
90file available to the machine you want to install the extension on.
91(Copy it to a local directory or to a network share for example,
92<code>\\server\share\extension.crx</code>
93or <code>/home/share/extension.crx</code>.)
94</li>
95<li>Locate the <code>external_extensions.json</code> file
96  under the Google Chrome installation directory.
97  If the file doesn't exist, create it.
98  The location depends on the operating system.
99  <dl>
100  <dt> Windows: </dt>
101    <dd> <code><em>chrome_root</em>\Application\<em>chrome_version</em>\Extensions\</code>
102    <br />
103    Example: <code>c:\Users\Me\AppData\Local\Google\Chrome\Application\6.0.422.0\Extensions\</code>
104    </dd>
105  <dt> Mac OS X: </dt>
106    <dd> <code>/Applications/Google Chrome.app/Contents/Extensions/</code> </dd>
107  <dt> Linux: </dt>
108    <dd> <code>/opt/google/chrome/extensions/</code> <br>
109    <b>Note:</b> Use <code>chmod</code> if necessary
110    to make sure that <code>extensions/external_extensions.json</code>
111    is world-readable.
112    </dd>
113  </dl>
114</li>
115<li> Add an entry to <code>external_extensions.json</code>
116for your extension's ID.  If you are installing from a file, specify the
117extension's location and version with fields named "external_crx" and
118"external_version".
119
120Example:
121<pre>{
122  "aaaaaaaaaabbbbbbbbbbcccccccccc": {
123    "external_crx": "/home/share/extension.crx",
124    "external_version": "1.0"
125  }
126}</pre>
127
128<p class="note">
129<b>Note:</b>
130You need to escape
131each <code>\</code> character in the location.
132For example,
133<code>\\server\share\extension.crx</code> would be
134<code>"\\\\server\\share\\extension.crx"</code>.
135</p>
136<p>
137If you are installing from an update URL, specify the extension's update URL
138with field name "external_update_url".
139</p>
140Example:
141<pre>{
142  "aaaaaaaaaabbbbbbbbbbcccccccccc": {
143    "external_update_url": "http://myhost.com/mytestextension/updates.xml"
144  }
145}</pre>
146</li>
147
148<li>Save the JSON file. </li>
149<li>Launch Google Chrome and go to <b>chrome://extensions</b>;
150you should see the extension listed. </li>
151</ol>
152
153<h2 id="registry">Using the Windows registry</h2>
154
155<ol>
156<li>Make the <code>.crx</code> extension file available
157to the machine you want to install the extension on.
158(Copy it to a local directory or to a network share &mdash;
159for example, <code>\\server\share\extension.crx</code>.)
160</li>
161<li>Find or create the following key in the
162registry:
163<ul>
164  <li> 32-bit Windows: <code>HKEY_LOCAL_MACHINE\Software\Google\Chrome\Extensions</code> </li>
165  <li> 64-bit Windows: <code>HKEY_LOCAL_MACHINE\Software\Wow6432Node\Google\Chrome\Extensions</code> </li>
166</ul>
167</li>
168
169<li>Create a new key (folder)
170under the <b>Extensions</b> key with the
171same name as the ID of your extension
172(for example, <code>aaaaaaaaaabbbbbbbbbbcccccccccc</code>).
173</li>
174<li>Create two string values (<code>REG_SZ</code>) named "path" and "version",
175  and set them to the extension's location and version.
176  For example:
177<ul>
178  <li>path: <code>\\server\share\extension.crx</code> </li>
179  <li>version: <code>1.0</code> </li>
180</ul>
181</li>
182<li>Launch the browser and go to
183<b>chrome://extensions</b>; you should
184see the extension listed. </li>
185</ol>
186
187<h2 id="updating">Updating and uninstalling</h2>
188
189<p>Google Chrome scans the metadata entries
190in the preferences and registry
191each time the browser starts, and makes
192any necessary changes to the installed
193external extensions. </p>
194
195<p>To update your extension to a new version,
196update the file, and then update the version
197in the preferences or registry. </p>
198
199<p>To uninstall your extension
200(for example, if your software is uninstalled),
201remove the metadata from the preferences file
202or registry. </p>
203
204<h2 id="faq">FAQ</h2>
205
206<p>
207This section answers common questions about external extensions.
208</p>
209
210<br>
211
212<p><b>Can I specify a URL as a path to the external extension?</b> </p>
213<p>Yes, if you host the extension as explained in
214<a href="hosting.html">hosting</a>.
215</p>
216
217<br>
218
219<p><b>What are some common mistakes when installing with the preferences
220file?</b></p>
221<ul>
222  <li>
223    Not specifying the same id/version
224    as the one listed in the <code>.crx</code> </li>
225  <li>
226    <code>external_extensions.json</code> is in the wrong location </li>
227  <li>
228    Syntax error in JSON file
229    (forgetting to separate entries with comma or
230    leaving a trailing comma somewhere) </li>
231  <li>
232    Extra curly brackets around the top level dictionary </li>
233  <li>
234    JSON file entry points to the wrong path
235    to the <code>.crx</code> (or path specified but no filename) </li>
236  <li>
237    Backslashes in UNC path not escaped
238    (for example, <code>"\\server\share\file"</code> is wrong;
239    it should be <code>"\\\\server\\share\\extension"</code>) </li>
240  <li>
241    Permissions problems on a network share </li>
242</ul>
243
244<br>
245
246<p><b>What are some common mistakes when installing with the registry?</b> </p>
247<ul>
248  <li>Not specifying the same id/version
249    as the one listed in the <code>.crx</code> </li>
250  <li>Key created in the wrong location in the registry </li>
251  <li>Registry entry points to the wrong path to the <code>.crx</code> file
252    (or path specified but no filename) </li>
253  <li>Permissions problems on a network share </li>
254</ul>
255
256<br>
257
258<p><b>What if the user uninstalls the extension?</b> </p>
259<p>If the user uninstalls the extension through the UI, it will no
260longer be installed or updated on each startup. In other words, the
261external extension is blacklisted. </p>
262
263<br>
264
265<p><b>How do I get off the blacklist?</b> </p>
266<p>If the user uninstalls your extension, you should respect that
267decision. However, if you (the developer) accidentally uninstalled
268your extension through the UI,
269you can remove the blacklist tag
270by installing the extension normally
271through the UI, and then uninstalling it. </p>
272