Awesome
<h1 align="center">🚀 web-extension-starter</h1> <p align="center">Web Extension starter to build "Write Once Run on Any Browser" extension</p> <div align="center"> <a href="https://travis-ci.com/abhijithvijayan/web-extension-starter"> <img src="https://travis-ci.com/abhijithvijayan/web-extension-starter.svg?branch=master" alt="Travis Build" /> </a> </a> <a href="https://david-dm.org/abhijithvijayan/web-extension-starter"> <img src="https://img.shields.io/david/abhijithvijayan/web-extension-starter.svg?colorB=orange" alt="DEPENDENCIES" /> </a> <a href="https://github.com/abhijithvijayan/web-extension-starter/blob/master/LICENSE"> <img src="https://img.shields.io/github/license/abhijithvijayan/web-extension-starter.svg" alt="LICENSE" /> </a> <a href="https://twitter.com/intent/tweet?text=Check%20out%20web-extension-starter%21%20by%20%40_abhijithv%0A%0AWeb%20Extension%20starter%20to%20build%20%22Write%20Once%20Run%20on%20Any%20Browser%22%20extension.%20https%3A%2F%2Fgithub.com%2Fabhijithvijayan%2Fweb-extension-starter%0A%0A%23javascript%20%23react%20%23typescript%20%23sass%20%23webextension%20%23chrome%20%23firefox%20%23opera"> <img src="https://img.shields.io/twitter/url/http/shields.io.svg?style=social" alt="TWEET" /> </a> </div> <h3 align="center">🙋♂️ Made by <a href="https://twitter.com/_abhijithv">@abhijithvijayan</a></h3> <p align="center"> Donate: <a href="https://www.paypal.me/iamabhijithvijayan" target='_blank'><i><b>PayPal</b></i></a>, <a href="https://www.patreon.com/abhijithvijayan" target='_blank'><i><b>Patreon</b></i></a> </p> <p align="center"> <a href='https://www.buymeacoffee.com/abhijithvijayan' target='_blank'> <img height='36' style='border:0px;height:36px;' src='https://bmc-cdn.nyc3.digitaloceanspaces.com/BMC-button-images/custom_images/orange_img.png' border='0' alt='Buy Me a Coffee' /> </a> </p> <hr />❤️ it? ⭐️ it on GitHub or Tweet about it.
👶🏼 HTML + JavaScript = This branch
🧙♂️ React + TypeScript = Checkout react-typescript branch
😨 React + JavaScript = Checkout react-javascript branch
Features
- Cross Browser Support (Web-Extensions API)
- Browser Tailored Manifest generation
- Automatic build on code changes
- Automatic extension reload on browser
- Auto packs browser specific build files
- ES6 modules support
- SASS styling
Browser Support
49 & later ✔ | 52 & later ✔ | 36 & later ✔ | 79 & later ✔ | Latest ✔ | Latest ✔ | Latest ✔ |
Demo
Use this template
Create a new directory and run
curl -fsSL https://github.com/abhijithvijayan/web-extension-starter/archive/master.tar.gz | tar -xz --strip-components=1
🚀 Quick Start
Ensure you have
Then run the following:
yarn install
to install dependencies.yarn run dev:chrome
to start the development server for chrome extensionyarn run dev:firefox
to start the development server for firefox addonyarn run dev:opera
to start the development server for opera extensionyarn run build:chrome
to build chrome extensionyarn run build:firefox
to build firefox addonyarn run build:opera
to build opera extensionyarn run build
builds and packs extensions all at once to extension/ directory
Development
-
yarn install
to 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
-
Chrome
- Go to the browser address bar and type
chrome://extensions
- Check the
Developer Mode
button to enable it. - Click on the
Load Unpacked Extension…
button. - Select your extension’s extracted directory.
- Go to the browser address bar and type
-
Firefox
- Load the Add-on via
about:debugging
as temporary Add-on. - Choose the
manifest.json
file in the extracted directory
- Load the Add-on via
-
Opera
- Load the extension via
opera:extensions
- Check the
Developer Mode
and load as unpacked from extension’s extracted directory.
- Load the extension via
Production
yarn run build
builds the extension for all the browsers toextension/BROWSER
directory 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.
Generating browser specific manifest.json
Update src/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 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-loader
package for more details
Bugs
Please file an issue here for bugs, missing documentation, or unexpected behavior.
Linting Config
- Shared Eslint & Prettier Configuration -
@abhijithvijayan/eslint-config
License
MIT © Abhijith Vijayan