
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-extensionWatch the full developer workflow
From scaffold to running extension, in one modern toolchain.

From developers worldwide
Real feedback from developers and teams experimenting with Extension.js.
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, while keeping browser-specific output predictable across development, testing, and release builds.
Keep extension structure explicit
Keep your manifest, paths, and emitted assets in sync as your extension grows.
Use the lightest safe path
Get the fastest safe update path for every change, from HMR to full restarts.
Bring your preferred stack
Start with React, Vue, Svelte, TypeScript, or JavaScript and keep one workflow, so your team can choose the right UI model without changing the core extension toolchain.
Build, preview, and package with one flow
Build, preview, and package for each browser from the same project, with a release flow that stays clear from first local check to store-ready artifacts.
Inject environment values cleanly
Load environment values by browser and mode, then replace them in JavaScript, JSON, and HTML.
Pick your framework. Keep your workflow.
Start with production-ready templates for React, Vue, Svelte, TypeScript, or JavaScript.
React
Build polished extension interfaces with React, strong tooling, and a mature component ecosystem.
Preact
Build polished extension interfaces with Preact, lighter bundles, and familiar JSX you know well.
Vue
Build polished extension interfaces with Vue, single-file flow, and predictable structure in UIs.
Svelte
Build polished extension interfaces with Svelte, lean components, and tiny runtime in shipped UI.
TypeScript
Build polished extension interfaces with TypeScript, static typing, and safer refactors at scale.
JavaScript
Build polished extension interfaces with JavaScript, light tooling, and quick sketch-to-UI speed.
Developer FAQ
Common questions about building browser extensions with Extension.js—from hot reload and cross-browser builds to Manifest V3, frameworks, and monorepo support.
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 browser platform supports it, targeted reloads when it does not.
You stay in the editor and the browser instead of restarting manually or maintaining custom reload scripts. 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.
This eliminates the need for parallel project trees or fragile shell scripts per browser. 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, Vue, Svelte, TypeScript, and plain JavaScript. You write components and UI the same way you would in any frontend project—the CLI handles the extension-specific compilation, manifest wiring, and browser packaging.
Framework choice does not affect the core workflow. Create, develop, build, and package commands work identically regardless of your UI stack.
Yes. The toolchain is built around Manifest V3 and the constraints that browser stores enforce today—service workers, declarative APIs, updated permissions, and stricter packaging rules. MV3 is the default, not an afterthought.
Extension.js surfaces manifest issues during development so problems appear before store submission, not after. You keep full control over permissions, host access, and content security policies.
Extension.js replaces the extension-specific glue code in hand-rolled bundler configs: manifest versioning, multi-browser output, content-script injection boundaries, and reload orchestration. You move your source files and manifest into an Extension.js project and the CLI handles the rest.
Your existing React, Vue, Svelte, or TypeScript code works without rewriting. The migration removes maintenance overhead around build tooling while preserving the UI patterns your team already uses.
Extension.js supports pnpm, npm, and Yarn workspaces in monorepo setups. Path resolution and shared dependencies work correctly across workspace boundaries, so you know exactly which files end up in the shipped extension package.
Environment variables are injected per browser and build mode, with replacement applied across JavaScript, JSON, and HTML. Values stay scoped to the right surface—development secrets never leak into production bundles.

