I think we got to a point when we have enough functionalities that we can share extension with the world and what’s better way to do it than uploading it to the Chrome web store
So in this chapter I will show you how to do that
And since we followed the best practices of WXT we should get the Firefox version for free as well
Building for production
How to do it
So if we open package.json we can see the dev script that we’ve been using quite heavily
And we can see that there is another code build
We will not touch it right now but as you can imagine it generates the bundle
But what we’re using is zip which is similar to build except it prepares it for us to submit it to the web store
So what I’ll do is bun zip
bun zip
# or npm run zip
As you can see it created a lot of things and eventually zipped everything into this file
However it is called wxt-starter instead of tabnotes
Now that is because I never renamed my project in package.json
So let’s fix that and try once again that I prefer to have the correct name
{
"name": "tabnotes",
"version": "1.0.0"
}
Indeed it created a zip file with the right name
And if I go to my output folder I can see that it is indeed there
If I double click on it to see its contents I can see that this is basically everything that web extension should contain such as the manifest.json the files exactly as we configured
So I will just copy this zip file into my desktop
And I will use this to submit to the web store
Submitting to Chrome Web Store
First you need a developer account
Go to Chrome Web Store Developer Dashboard
It costs 5 dollars one-time fee
Once you have an account click New Item
Upload your zip file
Then fill out the store listing
Description write a clear description of what your extension does
Category choose appropriate category like Productivity
Language select primary language
Icon upload 128x128 pixel icon
Screenshots add 1-5 screenshots 1280x800 pixels recommended
For privacy you need to explain
Single Purpose explain your extension’s primary purpose
Permission Justification explain why you need each permission
Host Permission Justification if you request broad permissions like all_urls explain why
For distribution choose visibility Public Unlisted or Private
Select regions where extension should be available
Then submit for review
Review typically takes 1-3 business days
Chrome reviews extensions for compliance with developer program policies security concerns appropriate permission usage accurate description and screenshots
Submitting to Firefox Add-ons
Firefox is free no registration fee
Go to addons.mozilla.org
Click Submit a New Add-on
Choose On this site publicly listed
Upload your Firefox zip file
Firefox requires source code for review if you’re using minifiers or bundlers
Upload the sources zip file
Add build instructions in Notes to Reviewer
Example build instructions
Built with WXT framework.
To build: npm install && npm run zip:firefox
For version details
License choose appropriate license like MIT Mozilla Public License
Release Notes describe what’s new in this version
Add-on Slug choose a unique URL slug like tabnotes-for-any-page
Select 1-2 relevant categories
Examples Tabs Productivity Bookmarks
Upload 128x128 pixel icon
Add screenshots flexible sizing
Write description
Then submit for review
Review automatically validates the code
Manual review by Firefox team typically 1-5 days
More lenient than Chrome if permissions are justified
Best practices for approval
Keep permissions minimal
Only request permissions you actually need
Both stores scrutinize unnecessary permissions
Clear permission justification
Explain why each permission is necessary
Storage save user notes across browser sessions
Tabs detect which website is active to load relevant notes
Host permissions inject visual indicator ribbon on pages with notes
Quality screenshots
Show your extension in action
- Main feature popup with notes
- Secondary feature ribbon indicator
- Management page list of all notes
Accurate description
Be honest about what your extension does
Don’t overpromise or use misleading descriptions
Updating your extension
When you release a new version
Update version number in wxt.config.ts
export default defineConfig({
manifest: {
version: '1.1.0'
}
});
Build new package
bun zip
bun zip:firefox
Upload to store
Chrome upload through Package tab
Firefox submit new version through Upload New Version
Write release notes explain what changed
Submit for review even updates go through review
TabNotes submission
For our TabNotes extension
Chrome Web Store
Name TabNotes
Category Productivity
Permissions Needed storage tabs scripting host_permissions
Review Time about 2 days
Result Approved
Firefox Add-ons
Slug tabnotes-on-any-page
Categories Tabs Bookmarks
License Mozilla Public License
Review Time about 2 days
Result Approved
Both platforms approved the extension without issues because we used minimal permissions provided clear justification included quality screenshots wrote accurate descriptions and followed best practices throughout development
Your extension is now live and available to millions of users