Overview
Publish TabNotes to Chrome Web Store and Firefox Add-ons, making it available to millions of users. This lesson covers building production packages, creating store listings, writing permission justifications, and navigating the review process.
By the end, your extension will be live and downloadable from official browser stores.
What You’ll Learn
- Build production packages with WXT
- Create Chrome Web Store developer account
- Write effective store listings
- Provide permission justifications
- Submit to Firefox Add-ons
- Handle review feedback
- Update published extensions
- Understand approval timelines
Building Production Packages
Using WXT’s Build Commands
# Build optimized bundles
bun run build
# or
npm run build
# Create store-ready zip files
bun run zip
# or
npm run zip
Output:
.output/
├── chrome-mv3/ # Unzipped Chrome build
├── firefox-mv3/ # Unzipped Firefox build
├── chrome-mv3.zip # Ready for Chrome Web Store
└── firefox-mv3.zip # Ready for Firefox Add-ons
Verifying Build Quality
Before submission:
- Load
.output/chrome-mv3/as unpacked extension - Test all features work
- Check for console errors
- Verify file sizes are reasonable
- Ensure no development code remains
Pro Tip: Test the production build for 24 hours before submitting.
Chrome Web Store Submission
Step 1: Create Developer Account
- Visit Chrome Web Store Developer Dashboard
- Sign in with Google account
- Pay $5 one-time registration fee
- Account activates within minutes
Step 2: Upload Extension
- Click New Item
- Upload
chrome-mv3.zip - Wait for automatic verification
- Fix any errors reported
Common Upload Errors:
- Manifest format issues
- Invalid icon sizes
- Missing required fields
Step 3: Complete Store Listing
Basic Information
Extension Name: TabNotes
Description (132 chars max):
Save notes for every website you visit. Notes sync across devices and stay with specific pages.
Detailed Description:
TabNotes is a simple, powerful note-taking extension for your browser.
KEY FEATURES:
• Save notes for any website
• Notes sync across your devices (when signed into Chrome)
• Visual indicator shows which pages have notes
• Clean, sticky-note interface
• Auto-save as you type
HOW TO USE:
1. Visit any website
2. Click the TabNotes icon
3. Start typing your note
4. Note saves automatically
PERFECT FOR:
• Research and studying
• Website feedback
• Shopping lists
• Remember why you bookmarked pages
• Track important info across sites
PRIVACY:
• Notes stored only in your browser
• Optional sync via Chrome sync
• No external servers
• No tracking
Open source and free forever.
Category
Select: Productivity
Language
Primary: English
Step 4: Visual Assets
Extension Icon
Upload 128×128px icon (high quality PNG)
Screenshots (1280×800px recommended)
Create 3-5 screenshots showing:
- Main Feature: Popup with note-taking interface
- Visual Indicator: Ribbon on page with notes
- Notes List: All notes management page
- Empty State: What users see first
- Cross-Device: Sync functionality
Screenshot Tips:
- Use actual extension UI (no mockups)
- Clean, uncluttered backgrounds
- Highlight key features with annotations
- Show value proposition immediately
Promotional Images (Optional)
- Small tile: 440×280px
- Large tile: 920×680px
- Marquee: 1400×560px
Step 5: Privacy & Permissions
Single Purpose
Description:
TabNotes is a note-taking tool that allows users to save and manage notes for websites they visit.
Permission Justifications
storage:
Save user notes across browser sessions and sync across devices when user is signed into Chrome.
tabs:
Detect which website is active to load and save the correct note for that page.
scripting + host_permissions (https:///):
Inject visual indicator (ribbon) on pages with saved notes to provide instant feedback to users.
Critical: Reviewers reject vague justifications. Be specific about how each permission is used.
Step 6: Distribution
Visibility: Choose one:
- Public: Listed in Chrome Web Store search
- Unlisted: Accessible via direct link only
- Private: Only accessible to specific users/domains
Geographic Distribution: Select regions where extension should be available (or select all)
Step 7: Submit for Review
- Review all information
- Click Submit for Review
- Wait for approval (typically 1-3 business days)
Review Process:
- Automated malware scan
- Manual code review
- Permission verification
- Policy compliance check
Firefox Add-ons Submission
Advantages of Firefox
- No registration fee (completely free)
- Faster reviews (often same-day)
- More lenient (fewer rejections for minor issues)
Step 1: Create Account
- Visit addons.mozilla.org
- Sign in with Firefox account (free)
- Navigate to Developer Hub
Step 2: Upload Extension
- Click Submit a New Add-on
- Choose On this site (publicly listed)
- Upload
firefox-mv3.zip
Step 3: Source Code (If Required)
Firefox requires source code for extensions using:
- Minification
- Bundlers (like Vite)
- TypeScript
Create source zip:
# Exclude node_modules and build outputs
zip -r tabnotes-source.zip . -x "node_modules/*" ".output/*" "*.zip"
Upload source code and add build instructions:
BUILDING FROM SOURCE:
Requirements:
- Node.js 16+
- Bun (or npm/yarn/pnpm)
Build Steps:
1. npm install (or bun install)
2. npm run zip:firefox (or bun run zip:firefox)
Output:
- Built extension: .output/firefox-mv3.zip
Step 4: Add-on Details
Name: TabNotes
Add-on URL Slug: tabnotes-for-any-page
Summary (250 chars max):
Save notes for any website. Notes sync across devices and persist per page. Perfect for research, shopping, and remembering why you bookmarked sites.
Description: (Use similar description as Chrome Web Store)
Categories: Select 1-2:
- Tabs
- Productivity
License: Choose appropriate license:
- MIT
- Mozilla Public License 2.0
- GNU GPL v3
- Custom
Step 5: Upload Screenshots
- Flexible sizing (Firefox auto-scales)
- Same screenshots as Chrome work fine
- Minimum 2 screenshots, maximum 10
Step 6: Submit
- Review all fields
- Submit Version
- Wait for automated validation
- Manual review (usually 1-5 days)
Firefox Review:
- Automated code scan
- Manual security review
- Less strict than Chrome
- Provides detailed feedback if rejected
Best Practices for Approval
Keep Permissions Minimal
❌ Bad:
permissions: ['storage', 'tabs', 'history', 'bookmarks', 'cookies']
✅ Good:
permissions: ['storage', 'tabs', 'scripting']
Only request what you actually use.
Clear Permission Justification
❌ Bad:
storage: "Needed for extension functionality"
✅ Good:
storage: "Save user notes across browser sessions and sync across devices when user is signed into Chrome"
Quality Screenshots
❌ Bad:
- Blurry images
- Inconsistent sizes
- Unrelated content
✅ Good:
- Sharp, high-resolution
- Show actual extension UI
- Demonstrate key features
Accurate Description
❌ Bad:
"The BEST extension EVER! Download NOW!!!"
✅ Good:
"Save notes for websites you visit. Notes sync across devices and stay with specific pages."
Handling Rejection
Both stores may reject submissions. Common reasons:
Chrome:
- Excessive permissions
- Vague permission justifications
- Missing privacy policy (for extensions collecting data)
- Misleading descriptions
- Trademark violations
Firefox:
- Security vulnerabilities
- Obfuscated code
- Missing source code
- Broken functionality
Response Strategy:
- Read rejection email carefully
- Fix specific issues mentioned
- Test thoroughly
- Resubmit with explanation of changes
Updating Published Extensions
Version Updates
- Increment version in
wxt.config.ts:
manifest: {
version: '1.1.0' // Was 1.0.0
}
- Build new package:
bun run zip
-
Upload via store dashboard:
- Chrome: Package tab → Upload new package
- Firefox: Upload new version
-
Write release notes:
Version 1.1.0
- Added search functionality to notes list
- Fixed bug with special characters
- Improved performance for large note collections
- Submit for review (updates also require approval)
Store Metrics
Chrome Web Store Dashboard
Track:
- Total installations
- Weekly active users
- Uninstall rate
- User reviews and ratings
- Impression/install conversion
Firefox Add-ons Dashboard
Track:
- Daily users
- Downloads
- Update adoption rate
- Reviews and ratings
Act on Feedback:
- Respond to reviews
- Fix reported bugs
- Add requested features
TabNotes Submission Results
Chrome Web Store:
- Name: TabNotes
- Category: Productivity
- Permissions: storage, tabs, scripting, host_permissions
- Review Time: ~2 days
- Result: ✅ Approved
Firefox Add-ons:
- Slug: tabnotes-on-any-page
- Categories: Tabs, Productivity
- License: Mozilla Public License 2.0
- Review Time: ~2 days
- Result: ✅ Approved
Both platforms approved TabNotes without issues because:
- Minimal permissions
- Clear justifications
- Quality screenshots
- Accurate descriptions
- Followed best practices
Congratulations!
You’ve built a complete, production-ready browser extension from scratch and published it to official stores. You now understand:
- Extension architecture and components
- Modern development with WXT
- Browser APIs (storage, tabs, scripting, action)
- Cross-browser compatibility
- Store submission processes
What’s Next:
- Monitor user feedback
- Iterate based on reviews
- Add new features
- Build more extensions
Your extension is now available to millions of users worldwide. Well done!