A robust, modern starter template for building Chrome extensions using TypeScript, Webpack, and best practices for browser extension development.
To create a new project, run the following command:
npx create-typescript-extension <project-name>
or to create a project in the current directory, run the following command:
npx create-typescript-extension .
To install the CLI to the system, run the following command:
npm install -g create-typescript-extension
and then you can use the CLI to create a new project by running the following command:
create-typescript-extension <project-name>
- 🔧 TypeScript support
- 📦 Webpack bundling
- 🌐 Content script and service worker integration
- 🔒 Secure content security policy
- 🔑 Manifest v3
- 🔥 Hot reloading in development mode
- Node.js (v18+ recommended)
- npm or yarn
- Chrome Browser (or any other Chromium based browser)
yarn dev
yarn build
- Open Chrome and navigate to
chrome://extensions/
- Enable "Developer mode"
- Click "Load unpacked" and select the project directory
- You don't need to select the
dist
directory, it's already set in the manifest.json
├── src/
│ ├── content/
│ │ └── index.ts # Content script entry point
│ └── worker/
│ └── index.ts # Service worker entry point
├── dist/ # Compiled extension files
├── webpack.config.js # Webpack configuration
├── tsconfig.json # TypeScript configuration
└── manifest.json # Chrome extension manifest
The extension requests the following Chrome permissions by default. You can modify the permissions in the manifest.json file.
scripting
activeTab
storage
declarativeNetRequest
tabs
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Harshit Budhraja - @harshitbudhraja on X (previously, Twitter)
Note: This is a starter template. Remember to customize it to fit your specific extension's needs!