Publishing to Mozilla's Add-ons site (AMO) is different from any other app store. Here's exactly what I learned going through the process with Weather & Clock Dashboard.
The Manifest Version Situation
Firefox currently supports both Manifest V2 and V3. Chrome is forcing V3 (which has significant limitations for ad blockers). Firefox's stance is more pragmatic — they support both and have promised to maintain V2 support longer.
For a new extension in 2024, use MV3. Here's the basic manifest.json:
{
"manifest_version": 3,
"name": "Your Extension",
"version": "1.0",
"permissions": ["storage"],
"browser_specific_settings": {
"gecko": {
"id": "yourextension@yourdomain.com"
}
}
}
The browser_specific_settings.gecko.id is required for AMO and optional for Chrome. Include it.
The New Tab Override API
To replace the new tab page, use chrome_url_overrides:
"chrome_url_overrides": {
"newtab": "newtab.html"
}
Despite the chrome_ prefix, this works in Firefox. Your newtab.html must be a file bundled within your extension — you can't point to an external URL.
Building and Packing
AMO requires a ZIP file (or use web-ext). I used web-ext:
npm install -g web-ext
web-ext build
# Creates web-ext-artifacts/extension-name-1.0.0.zip
Or just zip manually:
zip -r extension.zip . --exclude '*.git*' --exclude 'node_modules/*'
The AMO Submission Process
- Create an account at addons.mozilla.org
- Click "Submit a New Add-on"
- Choose: list on AMO (public) vs self-distribution
- Upload your ZIP
- Fill in details: name, summary (up to 250 chars), description, screenshots
Pro tip on the summary field: This is what shows in search results. Make it specific and useful. "A new tab extension" is bad. "Replace Firefox new tab with live weather, world clocks, and search" is better.
What AMO Reviewers Check
AMO does manual review for listed extensions. Based on my experience:
Automated checks:
- Dangerous permissions (any
<all_urls>permission gets scrutiny) - Known malware patterns
- Minified/obfuscated code (requires source code upload)
Human review checks:
- Does the extension do what it claims?
- Is the permission usage justified?
- Is there a clear privacy policy URL if you collect any data?
- Remote code execution risks
The source code requirement:
If your code is minified (webpack, etc.), AMO requires you to upload the unminified source separately. Since I used pure HTML/CSS/JS with no build step, I didn't need to do this.
Review Timeline
My experience: initial review in ~48 hours. Subsequent updates are faster once the extension has a track record.
The reviewer will email you with:
- Approval
- Request for clarification
- Specific issues to fix
Common Rejection Reasons
Missing or inadequate privacy policy: If you make ANY external requests, you need to disclose this. Even just calling a weather API.
Over-broad permissions: Requesting permissions you don't use.
Content Security Policy issues: AMO is strict about CSP. Remote scripts aren't allowed (this is actually good practice).
Unexpected remote code execution: Loading scripts from CDNs in production code.
After Publishing
Once live, your extension gets:
- An AMO listing URL:
https://addons.mozilla.org/en-US/firefox/addon/your-extension-name/ - Install statistics (updated daily)
- Review capability
- A verified badge from Mozilla
The AMO install rate depends heavily on search discoverability and reviews. Getting your first 50 installs is hard — after that, organic discovery picks up.
Check Out the Result
I went through this entire process with Weather & Clock Dashboard. The source code is on GitHub if you want to see a concrete example of everything described here.
Questions about the AMO process? Drop them in the comments — happy to help.
Top comments (0)