Create React browser extensions with no build configuration.
This is a fork of create-react-app to make creating Browser Extensions in React more accessible and following Create-React-App's(CRA) philosophy, especially convention over configuration.
- Same CRA Developer Experience for your browser extension projects (
service worker functionality) - Webpack dev server hot reloads extension on changes (NOTE: contentScript hot reloading not supported)
- Supports any combination of background, content and popup chrome extensions
- Automated fork watcher to stay updated with the original CRA
- Add support for automated deployments and docs to help users with what to do after having built their extension.
- Add e2e test suite similar to the original CRA and run with automated pipeline.
- Add some kind of dependency watcher (e.g. greenkeeper) to stay up to date with the dependencies that are not managed by CRA
see Create a browser extension for a more in depth start guide see CRA user guide for more information on different configurations and functionality available.
If something doesn’t work, please file an issue.
npx create-react-app my-browser-extension --scripts-version react-browser-extension-scripts
cd my-browser-extension
npm start
(npx comes with npm 5.2+ and higher, see instructions for older npm versions)
Then open Chrome, and unpack the newly created /dev
folder to see your extension added locally to your browser.
When you’re ready to ship your extension, create an optimized build with npm run build
.
It's follows mostly the same conventions as CRA.
There are different types of chrome extensions which can be any combination of:
- Popup UI which renders your
index.js
when you click on your extension in the browser extension icon. - Background script which will run in the background from
/background/index.js
and can be use for things like state-management. - Content script from
/contentScript/index.js
which will run on configured web pages - Options UI ❎ Does not support yet
- Dev tools page ❎ Does not support yet
These are all controlled by the all important /public/manifest.json
which is configurable by you to control what kind of extension you want build.
Do not delete any of the entry files, this is a convention to remind you what your extensions could be. The build will notify you and fail if you remove any of these important files.
You’ll need to have Node 8.16.0 or Node 10.16.0 or later version on your local development machine (but it’s not required on the server). You can use nvm (macOS/Linux) or nvm-windows to easily switch Node versions between different projects.
To create a new Browser Extension, you may choose one of the following methods:
npx create-react-app my-browser-extension --scripts-version react-browser-extension-scripts
(npx comes with npm 5.2+ and higher, see instructions for older npm versions)
npm init react-app my-browser-extension --scripts-version react-browser-extension-scripts
npm init <initializer>
is available in npm 6+
yarn create react-app my-browser-extension --scripts-version react-browser-extension-scripts
yarn create
is available in Yarn 0.25+
It will create a directory called my-browser-extension
inside the current folder.
Inside that directory, it will generate the initial project structure and install the transitive dependencies:
my-browser-extension
├── README.md
├── node_modules
├── package.json
├── .gitignore
├── public
│ ├── img
│ │ ├── icon-16.png
│ │ ├── icon-48.png
│ │ ├── icon-128.png
│ ├── popup.html
│ └── manifest.json
└── src
├── background
│ ├── index.js
├── contentScripts
│ ├── index.js
├── App.css
├── App.js
├── App.test.js
├── index.css
├── index.js
├── logo.svg
No configuration or complicated folder structures, just the files you need to build your extension.
Once the installation is done, you can open your project folder:
cd my-browser-extension
Inside the newly created project, you can run some built-in commands:
Runs the browser extension in development mode. You will see a /dev
folder has been created in your project with the extension.
To view the extension in your browser, open up chrome and unpack extension.
The extension will automatically reload if you make changes to the code.
You will see the build errors and lint warnings in the console.
Builds the app for production to the build
folder.
It correctly bundles React in production mode and optimizes the build for the best performance.
Your extension is ready to be shipped.
Check out this awesome browser extensions list for more great packages to help you create a great web extension
We'd love to have your helping hand on create-react-extension
! See CONTRIBUTING.md for more information on what we're looking for and how to get started.
We are grateful to everyone who has been a part of the following existing related projects for their ideas and collaboration:
- Create-React-App
- How to Fork CRA Post to help me create this successfully
- React-chrome-extension-boilerplate and create-chrome-extension, both of unfortunately don't look like they're actively supported, but have been inspiration and shown an appetite for building extensions in the community.
- I have no doubt this will grow as the project grows.
Create React App is open source software licensed as MIT.