Publishing
Find answers to common publishing issues.
My extension submission was rejected
If your extension submission was rejected, you probably got an email with the reason. You'll need to fix the issues and upload a new build of your extension to the store and send it for review again.
Make sure to follow the guidelines when submitting your extension to ensure that everything is setup correctly.
Version number mismatch
If you get version number conflicts when submitting:
- Ensure your
manifest.json
version matches what's in the store - Increment the version number appropriately for each new submission
- Make sure the version follows semantic versioning (e.g.,
1.0.1
)
Missing permissions in manifest
If your extension is rejected due to permission issues:
- Review the permissions declared in your
manifest.json
- Ensure all permissions are properly justified in your submission
- Remove any unused permissions that aren't essential
- Consider using optional permissions where possible
Content Security Policy (CSP) violations
If your extension is rejected due to CSP issues:
- Check your manifest's
content_security_policy
field - Ensure all external resources are properly whitelisted
- Remove any unsafe inline scripts or eval usage
- Use more secure alternatives like
browser.scripting.executeScript
My extension crashes on production build
If the extension works during development but crashes after publishing or when loaded unpacked in production mode, check these common causes:
- Uncaught runtime errors in the background service worker or content scripts. Open
chrome://extensions
(orabout:debugging
in Firefox) → enable Developer mode → Inspect the service worker/content script and check the console for stack traces. - Missing permissions or host permissions causing APIs to throw (e.g., network calls, tabs access). Ensure required
permissions
andhost_permissions
are declared inmanifest.json
. - CSP blocking resources (inline scripts/styles, remote fonts, or endpoints). Verify
content_security_policy
and update code to avoid unsafe patterns. - Missing assets or incorrect paths referenced in
manifest.json
(icons
,web_accessible_resources
,action.default_popup
, etc.). Confirm files exist in the final build output and paths match. - Build-time variables not resolved. If you rely on environment variables, ensure they’re inlined at build time or have safe fallbacks at runtime. Example:
const apiUrl = env.VITE_SITE_URL ?? "https://api.example.com";
- Module format or bundler config issues (MV3 service worker must be ESM if
type: 'module'
). Align bundler output with your manifest expectations and rebuild.
Try this:
- Reproduce with a production bundle locally and load it as an unpacked extension; inspect background and content script logs for errors.
- Validate
manifest.json
and ensure all referenced files are present in the build output. - Temporarily relax CSP locally to confirm whether CSP is the cause; then apply a compliant fix (don’t ship relaxed CSP).
- Add fallbacks for any build-time variables and rebuild.
How is this guide?
Last updated on