What is Extension.js?

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.

Use familiar web tooling like TypeScript, React, Vue, and Tailwind CSS. Keep direct access to native extension APIs.

Pick your path

If you are... Start here
Moving fast with AI tools and templates Templates and Get started immediately
A seasoned web developer new to extensions Create your first extension and Manifest
Shipping production extensions across browsers Cross-browser compatibility and Workflows overview

Choose the right command

Goal Command Example
Scaffold a project create npx extension@latest create my-extension --template=new-react
Develop with watch mode dev extension dev --browser=firefox
Build production artifacts build extension build --browser=chrome,firefox --zip
Build and launch production output start extension start --browser=edge
Launch existing build output preview extension preview --browser=chrome

Start a new extension

Use the create command to scaffold a new project and --template to start from a stack-specific baseline.

npm
pnpm
yarn
npx extension@latest create <your-extension-name>

For a list of all supported templates, check out the Templates page.

Use Extension.js with an existing extension

If you already have an extension, install the extension package and wire scripts once. This keeps local development, testing, and release builds consistent.

Step 1 - install the extension package as a devDependency

npm
pnpm
yarn
npm install extension@latest --save-dev
{
  "scripts": {
    "build": "extension build",
    "dev": "extension dev",
    "start": "extension start"
  },
  "devDependencies": {
    "extension": "latest"
  }
}

That's it! You're all set.

  • Run npm run dev for daily iteration and watch mode.
  • Run npm run start for production build + immediate launch.
  • Run npm run build for store-ready production artifacts.

Best practices

  • Keep one command flow: Use create -> dev -> build as your default loop.
  • Target browsers explicitly: Validate with --browser=chrome,firefox before release.
  • Centralize defaults: Put shared command/browser settings in extension.config.js.

Next steps