Publishing a Firefox extension on the Mozilla Add-ons store (AMO) is straightforward, but there are non-obvious steps that determine how discoverable your extension will be after submission.
This is what I learned after publishing 11 extensions.
1. The submission itself
AMO accepts .xpi files (which are ZIP archives with .xpi extension). You can build one with web-ext:
npm install -g web-ext web-ext build This creates web-ext-artifacts/your-extension-1.0.0.zip. Rename to .xpi or submit the ZIP — AMO accepts both.
Go to: https://addons.mozilla.org/en-US/developers/addon/submit/distribution
2. The review queue
AMO has two review channels:
Listed (Recommended): Extension appears in AMO search and browse. Reviewed by Mozilla volunteers. For simple extensions, review typically takes 1-7 days. For complex permissions, it can take longer.
Unlisted: No AMO presence. You distribute the .xpi directly. No queue. This is for internal tools or sideloaded extensions.
For public distribution, choose Listed.
3. Metadata that affects discoverability
AMO search and browse are the two main discovery surfaces. Here is what affects each:
Search: Extension name, summary, and description are indexed. Use specific, searchable language in the summary (140 chars). The summary appears in search results before the user clicks.
Browse by category: AMO has 25 categories. Choose the most specific one that fits. other is not indexed in category browse — it effectively removes your extension from browse-by-category.
Tags: AMO has 43 valid tags. Invalid tags are silently dropped. The valid list as of November 2026 includes: dark mode, privacy, search, social media, streaming, youtube, word counter, translate. Use the ones that genuinely describe your extension.
Homepage URL and Support URL: AMO shows these on the listing page. Backlinks to your documentation or blog posts are good for SEO and user trust. These fields accept {"en-US": "url"} format in the API.
4. The validation step
Before review, AMO runs automated validation. The common issues that fail validation:
- Using
eval()ornew Function()— blocked by default CSP - Including
node_moduleswith known CVEs — AMO checks against npm vulnerability databases - Remote code execution patterns — loading scripts from CDNs
- Overly broad permissions — requesting permissions your extension does not use
The web-ext lint command runs most of these checks locally before submission.
5. Screenshots (previews)
The AMO listing can show up to 5 screenshots. Screenshots significantly improve click-through rate on search results.
Best practices:
- 1280×800 or higher resolution
- Show the extension actually working, not a marketing splash
- The first screenshot is the one shown in search results
You can upload screenshots via the API (POST /api/v5/addons/addon/{id}/previews/) or through the developer dashboard.
6. The recommended badge
Mozilla's "Recommended Extensions" program badges a small number of extensions that meet their quality, security, and privacy bar. Applications are submitted to amo-featured@mozilla.org with a short pitch.
Getting recommended is not guaranteed, but for a well-built, privacy-respecting extension, it is worth applying. Recommended extensions appear prominently in search results and category pages.
I published all 11 extensions this way — see the full series for the extensions themselves.
