blob: dae19b709fb3811e7a4d3dc777ee9d0a6357537a [file] [log] [blame]
<h1>Hosting for Linux</h1>
<p>
Extensions hosted on a server outside of the
<a href="http://chrome.google.com/webstore">Chrome Web Store</a>
can only be installed by Linux users.
This page describes how to serve <code>.crx</code> files
from a personal server.
If distributing an extension or theme solely through the
<a href="http://chrome.google.com/webstore">Chrome Web Store</a>,
consult the <a href="/webstore">store developer documentation</a>.
</p>
<p>
Extensions and themes are served as <code>.crx</code> files.
When uploading through the
<a href="https://chrome.google.com/webstore/developer/dashboard">Chrome Developer Dashboard</a>,
the dashboard creates the <code>.crx</code> file automatically.
If published on a personal server,
the <code>.crx</code> file will need to be created locally,
as described in <a href="packaging">Packaging</a>.
<a href="autoupdate">Autoupdate</a> information can be included
to ensure users always have the latest copy.
</p>
<p>
A server that hosts <code>.crx</code> files
must use appropriate HTTP headers,
so that users can install the file
by clicking a link to it.
</p>
<p>
Google Chrome considers a file to be installable
if <b>either</b> of the following is true:
</p>
<ul>
<li>
The file has the content type
<code>application/x-chrome-extension</code>
</li>
<li>
The file suffix is <code>.crx</code>
and <b>both</b> of the following are true:
<ul>
<li>
The file <b>is not</b> served with
the HTTP header <code>X-Content-Type-Options: nosniff</code>
</li>
<li>
The file <b>is</b> served
with one of the following content types:
<ul>
<li> empty string </li>
<li> "text/plain" </li>
<li> "application/octet-stream" </li>
<li> "unknown/unknown" </li>
<li> "application/unknown" </li>
<li> "*/*" </li>
</ul>
</li>
</ul>
</li>
</ul>
<p>
The most common reason for failing to recognize an installable file
is that the server sends the header
<code>X-Content-Type-Options: nosniff</code>.
The second most common reason
is that the server sends an unknown content type&mdash;one
that isn't in the previous list.
To fix an HTTP header issue,
either change the configuration of the server
or try hosting the <code>.crx</code> file at another server.
</p>