OtsoBear
chrome2moz
Rust

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

License: MIT Rust WebAssembly Build Status

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
Read more: ARCHITECTURE.md covers Chrome API detection system, detection scope, and keyboard shortcuts in detail.

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 polyfill
  • chrome.sidePanel โ†’ Firefox sidebarAction
  • chrome.offscreen โ†’ Web Workers/content scripts
  • chrome.declarativeContent โ†’ Content script patterns
  • chrome.tabGroups โ†’ No-op stub (Firefox doesn't support)
  • And more... (see ARCHITECTURE.md)
Manifest Changes:
  • background.service_worker โ†’ background.scripts (event page)
  • Add browserspecificsettings.gecko for Firefox ID
  • Separate permissions from host_permissions
  • Convert webaccessibleresources format
  • Handle importScripts() โ†’ Add to manifest
Firefox Compatibility Fixes:
  • 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.json or .xpi file
Check Browser Console (Ctrl+Shift+J) for any errors.

Important Notes

  • Firefox supports chrome. namespace natively - no need to rewrite to browser.
  • 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

ยฉ 2026 GitRepoTrend ยท OtsoBear/chrome2moz ยท Updated daily from GitHub