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.

Watch the workflow

Pick your path

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

Choose the right command

GoalCommandExample
Scaffold a projectcreatenpx extension@latest create my-extension --template=new-react
Develop with watch modedevextension dev --browser=firefox
Build production artifactsbuildextension build --browser=chrome,firefox --zip
Build and launch production outputstartextension start --browser=edge
Launch existing build outputpreviewextension 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