You need either the OAuth trio or the service account, not both. When both are configured, the service account wins.
Prerequisites
- Register a developer account at the Chrome Web Store Developer Dashboard. Registration has a one-time $5 fee.
- Build a store zip (
npx extension build --browser chrome --zip). - Upload that zip manually in the dashboard to create the item.
- Copy the extension ID from the item’s dashboard URL.
- Copy the publisher ID: it is the UUID in your dev console URL,
chrome.google.com/webstore/devconsole/<UUID>.
The easy path: npx extension-deploy init
The wizard in @extension.dev/deploy
acquires and verifies every Chrome value, and it mints the refresh token for
you through a local loopback consent flow:
127.0.0.1 receiver, exchanges it for a refresh token,
verifies the result against the live Chrome Web Store API, and writes
everything to .env.submit.
Before you run it, create the OAuth client (steps 1 to 3 below). The wizard
handles the rest.
Do not use the Google OAuth Playground to mint the refresh token. The
Playground requires a Web application client with its redirect URI, and the
Chrome Web Store flow requires a Desktop app client. Combining them fails with
redirect_uri_mismatch. The init wizard’s loopback flow is the supported
path for Desktop app clients.Create the OAuth client
- Create or choose a project in the Google Cloud Console.
- Enable the Chrome Web Store API for that project.
- On the credentials page, create an OAuth client ID with application type Desktop app. A Web application client does not work here.
- Copy the client ID and the client secret.
- Run
npx extension-deploy initto mint the refresh token, as described above. The token authorizes thehttps://www.googleapis.com/auth/chromewebstorescope.
Alternative: a service account
A Google Cloud service account avoids OAuth consent entirely and is the most stable choice for CI:- In the Google Cloud Console, create a service account in the same project that has the Chrome Web Store API enabled.
- Create a JSON key for it and download the file.
- In the Chrome Web Store dev console, open Account and add the service account’s email address to your publisher. One service account per publisher.
Blast radius and rotation
To rotate, mint a new refresh token withnpx extension-deploy init (or a new
service account key) and re-enter it wherever it is stored. Saved platform
secrets are write-only, so rotation always means re-entering the value.

