Skip to main content
Brave
Chrome
Extension.js
Edge
Vivaldi
Opera
Chromium
Firefox
Safari

The cross-browser extension framework

Build browser extensions for Chrome, Edge, and Firefox with one modern workflow. Extension.js handles manifest compilation, browser-specific output, reload behavior, and packaging so you can focus on product features.

npx extension@latest create my-extension

From developers worldwide

Real feedback from developers experimenting with Extension.js.

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.

Pick your framework. Keep your workflow.

Start with production-ready templates for React, Preact, Vue, Svelte, TypeScript, or JavaScript.

React

ReactComponent-based UI with full MV3 compatibility. Ready-to-ship popup, options, and content scripts.

Preact

PreactSame React API in a 3kB runtime. Great for content scripts where bundle size matters.

Vue

VueProgressive framework with single-file components, wired up for extension contexts out of the box.

Svelte

SvelteCompile-time UI with smaller runtime. Ideal when every kilobyte in a content script counts.

TypeScript

TypeScriptStatic types for popup, content, and background scripts. Catch manifest and messaging bugs at compile time.

JavaScript

JavaScriptPlain ES modules, no compile step required. Start fast and add tooling when you need it.

Backing the open source core

Sponsors help us ship faster releases, better DX, and long-term reliability for extension teams.

TestMu AI

Frequently asked questions

Run npx extension dev and the CLI watches your project for changes. Edits to popups, content scripts, background service workers, and options pages trigger the fastest safe update path available: HMR when the platform supports it, targeted reloads when it does not. The CLI resolves common pain points like stale service workers and missed content-script updates automatically.
Extension.js compiles a single codebase into browser-specific output. One set of commands produces correctly packaged builds for Chrome, Edge, Firefox, and other Chromium-based browsers, each with the right manifest format, paths, and platform adjustments. Your CI pipeline uses the same build step with different browser flags, reducing drift between store submissions.
Yes. Extension.js ships production-ready templates for React, Preact, Vue, Svelte, TypeScript, and plain JavaScript. You write components the same way you would in any frontend project. Framework choice does not affect the core workflow.
Yes. The toolchain is built around Manifest V3 and the constraints browser stores enforce today: service workers, declarative APIs, updated permissions, and stricter packaging. MV3 is the default, not an afterthought.
Extension.js replaces the extension-specific glue in hand-rolled bundler configs: manifest versioning, multi-browser output, content-script injection, and reload orchestration. Move your source files and manifest into an Extension.js project and the CLI handles the rest. Your React/Vue/Svelte/TS code works without rewriting.
Extension.js supports pnpm, npm, and Yarn workspaces. Path resolution and shared dependencies work across workspace boundaries. Environment variables are injected per browser and build mode, with replacement applied across JS, JSON, and HTML. Development secrets never leak into production bundles.