Extension Workshop
Extension Basics
Getting started
Mozilla Developer Network
Documentation Topics
Develop
Firefox Tools
User Experience
Firefox for Android
Port to Firefox
Test and debug
Getting Started
Unique Firefox Capabilities
Firefox Workflow Overview
About the WebExtensions API
Manifest V3
Manifest V3 migration guide
What is Manifest V3?
Manifest V3 changes
Migration checklist
Cross-Browser Development
Browser Compatibility
Namespace
Asynchronous
API Coverage
Manifest keys
More information
Build cross-browser extensions
Firefox Tools
Build an extension in 5 minutes
Browser Extension Development Tools
Boilerplating tools
Coding tools
Testing and debugging tools
Translation tools
Tools for Firefox for Android
Choosing a Firefox version for extension development
Firefox editions
Firefox version and their web extension development capabilities
Getting started with web-ext
Installation
Update
Using web-ext
Check your code
Test and debug
Package, sign, and publish
Use the configuration file
Advanced topics
See also
web-ext command reference
What's new
Commands
web-ext build
web-ext docs
web-ext dump-config
web-ext lint
web-ext run
web-ext sign
Global options
Setting option environment variables
See also
web-ext v7 command reference
Commands
Global options
Setting option environment variables
See also
Web-ext Webpack plug-in
Browser API Polyfill
Extensions and the Add-on ID
Basic workflow with no add-on ID
When do you need an add-on ID?
User Experience
Build a secure extension
Request the right permissions
Introduction
Advised permissions
Avoid unnecessary permissions
Request permissions at runtime
Add information about permissions to your extensions AMO page
Firefox built-in consent for data collection and transmission
Taxonomy
Specifying data types
Accessing the data collection permissions programmatically
Updates
Testing
Data collection experience on older Firefox versions
Best practices for collecting user data consents
Know your privacy settings
Get prepared
Prompt after install
Determine your consent flow
Your consent dialogs
Build an accessible extension
Onboard, upboard, offboard users
Onboarding
Upboarding
Offboarding
User experience best practices
1. Keep it focused
2. Give users what they need, where they need it
3. Keep the user informed
4. Be Firefoxy in look and feel
5. Great onboarding experience
6. Test, test, and then test again
Mobile
Differences between desktop and Android extensions
Introduction
User interface
Native application interaction
Permissions
Storage
User experience guidelines for mobile extensions
Introduction
The basics
The extra mile
The last mile
Developing extensions for Firefox for Android
Set up your computer and Android emulator or device
Check for Firefox for Android compatibility
Install and run your extension in Firefox for Android
Debug your extension
Manifest V3 compatibility
GeckoView Extensions (Android library)
Port Your Extension
Porting a Google Chrome Extension
Debug and Test
Debugging
Developer tools toolbox
Debugging background scripts
Debugging options pages
Debugging popups
Debugging content scripts
Debugging sidebars
Debugging storage
Debugging developer tools pages and panels
Debug permission requests
Debugging browser restarts
Temporary Installation in Firefox
Reloading a temporary extension
Using the command line
Detecting temporary installation
Limitations
Testing persistent and restart features
What is an add-on ID?
What is a Firefox profile?
Extension behavior in Firefox
What do I do to ensure I can test my extension?
Test permission requests
Permission grant behavior during testing
Observe or verify install time permission requests
Retest runtime permission grants
Testing localizations
Known issues
Content scripts don't appear in DevTools
Extension source don't update in DevTools
"Destroyed actor" errors when debugging Android
Publish
Get your extension signed
Distribute your signed extension
Promote your extension
Policies
Add-on Policies
No Surprises
Content
Submission Guidelines
Development Practices
User Scripts
Data Collection and Transmission Disclosure and Control
Monetization
Security, Compliance and Blocking
Add-on Policies FAQ
No Surprises
Content
Submission Guidelines
Data Collection and Transmission Disclosure and Control
Security, Compliance and Blocking
Firefox Add-on Distribution Agreement
1. Introduction
2. Accounts
3. Privacy Policy
4. Distribution, certificates, & review process
5. Your obligations
6. Licenses; proprietary rights
7. Content removal
8. Disclaimer of warranties
9. Limitation of liability
10. Release; indemnification
11. General legal terms
Add-ons Blocking Process
Security Over Choice
Blocking Criteria
Developer Outreach
Requesting a Block
Blocking Other Types of Third Party Software
Third Party Library Usage
When must links for third-party libraries be provided?
How to determine the third-party library link
Communicating third-party library links to reviewers
What does review rejection mean to users?
Review overview
Impact of review rejection
Blocklisting
Sign
Signing and distribution overview
Signing your add-ons
Distributing your add-on
Post-submission review
More information about AMO
Package your extension
Windows
Mac OSX
Linux / Mac OSX Terminal
Distribute
Distribute Manifest V2 and V3 extensions
Distribute pre-release versions
Submitting an add-on
Listing on AMO
Self-distribution
Get help
Version Rollback
Eligibility
Roll back using Developer Hub
Roll back using the Add-on Submission API
Source code submission
Provide your extension source code
Default reviewer build environment
Use of obfuscated code
Source code checklist
Firefox version compatibility
Version compatibility
The `browser_specific_settings` key
AMO compatibility setting
Recommendations
Add-on ownership
Transfer ownership
Code disputes
Developer accounts
Setting a display name
Blocked accounts
Issues receiving emails from AMO
Self-distribution
Self-distribution options
Installing self-distributed extensions
Preparing your add-on
Install from file on a computer
Install from file on Android
For desktop apps
Promote
Create an appealing listing
Your add-on’s name
Create a captivating icon
Create a meaningful set of keywords
Make sure your summary is just long enough
Focus on key features in your screenshots
The add-on description can be longer, but not too long
Make it local
Make it experimental
Select the right platforms and versions
Categorize well
Be prepared to provide support
Set up a developer profile
Use plain language in any privacy policy or license agreement
Gently ask for a review
Make use of Markdown
Some other points