chrome extension to firefox extension converter
Last updated Jun 22, 2026
82
Stars
6
Forks
0
Issues
0
Stars/day
Attention Score
39
Language breakdown
Rust 84.3%
JavaScript 6.8%
CSS 5.6%
HTML 3.0%
Shell 0.3%
โธ Files
click to expand
README
Chrome to Firefox Extension Converter
A Rust-based CLI tool and WebAssembly library that converts Chrome Manifest V3 extensions to Firefox-compatible format.
Live Demo: https://otsobear.github.io/chrome2moz/
Why This Tool?
Firefox natively supports chrome.* APIs, but some Chrome-only APIs don't exist in Firefox. This tool:
- Detects 176 Chrome-only APIs (e.g.,
chrome.offscreen,chrome.declarativeContent,chrome.tabGroups) - Converts manifests (service workers โ event pages, permission separation)
- Provides runtime shims for Chrome-only APIs
- Checks keyboard shortcuts for conflicts with Firefox built-ins
Features
- Smart Detection: Identifies Chrome-only APIs that need conversion
- Manifest Transformation: Handles MV3 manifest differences for Firefox
- Keyboard Shortcut Checker: Detects conflicts with 60+ Firefox shortcuts
- Multiple Formats: Supports
.crx,.zip, or unpacked directories - Web Interface: Browser-based UI (no installation required)
Quick Start
Web UI (Recommended)
./build-wasm.sh
cd web && python3 -m http.server 8080
Open http://localhost:8080
Drag & drop your Chrome extension ZIP, analyze, and download the converted Firefox version.
CLI
# Install
git clone https://github.com/OtsoBear/chrome2moz.git
cd chrome2moz
cargo build --release
Analyze
./target/release/chrome2moz analyze -i ./chrome-extension
Convert
./target/release/chrome2moz convert -i ./chrome-extension -o ./output
List Chrome-only APIs
./target/release/chrome2moz chrome-only-apis
Options: --report (generate report), --yes (skip prompts), --preserve-chrome (keep both namespaces)
What Gets Converted
Chrome-Only APIs โ Runtime shims provided for:
chrome.storage.sessionโ In-memory polyfillchrome.sidePanelโ FirefoxsidebarActionchrome.offscreenโ Web Workers/content scriptschrome.declarativeContentโ Content script patternschrome.tabGroupsโ No-op stub (Firefox doesn't support)- And more... (see ARCHITECTURE.md)
background.service_workerโbackground.scripts(event page)- Add
browserspecificsettings.geckofor Firefox ID - Separate
permissionsfromhost_permissions - Convert
webaccessibleresourcesformat - Handle
importScripts()โ Add to manifest
- Automatically disables
browser.management.uninstallSelf()calls - Prevents extensions from self-destructing when detecting Firefox
- See docs/FIREFOXSELFUNINSTALL_FIX.md for details
API Coverage
View Full API Status โTesting in Firefox
- Open
about:debugging#/runtime/this-firefox - Click "Load Temporary Add-on"
- Select the converted
manifest.jsonor.xpifile
Important Notes
- Firefox supports
chrome.namespace natively - no need to rewrite tobrowser. - Static analysis has limits - runtime behavior differences need manual testing
- ~90% of conversions work automatically; remaining 10% may need manual adjustments
- See ARCHITECTURE.md for what's detected vs. what requires testing
Contributing
Contributions welcome! See ARCHITECTURE.md for architectural details.
cargo fmt && cargo clippy && cargo test
Resources
License
MIT License - See LICENSE file for details.
๐ More in this category