The cross-browser extension framework.
5,142
stars
2,831
commits
TypeScript
primary language
Sep 6, 2026
updated
The cross-browser extension framework. Build for Chrome, Edge, Firefox, and Safari with no build config required.
npx extension@latest create my-extension
cd my-extension
npm run dev
Works with npm, pnpm, yarn, bun, and deno.
Documentation · Templates · Examples · Discord
Browser extensions ship with the worst dev experience in modern web. Manifest V3 fragmentation, browser-specific quirks, no hot reload for content scripts, and a separate build pipeline for every target. Extension.js fixes that.
extension build --zip, ready for the Chrome Web Store and Firefox Add-onsdevDependencyOr skip the install and try a live template in your browser.
If you have used Plasmo, WXT, or CRXJS, here is what Extension.js does that the others do not:
| Capability | Extension.js |
|---|---|
| Run any GitHub sample directly | extension dev https://github.com/.../sample |
| Managed browser binaries | extension install firefox downloads an isolated build |
| Cross-browser HMR for content scripts | Built in, no plugin glue |
| Production zip for the stores | extension build --zip |
| Framework agnostic | Vanilla, TS, React, Vue, Svelte, Preact, no lock-in |
| Custom Chromium and Gecko binaries | --chromium-binary, --gecko-binary |
Extension.js is sponsored by extension.dev, the platform that hosts the build, share and store submission side of shipping an extension. To hand someone an unpublished build behind a link, with no zip and no install on their side, see Share an unpublished build for review.
Use these flags with extension dev, extension start, or extension preview:
--browser <chrome | edge | firefox | safari>--chromium-binary <path-to-binary>--gecko-binary <path-to-binary># Chrome (system default)
npx extension@latest dev --browser=chrome
# Edge
npx extension@latest dev --browser=edge
# Custom Chrome/Chromium path
npx extension@latest dev --chromium-binary "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
# Custom Firefox path
npx extension@latest dev --gecko-binary "/Applications/Firefox.app/Contents/MacOS/firefox"
| Google Chrome ✅ Supported | Microsoft Edge ✅ Supported | Mozilla Firefox ✅ Supported | Apple Safari ✅ Supported | Chromium-based ✅ Supported | Gecko-based ✅ Supported |
Build a production-ready bundle and zip it for submission to the Chrome Web Store, Edge Add-ons, or Firefox AMO:
# Production build
npx extension@latest build
# Production build packaged as a ZIP
npx extension@latest build --zip
# Per-browser builds
npx extension@latest build --browser=firefox --zip
Useful flags:
--zip packages the build into a ZIP ready for store upload--zip-source includes source files for store source-code review--zip-filename <name> controls the output filename--polyfill enables the cross-browser webextension polyfillSkip the system-install dance. Extension.js can download and manage isolated browser binaries for clean dev sessions:
# Install a managed Firefox build
npx extension@latest install firefox
# Install Chrome and Edge in one go
npx extension@latest install --browser=all
# Print where managed browsers live
npx extension@latest install --where
Install Extension.js as a dev dependency and wire up your scripts.
npm install extension@latest --save-dev
{
"scripts": {
"build": "extension build",
"dev": "extension dev",
"preview": "extension preview"
}
}
Run npm run dev to develop, and watch the browser open with your extension already loaded:
Use npm run build for production, and npm run preview to inspect the production output.
Pull any sample from Chrome Extension Samples and run it directly:
npx extension@latest dev https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.page-redder --browser=edge
| npm ✅ Supported | pnpm ✅ Supported | Yarn ✅ Supported | Bun ✅ Supported | Deno ✅ Supported |
Sponsors help the project ship faster releases, better developer experience, and long-term reliability for extension teams.
Documentation is hosted by Mintlify through its open source program. Tiers and placement are listed in BACKERS.md.
MIT (c) Cezar Augusto and the Extension.js authors.
TypeScript
94.0%
JavaScript
5.7%
The cross-browser extension framework.
5,142
stars
2,831
commits
TypeScript
primary language
Sep 6, 2026
updated
The cross-browser extension framework. Build for Chrome, Edge, Firefox, and Safari with no build config required.
npx extension@latest create my-extension
cd my-extension
npm run dev
Works with npm, pnpm, yarn, bun, and deno.
Documentation · Templates · Examples · Discord
Browser extensions ship with the worst dev experience in modern web. Manifest V3 fragmentation, browser-specific quirks, no hot reload for content scripts, and a separate build pipeline for every target. Extension.js fixes that.
extension build --zip, ready for the Chrome Web Store and Firefox Add-onsdevDependencyOr skip the install and try a live template in your browser.
If you have used Plasmo, WXT, or CRXJS, here is what Extension.js does that the others do not:
| Capability | Extension.js |
|---|---|
| Run any GitHub sample directly | extension dev https://github.com/.../sample |
| Managed browser binaries | extension install firefox downloads an isolated build |
| Cross-browser HMR for content scripts | Built in, no plugin glue |
| Production zip for the stores | extension build --zip |
| Framework agnostic | Vanilla, TS, React, Vue, Svelte, Preact, no lock-in |
| Custom Chromium and Gecko binaries | --chromium-binary, --gecko-binary |
Extension.js is sponsored by extension.dev, the platform that hosts the build, share and store submission side of shipping an extension. To hand someone an unpublished build behind a link, with no zip and no install on their side, see Share an unpublished build for review.
Use these flags with extension dev, extension start, or extension preview:
--browser <chrome | edge | firefox | safari>--chromium-binary <path-to-binary>--gecko-binary <path-to-binary># Chrome (system default)
npx extension@latest dev --browser=chrome
# Edge
npx extension@latest dev --browser=edge
# Custom Chrome/Chromium path
npx extension@latest dev --chromium-binary "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
# Custom Firefox path
npx extension@latest dev --gecko-binary "/Applications/Firefox.app/Contents/MacOS/firefox"
| Google Chrome ✅ Supported | Microsoft Edge ✅ Supported | Mozilla Firefox ✅ Supported | Apple Safari ✅ Supported | Chromium-based ✅ Supported | Gecko-based ✅ Supported |
Build a production-ready bundle and zip it for submission to the Chrome Web Store, Edge Add-ons, or Firefox AMO:
# Production build
npx extension@latest build
# Production build packaged as a ZIP
npx extension@latest build --zip
# Per-browser builds
npx extension@latest build --browser=firefox --zip
Useful flags:
--zip packages the build into a ZIP ready for store upload--zip-source includes source files for store source-code review--zip-filename <name> controls the output filename--polyfill enables the cross-browser webextension polyfillSkip the system-install dance. Extension.js can download and manage isolated browser binaries for clean dev sessions:
# Install a managed Firefox build
npx extension@latest install firefox
# Install Chrome and Edge in one go
npx extension@latest install --browser=all
# Print where managed browsers live
npx extension@latest install --where
Install Extension.js as a dev dependency and wire up your scripts.
npm install extension@latest --save-dev
{
"scripts": {
"build": "extension build",
"dev": "extension dev",
"preview": "extension preview"
}
}
Run npm run dev to develop, and watch the browser open with your extension already loaded:
Use npm run build for production, and npm run preview to inspect the production output.
Pull any sample from Chrome Extension Samples and run it directly:
npx extension@latest dev https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.page-redder --browser=edge
| npm ✅ Supported | pnpm ✅ Supported | Yarn ✅ Supported | Bun ✅ Supported | Deno ✅ Supported |
Sponsors help the project ship faster releases, better developer experience, and long-term reliability for extension teams.
Documentation is hosted by Mintlify through its open source program. Tiers and placement are listed in BACKERS.md.
MIT (c) Cezar Augusto and the Extension.js authors.
TypeScript
94.0%
JavaScript
5.7%