Getting started
extport is currently in closed beta — new accounts are reviewed by hand. Sign in once and you’ll either land in the dashboard right away, or see a waiting screen until your account is activated. Join the Discord to reach us directly while you wait.
The examples on this page and the store pages all use one real, published extension — Redirector, which ships on all four stores — so every id shown is something you can look up yourself, not a placeholder.
1. Sign in
Section titled “1. Sign in”Go to dash.extport.dev and sign in with GitHub.
2. Create an extension
Section titled “2. Create an extension”Click Add and give it a name. This is the thing you’ll push versions to — one extension can have a target configured for each of Chrome, Firefox, Edge, and Safari.

3. Add your store credentials
Section titled “3. Add your store credentials”Under Settings → Store credentials, add a credential for each store you publish to. Each row shows the store, a label, the last four characters of the credential, and whether it verified successfully:

See the per-store pages for exactly which fields you need and where to find them:
4. Connect a store target
Section titled “4. Connect a store target”Open your extension and click Add a store. This is where the store’s own listing id and one of your credentials
get linked together — for Redirector on Chrome, that’s its real item id, lioaeidejmlpffbndjhaameocfldlhin
(from its Chrome Web Store listing):

5. Get an API key
Section titled “5. Get an API key”Under Settings → API keys, name a key and click Create. The full value is shown exactly once — copy it immediately, since only the last four characters are shown afterward:

This is what the CLI and GitHub Actions use to push on your behalf — treat it like a password.
6. Push a build
Section titled “6. Push a build”Either from your own machine:
npx extport loginnpx extport push dist/my-extension.zip --extension my-extension --version 1.0.0Or from CI, using the published GitHub Actions:
- uses: extport-dev/actions/push@v1 with: api-key: ${{ secrets.EXTPORT_API_KEY }} extension: my-extension zip-path: dist/my-extension.zipOmit --store/store: to push a universal zip to every store target you’ve configured for that extension, or
target one store specifically (e.g. for Firefox’s separate source-zip requirement). Safari has no zip upload at
all — it’s built and signed locally via extport safari-build, see the Safari page.