
The cross-browser extension framework
Build browser extensions across all major browsers with one modern workflow. Extension.js handles manifest compilation, browser-specific output, and packaging.
npx extension@latest create my-extension 
Why use a browser extension framework?
Browser extensions need different files, browser APIs, manifest formats, permissions, and build outputs than regular web apps. A browser extension framework removes that glue: one workflow handles Chrome, Edge, and Firefox extension development, manifest filtering per target, reload behavior tuned for service workers and content scripts, and packaging ready for the Chrome Web Store, addons.mozilla.org, and the Edge Add-ons store.
Extension.js gives you that workflow. One JavaScript or TypeScript
project, onemanifest.json, separatedist/<browser>outputs, and a CLI that gets out of your way, making it effortless to
ship a single codebase as a cross-browser extension.
Watch the full developer workflow
From scaffold to running extension, in one modern toolchain.
Core features for the full extension lifecycle
Build, test, and ship for every browser with one modern extension workflow.
Compile one extension into browser-specific output
Build once for Chrome, Edge, Firefox, and custom Chromium or Gecko targets. Browser-specific output stays predictable across development, testing, and release builds. Read more ⏵⏵⏵
Keep extension structure explicit
Manifest, paths, and emitted assets stay in sync as your extension grows. Read more ⏵⏵⏵

Tune behavior with config
Override defaults through extension.config.js for custom builds. Read more ⏵⏵⏵
Bring your preferred stack
Start with React, Vue, Svelte, TypeScript, or JavaScript. Keep one workflow so your team picks the right UI model without changing the extension toolchain. Read more ⏵⏵⏵
Inject environment values cleanly
Load environment values by browser and mode, then replace them across JavaScript, JSON, and HTML. Development secrets never leak into production bundles. Read more ⏵⏵⏵



Build, preview, package
One flow from local check to store-ready artifacts per browser. Read more ⏵⏵⏵
From developers worldwide
Real feedback from developers experimenting with Extension.js.
Choose your framework. Keep your workflow.
Start with production-ready templates for React, Preact, Vue, Svelte, TypeScript, or JavaScript.
React
Component-based UI with full Manifest V3 (MV3) compatibility. Ready-to-ship popup, options, and content scripts. View details ⏵⏵⏵
Preact
Same React API in a 3kB runtime. Great for content scripts where bundle size matters. View details ⏵⏵⏵
Vue
Progressive framework with single-file components, wired up for extension contexts out of the box. View details ⏵⏵⏵
Svelte
Compile-time UI with smaller runtime. Ideal when every kilobyte in a content script counts. View details ⏵⏵⏵
TypeScript
Static types for popup, content, and background scripts. Catch manifest and messaging bugs at compile time. View details ⏵⏵⏵
JavaScript
Plain ES modules, no compile step required. Start fast and add tooling when you need it. View details ⏵⏵⏵
Backing the open-source core
Sponsors help the project ship faster releases, better developer experience (DX), and long-term reliability for extension teams.


Frequently asked questions
What is a browser extension?
What is a browser extension?
Is Extension.js a Chrome extension framework?
Is Extension.js a Chrome extension framework?
--browser=chrome, --browser=firefox, or --browser=edge. See
Browsers available.How does Extension.js handle hot module replacement during development?
How does Extension.js handle hot module replacement during development?
npx extension dev and the CLI watches your project for changes.
Edits to popups, content scripts, service workers, and options pages
trigger the fastest safe update path. The CLI uses hot module replacement
(HMR) when supported and targeted reloads otherwise. It automatically
resolves common pain points like stale service workers and missed
content-script updates.How do I build one extension for Chrome, Edge, and Firefox?
How do I build one extension for Chrome, Edge, and Firefox?
Can I use React, Preact, Vue, Svelte, or TypeScript?
Can I use React, Preact, Vue, Svelte, or TypeScript?
Does Extension.js support Manifest V3?
Does Extension.js support Manifest V3?
How do I troubleshoot Manifest V3 service worker and permissions issues?
How do I troubleshoot Manifest V3 service worker and permissions issues?
type: "module", the new web_accessible_resources
shape, the split between permissions and host_permissions, and
declarative_net_request differences in Firefox. See Manifest V3
troubleshooting for the fixes.How do I migrate from a custom webpack or Vite setup?
How do I migrate from a custom webpack or Vite setup?
Does Extension.js work with monorepos and environment variables?
Does Extension.js work with monorepos and environment variables?

