Web Extension starter to build "Write Once Run on Any Browser" extension
Update: Rewrite in progress to support manifest v3 / Vite.js: https://github.com/abhijithvijayan/web-extension-starter/tree/vite-rewrite
🙋♂️ Made by @abhijithvijayan
Update: Rewrite to use Vite + React in progress in https://github.com/abhijithvijayan/web-extension-starter/tree/vite-rewrite branch
❤️ it? ⭐️ it on GitHub or Tweet about it.
🧙♂️ React + TypeScript = This branch
😨 React + JavaScript = Checkout react-javascript branch
👶🏼 HTML + JavaScript = Checkout master branch
- Cross Browser Support (Web-Extensions API)
- Browser Tailored Manifest generation
- Automatic build on code changes
- Auto packs browser specific build files
- SASS styling
- TypeScript by default
- ES6 modules support
- React UI Library by default
- Smart reload
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|---|---|---|
| 49 & later ✔ | 52 & later ✔ | 36 & later ✔ | 79 & later ✔ | Latest ✔ | Latest ✔ | Latest ✔ |
- daily.dev in daily.dev extension
- Jiffy Reader in ansh/jiffyreader.com
- kutt-extension in abhijithvijayan/kutt-extension
- doubanIMDb in lisongx/doubanIMDb
- Mooc Assistant in unbyte/mooc-assistant
- ArtiPub in crawlab-team/artipub
and many more...
Create a new directory and run
curl -fsSL https://github.com/abhijithvijayan/web-extension-starter/archive/react-typescript.tar.gz | tar -xz --strip-components=1
Ensure you have
- Node.js 10 or later installed
Then run the following:
npm installto install dependencies.npm run dev:chrometo start the development server for chrome extensionnpm run dev:firefoxto start the development server for firefox addonnpm run dev:operato start the development server for opera extensionnpm run build:chrometo build chrome extensionnpm run build:firefoxto build firefox addonnpm run build:operato build opera extensionnpm run buildbuilds and packs extensions all at once to extension/ directory
-
npm installto install dependencies. -
To watch file changes in development
- Chrome
npm run dev:chrome
- Firefox
npm run dev:firefox
- Opera
npm run dev:opera
- Chrome
-
Load extension in browser
-
- Go to the browser address bar and type
chrome://extensions - Check the
Developer Modebutton to enable it. - Click on the
Load Unpacked Extension…button. - Select your browsers folder in
extension/.
- Go to the browser address bar and type
-
- Load the Add-on via
about:debuggingas temporary Add-on. - Choose the
manifest.jsonfile in the extracted directory
- Load the Add-on via
-
- Load the extension via
opera:extensions - Check the
Developer Modeand load as unpacked from extension’s extracted directory.
- Load the extension via
npm run buildbuilds the extension for all the browsers toextension/BROWSERdirectory respectively.
Note: By default the manifest.json is set with version 0.0.0. The webpack loader will update the version in the build with that of the package.json version. In order to release a new version, update version in package.json and run script.
If you don't want to use package.json version, you can disable the option here.
Update source/manifest.json file with browser vendor prefixed manifest keys
{
"__chrome__name": "SuperChrome",
"__firefox__name": "SuperFox",
"__edge__name": "SuperEdge",
"__opera__name": "SuperOpera"
}if the vendor is chrome this compiles to:
{
"name": "SuperChrome",
}Add keys to multiple vendors by separating them with | in the prefix
{
__chrome|opera__name: "SuperBlink"
}
if the vendor is chrome or opera, this compiles to:
{
"name": "SuperBlink"
}
See the original README of wext-manifest-loader package for more details
Please file an issue here for bugs, missing documentation, or unexpected behavior.
- Shared Eslint & Prettier Configuration -
@abhijithvijayan/eslint-config - Shared TypeScript Configuration -
@abhijithvijayan/tsconfig
MIT © Abhijith Vijayan






