extension-publishing
Workflow
prepare → package → submit → review → publish
- Prepare: assets, privacy policy, permission justifications, manifest
- Package:
zip source (exclude dev files), validate manifest
- Submit: Chrome Web Store Developer Dashboard
- Review: 1–3 days typical; up to 7 days for new publishers
- Publish: auto or manual rollout
Pre-Submission Checklist (Quick)
Full checklist: references/submission-checklist.md
Top 10 Rejection Reasons
- Single purpose violation — does too many unrelated things
- Excessive/unnecessary permissions
- Missing privacy policy (required when user data collected)
- Missing permission justification in submission form
- Description doesn't match functionality
- Keyword spam in title/description
- Remote code execution (
eval, external scripts)
- Improper user data handling or disclosure
- Extension non-functional or crashes
- Broken features / inaccessible links
Full details + fixes: references/common-rejections.md
Listing Optimization Essentials
- Title:
<Action verb> + <Benefit>, max 45 chars, no keyword stuffing
- Description first 150 chars: shown in search — make them count
- Structure: problem → solution → key benefits → CTA
- Screenshots: annotate features, show real UI, 1280×800
- Category: choose most specific fit
Full guide: references/store-listing-optimization.md
CI/CD with chrome-webstore-upload
Install
npm install -g chrome-webstore-upload-cli
Upload & Publish
# Upload new version
chrome-webstore-upload upload \
--source extension.zip \
--extension-id $EXT_ID \
--client-id $CLIENT_ID \
--client-secret $CLIENT_SECRET \
--refresh-token $REFRESH_TOKEN
# Publish
chrome-webstore-upload publish \
--extension-id $EXT_ID \
--client-id $CLIENT_ID \
--client-secret $CLIENT_SECRET \
--refresh-token $REFRESH_TOKEN
Required Env Vars
| Var |
Source |
EXT_ID |
Dashboard URL |
CLIENT_ID |
GCP OAuth client |
CLIENT_SECRET |
GCP OAuth client |
REFRESH_TOKEN |
Run OAuth flow once |
Full GitHub Actions pipeline: references/ci-cd-automation.md
Plasmo Built-in Publishing
Plasmo has integrated browser store submission (https://docs.plasmo.com/):
plasmo build # Build for production
plasmo package # Create store-ready zip
Reference Files
| File |
Content |
| submission-checklist.md |
Complete pre-submission checklist with assets, manifest, privacy |
| store-listing-optimization.md |
Title, description, screenshots, keywords, localization |
| common-rejections.md |
Top rejections with fixes, appeal process |
| ci-cd-automation.md |
GitHub Actions, versioning, build pipeline |
1---2name: extension-publish3description: Prepare, submit, and optimize Chrome Web Store listings. Covers workflow, checklist, rejection reasons, listing optimization, and CI/CD automation.4---56# extension-publishing78## Workflow910```11prepare → package → submit → review → publish12```13141. **Prepare**: assets, privacy policy, permission justifications, manifest152. **Package**: `zip` source (exclude dev files), validate manifest163. **Submit**: Chrome Web Store Developer Dashboard174. **Review**: 1–3 days typical; up to 7 days for new publishers185. **Publish**: auto or manual rollout1920---2122## Pre-Submission Checklist (Quick)2324- [ ] Manifest v3 only (MV2 deprecated)25- [ ] `name`, `version`, `description` set in manifest26- [ ] Icons: 16×16, 48×48, 128×128 PNG27- [ ] Screenshots: min 1, 1280×800 or 640×40028- [ ] Single purpose clearly defined29- [ ] Only permissions actually used30- [ ] Privacy policy URL (required if collecting data)31- [ ] Permission justification field filled for sensitive perms32- [ ] No remote code execution (`eval`, remote scripts)33- [ ] All features functional in review build3435Full checklist: [references/submission-checklist.md](references/submission-checklist.md)3637---3839## Top 10 Rejection Reasons40411. Single purpose violation — does too many unrelated things422. Excessive/unnecessary permissions433. Missing privacy policy (required when user data collected)444. Missing permission justification in submission form455. Description doesn't match functionality466. Keyword spam in title/description477. Remote code execution (`eval`, external scripts)488. Improper user data handling or disclosure499. Extension non-functional or crashes5010. Broken features / inaccessible links5152Full details + fixes: [references/common-rejections.md](references/common-rejections.md)5354---5556## Listing Optimization Essentials5758- **Title**: `<Action verb> + <Benefit>`, max 45 chars, no keyword stuffing59- **Description first 150 chars**: shown in search — make them count60- **Structure**: problem → solution → key benefits → CTA61- **Screenshots**: annotate features, show real UI, 1280×80062- **Category**: choose most specific fit6364Full guide: [references/store-listing-optimization.md](references/store-listing-optimization.md)6566---6768## CI/CD with chrome-webstore-upload6970### Install7172```bash73npm install -g chrome-webstore-upload-cli74```7576### Upload & Publish7778```bash79# Upload new version80chrome-webstore-upload upload \81 --source extension.zip \82 --extension-id $EXT_ID \83 --client-id $CLIENT_ID \84 --client-secret $CLIENT_SECRET \85 --refresh-token $REFRESH_TOKEN8687# Publish88chrome-webstore-upload publish \89 --extension-id $EXT_ID \90 --client-id $CLIENT_ID \91 --client-secret $CLIENT_SECRET \92 --refresh-token $REFRESH_TOKEN93```9495### Required Env Vars9697| Var | Source |98|-----|--------|99| `EXT_ID` | Dashboard URL |100| `CLIENT_ID` | GCP OAuth client |101| `CLIENT_SECRET` | GCP OAuth client |102| `REFRESH_TOKEN` | Run OAuth flow once |103104Full GitHub Actions pipeline: [references/ci-cd-automation.md](references/ci-cd-automation.md)105106### Plasmo Built-in Publishing107108Plasmo has integrated browser store submission (https://docs.plasmo.com/):109```bash110plasmo build # Build for production111plasmo package # Create store-ready zip112```113114---115116## Reference Files117118| File | Content |119|------|---------|120| [submission-checklist.md](references/submission-checklist.md) | Complete pre-submission checklist with assets, manifest, privacy |121| [store-listing-optimization.md](references/store-listing-optimization.md) | Title, description, screenshots, keywords, localization |122| [common-rejections.md](references/common-rejections.md) | Top rejections with fixes, appeal process |123| [ci-cd-automation.md](references/ci-cd-automation.md) | GitHub Actions, versioning, build pipeline |