This page describes how to update an extension or theme ("item") that you
previously published on the Chrome Web Store.

There are two key ways in which you can update your item:

- [Upgrade the item](https://developer.chrome.com/docs/webstore/update.md.txt#upgrade-your-item), publishing a new version of the item on the Chrome Web Store and pushing it to the user base.
- [Update the % rollout](https://developer.chrome.com/docs/webstore/update.md.txt#update-rollout) for items that were previously published with partial rollout. (Available to items with over 10,000 seven-day active users)

These update options are described in the following sections.

## Upgrade your item

To upgrade your item, use the [Chrome Developer Dashboard](https://chrome.google.com/webstore/devconsole).

To upgrade an existing Chrome Web Store item, you need to upload a new zip file
for your item, including all changed and unchanged files; update any changed
metadata for your listing; and submit the item for a new review.

> [!NOTE]
> **Note:** Your upgrade will be published to the same channel (for example public or trusted testers) as previous versions. Publishing to a different channel may require special steps, as described below.

Use the [Distribution tab](https://developer.chrome.com/docs/webstore/cws-dashboard-distribution.md.txt#setting-the-visibility) to publish to a different channel.

- To move an item from testing to production, change your visibility from Private to Public or to Unlisted and then republish.
- To move a published item back to private (for example, from production back to testing), you must [unpublish](https://developer.chrome.com/docs/webstore/account-deletion.md.txt#remove-listing), change the visibility to Private, and then republish. The unpublishing step is necessary to move an item "backwards" from production to testing. Note: making the extension public again requires you to submit a new version of your extension. This new version needs going through the review process again.
- To continue a testing program in parallel with a published version, you can create a separate Chrome Web Store item for your [testing program](https://developer.chrome.com/docs/webstore/cws-dashboard-distribution.md.txt#private-visibility-trusted-testers).

> [!IMPORTANT]
> **Key point:** The Chrome Web Store allows the publication of testing and production versions. Make sure you [follow these guidelines](https://developer.chrome.com/docs/webstore/program-policies/spam-faq.md.txt#test-version) to avoid being flagged as Repetitive Content.

### Upload an updated zip file

If you're changing any code, the manifest, or other assets packaged with your
extension, you must make a new zip file and upload the new package. Make sure
you increment the **version number**. Each new version must have a larger
version number than the previous version.

In the developer dashboard entry for your item, on the Package tab, use the
Upload New Package button to upload the zip file:

![Screenshot of the Chrome Web Store developer dashboard package tab for an item](https://developer.chrome.com/static/docs/webstore/update/image/screenshot-the-chrome-we-3ebbeb43f4634.png)

### Update the listing metadata

If you're changing anything about the Chrome Web Store listing for your item,
its distribution, or details of your privacy policy, you must update the
information on the developer dashboard. You update this information on the same
tabs used for creating a new item:

- The [Store listing](https://developer.chrome.com/docs/webstore/cws-dashboard-listing.md.txt) tab contains details of your listing and how it should display in the Chrome Web Store.
- The [Privacy practices](https://developer.chrome.com/docs/webstore/cws-dashboard-privacy.md.txt) tab is where you include declarations about how your item uses privacy and security related features.
- The [Distribution](https://developer.chrome.com/docs/webstore/cws-dashboard-distribution.md.txt) tab lets you declare in-app purchases and control which countries will list your item and which set of users will see it.

### Set partial rollout percentage

If your item has a large user base (over 10,000), the distribution tab will
include a **Percentage rollout** option to restrict the update only to a
fraction of the user base:

![Developer Dashboard showing Distribution tab with visible percentage rollout field](https://developer.chrome.com/static/docs/webstore/update/image/partial-rollout.png)

This lets you gradually roll out your item to ensure that any unexpected
problems will have minimal impact.

> [!NOTE]
> **Note:** This is only available for new versions of an **already-published** item with over **10,000 seven-day active users** . The section **does not appear until
> a new draft has been uploaded**, and is disabled for drafts once they have been submitted for review. If your extension's last published version has been taken down or warned, you must publish your next version to 100% of users.

Once an item with partial rollout has been published, you can later [increase
the percent rollout](https://developer.chrome.com/docs/webstore/update#update-rollout) without resubmitting the item for review,
until you eventually reach 100% of users.

It's not possible to run multiple partial rollouts simultaneously. If you
publish a new version of your extension during a partial rollout, the prior
version will stop being rolled out to any further users.

### Submit the update

When you submit an update for review, it doesn't yet affect your published item.
Existing users will see no change and new users can continue to install the
previously published, current version. Only when the item is later published
will these users be affected.

> [!IMPORTANT]
> **Key point:** When an update requires additional permissions, users will be prompted to accept them or disable the extension.

To submit your update for review:

1. Make sure you've completed the details on all the tabs described above.
2. Click the **Submit for Review** button.
3. The following dialog appears, letting you confirm that you want to submit the item for review.

![Screenshot of the Chrome Web Store confirm submission dialog](https://developer.chrome.com/static/docs/webstore/update/image/screenshot-the-chrome-we-616359bda3f9a.png)

### Deferred publishing option

This dialog also lets you control the timing of your item's publishing. If you
uncheck the checkbox, your item will **not** be published immediately after its
review is complete. Instead, after it passes the review your item will become
ready for you to publish. This lets you wait until you are ready (for example,
with marketing announcements) and then manually publish it at a time of your
choosing.

Once the review is complete, you will have up to **30 days** to publish. After
that period expires, the staged submission will revert to a draft which will
have to be submitted again for review. You can check when your staged submission
will expire under the status of your item.

![Chrome Web Store
staged item
status](https://developer.chrome.com/static/docs/webstore/update/image/chrome-web-store-staged-i-cf735d85956f1.png)

### Review process

After you submit the item for review, it will undergo a review process. This is
essentially the same review as new items receive; the time for this review
depends on the nature of your item and the extent of your changes. See [review
times](https://developer.chrome.com/docs/webstore/review-process#review-time) for more details.

## Update your percent rollout

For items that you previously published with [partial rollout](https://developer.chrome.com/docs/webstore/update.md.txt#partial-rollout),
you can update the percent rollout using the Package tab:

![Screenshot of the Chrome Web Store update percent rollout field](https://developer.chrome.com/static/docs/webstore/update/image/screenshot-the-chrome-we-5ef2564ab5c0f.png)

The **Published** item information appears in the right column. To increase the
rollout fraction, enter the increased percentage target in the **Published to a
percentage of users** field, and then click **Update**.

> [!NOTE]
> **Note:** Changing the %rollout does *not* trigger a new review.

## Rollback to a previous version

If you've released an extension update with bugs and want to rollback to the
earlier version immediately, use the [Web Store
rollback](https://developer.chrome.com/docs/webstore/rollback).

## Manage your item

In the three-dot menu for an item, one or more of the following options will be
available to you, depending on the status of your item.

Cancel publish
:   Use when your item is ready to be published but you need to revert it to a
    draft to make further edits. You will need to submit your package again for
    review before publishing it.

Cancel review
:   Use when your item is awaiting review. This review will be cancelled letting
    you make changes to your draft.

Defer publish
:   Use to prevent automatic publication of an item after passing review. Instead,
    once it passes review, you will need to publish it manually.

Unpublish
:   Remove the published version of this item from the Chrome Web Store.

## Protect your package updates

You may add an additional layer of security to updates using **Verified CRX
Uploads** under **Package**. After opting in, all updates to your extension
package must be signed with a key you provide. This can prevent malicious
updates if your developer account is compromised.

### Create a signing key pair

You must use an RSA key pair. A 2048-bit RSA key pair can be generated from a
terminal using the openssl tool:

```bash
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out privatekey.pem
```

Alternatively, Chrome can generate a key pair when [signing your
extension](https://developer.chrome.com/docs/webstore/update#sign-extension-updates), if a private key file isn't provided.

> [!WARNING]
> **Warning:** Ensure that you keep your private key safe and secure. In particular:
>
> - Don't upload the private key to any public repository or other place
> - Don't store your private key in your Google Account. This means someone with access to the Developer Dashboard through your Google Account could publish on your behalf.
> - Consider storing your private key securely using a keystore like PKCS#12 or Java Keystore

> [!WARNING]
> **Warning:** Don't lose your private key; otherwise, you must reach out to CWS support, and replacement can take up to one week.

### Opt in to verified CRX uploads

Navigate to **Package** on the developer dashboard and locate the **Verified CRX
Uploads** section.

![Opt in to verified CRX uploads](https://developer.chrome.com/static/docs/webstore/update/image/verified-crx-uploads.png)

After clicking **Opt In**, you must provide your public key, which can be
extracted from the key pair you created:

```bash
openssl rsa -in privatekey.pem -pubout
```

### Sign your extension updates

Going forward, all package updates to your item must be signed with your signing
key, using the CRX file format. You can sign your extension in Chrome by going
to `chrome://extensions`, enabling **Developer Mode** , and clicking
**Pack Extension**. This can also be performed from a terminal:

```bash
google-chrome --pack-extension=/path/to/extension/root --pack-extension-key=privatekey.pem
```

> [!NOTE]
> **Note:** You may need to replace `google-chrome` with the full path to your Chrome executable.

Update your item by uploading the CRX file to Chrome Web Store using the
**Upload New Package** button. You can also use the [`upload`
method](https://developer.chrome.com/docs/webstore/using-api#uploadexisting) of the Chrome Web Store API.
When uploading a CRX file with the API, include the following HTTP headers so
the server treats the package as a CRX file:

```bash
X-Goog-Upload-Protocol: raw
X-Goog-Upload-File-Name: EXTENSION_FILE_NAME.crx
```

## Additional resources

- Learn how to [check on your item's review status](https://developer.chrome.com/docs/webstore/check-review.md.txt).
- Understand the [Chrome Web Store Review Process](https://developer.chrome.com/docs/webstore/review-process.md.txt).