Turn an extension repository into a review-ready source package, store-assets package, and release ZIP. Preserve existing work, use real product behavior as the source of truth, and involve the user in visual identity decisions.
Start here
-
Locate the extension root and
manifest.json. If several manifests exist, identify development and built variants; ask only when the intended upload target remains ambiguous. -
Read references/chrome-web-store-spec.md. Recheck the linked official documentation when the user is actively submitting because Store requirements can change.
-
Run:
python3 scripts/audit_extension.py /absolute/path/to/extension -
Inspect the extension UI, purpose, permissions, host matches, data flows, existing brand assets, README, tests, build process, and Git status.
-
State the proposed deliverables and where they will be written. Do not push, publish, change repository visibility, or overwrite approved branding unless the user requests it.
Separate the three deliverable layers
Repository files
Keep these with the source repository:
manifest.jsonand runtime sourceicons/icon16.png,icon32.png,icon48.png, andicon128.png- editable master icon or design source outside the upload ZIP
README.mdPRIVACY_POLICY.md- license and support information when applicable
Store-assets package
Default to <extension-root>/store-assets/ unless the repository already has a convention:
store-assets/
├── source/ # Editable masters and design sources
├── icons/
│ └── store-icon-128.png
├── screenshots/
│ ├── screenshot-01-overview-1280x800.png
│ ├── screenshot-02-core-action-1280x800.png
│ └── screenshot-03-result-1280x800.png
├── promo/
│ ├── small-promo-440x280.png
│ └── marquee-promo-1400x560.png
├── listing/
│ ├── store-listing-zh-CN.md
│ ├── permission-justifications.md
│ └── release-notes.md
├── privacy/
│ └── PRIVACY_POLICY.md
└── submission-checklist.md
Initialize the structure and templates when useful:
python3 scripts/init_store_assets.py /absolute/path/to/extension
Upload package
Create a clean ZIP containing only runtime files needed by the extension. Exclude Git data, node_modules, tests, caches, raw design files, screenshots, store promotional assets, secrets, and development-only material. Validate the unpacked directory in Chrome before zipping. Do not assume the repository root is the runtime package when a build step exists.
Workflow
1. Establish product truth
- Derive the single purpose from actual behavior, not marketing wishes.
- Identify the primary user, trigger action, input, transformation, and output.
- Record unsupported or unfinished features; do not depict them in screenshots or copy.
- Minimize permissions before writing justifications. Remove a permission only after confirming it is unused and testing the extension.
2. Co-create the icon
Read references/visual-production.md.
- Audit existing icons, product motifs, color palette, and trademark risks.
- Present three clearly different original directions with motif, palette, personality, and small-size behavior.
- Ask the user to choose or combine a direction before replacing plugin icons.
- Prefer an image-generation tool for original exploration when available; do not copy a third-party logo or recognizable brand mark.
- Test the selected design at 16, 32, 48, and 128 px. Simplify details that disappear or blur.
- Export consistent PNGs and update
manifest.jsonpaths. Preserve an editable high-resolution source separately.
Any icon approval pauses the replacement step, not the rest of the audit or copy preparation.
3. Write the README
Use the repository's established documentation style. If none exists, start from assets/extension-readme-template.md and produce a polished product page with:
- concise value proposition
- feature list grounded in the code
- install from Chrome Web Store and local unpacked-install instructions
- usage flow
- permission explanation
- privacy-policy and support links
- development/build instructions when present
- license status
Do not claim a public store URL before one exists.
4. Capture 3–5 screenshots
Use real extension UI and representative synthetic data. Never expose private tabs, accounts, tokens, personal documents, or browser chrome that is irrelevant to the product.
Recommended sequence:
- overview and value proposition
- primary action or configuration
- generated result or completed workflow
- secondary feature or customization
- export/share state when genuinely supported
Use 1280x800 by default. Promotional framing may add concise captions and branding, but the represented UI must remain accurate. Use browser or Chrome control tools to exercise the real extension before capture.
5. Produce promotional tiles
- Small tile: 440x280, one visual idea, recognizable icon, minimal copy.
- Marquee tile: 1400x560, spacious composition, primary benefit, consistent brand.
- Export JPEG or non-alpha 24-bit PNG.
- Flatten transparency and verify exact dimensions.
- Do not use ratings, unsupported awards, misleading controls, excessive text, or trademarked browser/product logos without permission.
6. Prepare store copy and review fields
Start from assets/store-listing-template.md. Provide copy that can be pasted directly into the Developer Dashboard:
- package title and summary review
- detailed description
- category and language recommendation
- single-purpose statement
- one justification per requested permission
- host-permission justification
- remote-code declaration and explanation
- data-use disclosures and Limited Use confirmation
- homepage, support, privacy-policy, and repository URLs
- reviewer test instructions if login or setup is required
- release notes
Read references/review-and-privacy.md before writing compliance text.
7. Write and host the privacy policy
Start from assets/privacy-policy-template.md, then make every statement match the code audit.
- Cover collected/accessed data, purpose, processing location, storage, retention, deletion, sharing, third parties, security, permissions, host access, remote code, policy changes, and contact.
- Add
PRIVACY_POLICY.mdto the repository for maintenance. - Provide a stable public HTTPS URL for the Store. Verify it without authentication.
- Never make a repository public or deploy a site without user authorization.
8. Validate
Run:
python3 scripts/validate_store_assets.py /absolute/path/to/extension/store-assets
Also:
- parse
manifest.json - syntax-check JavaScript or run the repository's test/build commands
- load the unpacked build in Chrome and exercise core flows
- scan for secrets and remote executable code
- confirm requested permissions match actual use
- verify all images, copy, and privacy statements agree
- inspect the final ZIP contents before upload
- check Git diff and avoid unrelated files
Additional deliverables
Offer these when relevant:
- version bump and clean release ZIP
- localized listing copy and localized screenshots
- changelog or Store release notes
- homepage/support page and issue-reporting route
- reviewer credentials or test instructions handled securely
- license, font, image, and trademark provenance review
- optional YouTube promo-video storyboard
- migration notes for other browser stores; do not reuse Chrome-specific claims without checking their rules
Completion standard
Finish only when:
- all required files exist at exact dimensions and formats
- icons are approved and readable at 16 px
- at least three accurate screenshots are ready
- store fields are paste-ready
- privacy claims match permissions and data flows
- the runtime package passes validation and contains no store-only assets
- the user receives clickable local paths plus any verified public policy/support URLs