Web Extension starter to build "Write Once Run on Any Browser" extension
🙋♂️ Made by @abhijithvijayan
👶🏼 Looking for Non React/TypeScript Version instead?
- Cross Browser Support (Web-Extensions API)
- Browser Taylored 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 ✔ |
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
Then run the following:
yarn installto install dependencies.yarn run dev:chrometo start the development server for chrome extensionyarn run dev:firefoxto start the development server for firefox addonyarn run dev:operato start the development server for opera extensionyarn run build:chrometo build chrome extensionyarn run build:firefoxto build firefox addonyarn run build:operato build opera extensionyarn run buildbuilds and packs extensions all at once to extension/ directory
yarn installto install dependencies.To watch file changes in developement
- Chrome
yarn run dev:chrome
- Firefox
yarn run dev:firefox
- Opera
yarn 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 extension’s extracted directory.
- 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
Update src/manifest/index.js 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 seperating 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 package for more details
yarn run buildbuilds the extension for all the browsers toextension/BROWSERdirectory respectively.
Give a ⭐️ if this project helped you!
Code released under the MIT License.






