Warning: As of Chrome 33, Windows stable/beta channel users can only download extensions hosted in the Chrome Web store, except for installs via enterprise policy or developer mode (see Protecting Windows users from malicious extensions). You can still create your own .crx file and use it for testing in the dev channel, but you can't host that file on your own server.

This page tells you how to host .crx files on your own server. If you distribute your extension, app, or theme solely through the Chrome Web Store, you don't need this page. Instead, consult the store help and developer documentation.

By convention, extensions, installable web apps, and themes are served—whether by the Chrome Web Store or by a custom server—as .crx files. When you upload a ZIP file with the Chrome Developer Dashboard, the dashboard creates the .crx file for you.

If you aren't publishing using the dashboard, you need to create the .crx file yourself, as described in Packaging. You can also specify autoupdate information to ensure that your users will have the latest copy of the .crx file.

A server that hosts .crx files must use appropriate HTTP headers, so that users can install the file by clicking a link to it.

Google Chrome considers a file to be installable if either of the following is true:

  • The file has the content type application/x-chrome-extension
  • The file suffix is .crx and both of the following are true:
    • The file is not served with the HTTP header X-Content-Type-Options: nosniff
    • The file is served with one of the following content types:
      • empty string
      • "text/plain"
      • "application/octet-stream"
      • "unknown/unknown"
      • "application/unknown"
      • "*/*"

The most common reason for failing to recognize an installable file is that the server sends the header X-Content-Type-Options: nosniff. The second most common reason is that the server sends an unknown content type—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 .crx file at another server.