Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/webextension-toolbox/webextension-toolbox
Small CLI toolbox for cross-browser WebExtension development
https://github.com/webextension-toolbox/webextension-toolbox
auto chrome chrome-extension cli-toolbox edge edge-extension firefox firefox-extension opera-extension webextension webextension-toolbox webpack
Last synced: 7 days ago
JSON representation
Small CLI toolbox for cross-browser WebExtension development
- Host: GitHub
- URL: https://github.com/webextension-toolbox/webextension-toolbox
- Owner: webextension-toolbox
- License: mit
- Created: 2018-01-04T18:24:25.000Z (about 7 years ago)
- Default Branch: main
- Last Pushed: 2025-01-10T11:14:27.000Z (16 days ago)
- Last Synced: 2025-01-10T22:14:00.653Z (16 days ago)
- Topics: auto, chrome, chrome-extension, cli-toolbox, edge, edge-extension, firefox, firefox-extension, opera-extension, webextension, webextension-toolbox, webpack
- Language: TypeScript
- Homepage: https://npmjs.com/package/@webextension-toolbox/webextension-toolbox
- Size: 1.94 MB
- Stars: 731
- Watchers: 13
- Forks: 70
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-random-stuff - webextension-toolbox/webextension-toolbox: Small CLI toolbox for cross-browser WebExtension development - Small CLI toolbox for cross-browser WebExtension development - webextension-toolbox/webextension-toolbox (Uncategorized / Uncategorized)
- my-awesome-list - webextension-toolbox - browser WebExtension development | webextension-toolbox | 733 | (TypeScript)
- awesome-webext-dev - webextension-toolbox - Small CLI toolbox for cross-browser WebExtension development (Tooling)
README
[](https://www.npmjs.com/package/@webextension-toolbox/webextension-toolbox)
# WebExtension Toolbox
[![npm version](https://badge.fury.io/js/@webextension-toolbox%2Fwebextension-toolbox.svg)](https://badge.fury.io/js/webextension-toolbox%2Fwebextension-toolbox)
[![Node.js CI](https://github.com/webextension-toolbox/webextension-toolbox/actions/workflows/build.yml/badge.svg)](https://github.com/webextension-toolbox/webextension-toolbox/actions/workflows/build.yml)
[![license](https://img.shields.io/npm/l/@webextension-toolbox%2Fwebextension-toolbox.svg)](https://github.com/webextension-toolbox/webextension-toolbox/blob/main/LICENSE)Small cli toolbox for creating cross-browser WebExtensions.
If you want to get started quickly check out the [yeoman generator](https://github.com/webextension-toolbox/generator-web-extension) for this project.
- [WebExtension Toolbox](#webextension-toolbox)
- [Browser Support](#browser-support)
- [Official](#official)
- [Unofficial](#unofficial)
- [Features](#features)
- [Packing](#packing)
- [Manifest validation](#manifest-validation)
- [Manifest defaults](#manifest-defaults)
- [Typescript Support](#typescript-support)
- [Manifest vendor keys](#manifest-vendor-keys)
- [Example](#example)
- [Polyfill](#polyfill)
- [Usage](#usage)
- [Install](#install)
- [Globally](#globally)
- [Locally](#locally)
- [Development](#development)
- [Syntax](#syntax)
- [Examples](#examples)
- [Build](#build)
- [Syntax](#syntax-1)
- [Building](#building)
- [Developing](#developing)
- [.webextensiontoolboxrc](#webextensiontoolboxrc)
- [Customizing webpack config](#customizing-webpack-config)
- [FAQ](#faq)
- [What is the difference to web-ext?](#what-is-the-difference-to-web-ext)
- [How do I use React?](#how-do-i-use-react)
- [How do I use Typescript?](#how-do-i-use-typescript)
- [What is SWC?](#what-is-swc)
- [License](#license)# Browser Support
## Official
These browsers are tested through [github actions](https://github.com/webextension-toolbox/webextension-toolbox/actions/workflows/build.yml)
- Edge (`edge`)
- Firefox (`firefox`)
- Chrome (`chrome`)
- Safari (`safari`)
- Opera (`opera`)## Unofficial
These browsers will compile but are not tested
- Internet Explorer (`ie`)
- iOS Safari (`ios_saf`)
- Opera Mini (`op_mini`)
- Android Browser (`android`)
- Blackberry Browser (`bb`)
- Opera Mobile (`op_mob`)
- Chrome for Android (`and_chr`)
- Firefox for Android (`and_ff`)
- Internet Explorer Mobile (`ie_mob`)
- UC Browser (`and_uc`)
- Samsung Internet (`samsung`)
- QQ Browser (`and_qq`)
- Baidu Browser (`baidu`)
- KaiOS (`kaios`)# Features
## Packing
The `build` task creates specific bundles for:
- Firefox (`.xpi`)
- Opera (`.crx`)all other bundles are `.zip` files
## Manifest validation
Validates your `manifest.json` while compiling.
You can skip this by adding `--validateManifest` to your `build` or `dev` command.
## Manifest defaults
Uses default fields (`name`, `version`, `description`) from your `package.json`
## Typescript Support
Native typescript support (but not enforced!)
(see section [How do I use Typescript?](#how-do-i-use-typescript))## Manifest vendor keys
Allows you to define vendor specific manifest keys.
### Example
`manifest.json`
```
"name": "my-extension",
"__chrome__key": "yourchromekey",
"__chrome|opera__key2": "yourblinkkey"
```If the vendor is `chrome` it compiles to:
```
"name": "my-extension",
"key": "yourchromekey",
"key2": "yourblinkkey"
```If the vendor is `opera` it compiles to:
```
"name": "my-extension",
"key2": "yourblinkkey"
```else it compiles to:
```
"name": "my-extension"
```## Polyfill
The [WebExtension specification](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions) is currently supported on Chrome, Firefox, Edge (Chromium) and Safari ([Safari Web Extension’s Browser Compatibility](https://developer.apple.com/documentation/safariservices/safari_web_extensions/assessing_your_safari_web_extension_s_browser_compatibility)).
This toolbox no longer provides any polyfills for cross-browser support. If you need polyfills e.g. between 'browser' and 'chrome', we recommend detecting the browser during the build time using process.env.VENDOR.
This toolbox comes with babel-preset-env. Feel free add custom configuration if you need any custom polyfills.
# Usage
## Install
#### Globally
```shell
$ npm install -g @webextension-toolbox/webextension-toolbox
```#### Locally
```shell
$ npm install -D @webextension-toolbox/webextension-toolbox
```## Development
- Compiles the extension via webpack to `dist/`.
- Watches all extension files and recompiles on demand.
- Reloads extension or extension page as soon something changed.
- Sets `process.env.NODE_ENV` to `development`.
- Sets `process.env.VENDOR` to the current vendor.### Syntax
```shell
$ webextension-toolbox dev [..options]
```### Examples
```shell
$ webextension-toolbox dev --help
$ webextension-toolbox dev chrome
$ webextension-toolbox dev firefox
$ webextension-toolbox dev edge
$ webextension-toolbox dev safari
```## Build
- Compile extension via webpack to `dist/`.
- Minifies extension Code.
- Sets `process.env.NODE_ENV` to `production`.
- Sets `process.env.VENDOR` to the current vendor.
- Packs extension to `packages`.### Syntax
#### Building
```shell
Usage: build [options]Compiles extension for production
Options:
--swc Use SWC instead of Babel
-c, --config [config] specify config file path
-s, --src [src] specify source directory (default: "app")
-t, --target [target] specify target directory (default: "dist/[vendor]")
-d, --devtool [string | false] controls if and how source maps are generated (default: "cheap-source-map")
--vendor-version [vendorVersion] last supported vendor (default: current)
--copy-ignore [copyIgnore...] Do not copy the files in this list, glob pattern
--compile-ignore [compileIgnore...] Do not compile the files in this list, glob pattern
--no-manifest-validation Skip Manifest Validation
--save Save config to .webextensiontoolboxrc
--verbose print messages at the beginning and end of incremental build
--no-minimize disables code minification
-h, --help display help for command
```#### Developing
```shell
Usage: dev [options]Compiles extension in devmode
Arguments:
vendor The Vendor to compileOptions:
--swc Use SWC instead of Babel
-c, --config [config] specify config file path
-s, --src [src] specify source directory (default: "app")
-t, --target [target] specify target directory (default: "dist/[vendor]")
-d, --devtool [string | false] controls if and how source maps are generated (default: "cheap-source-map")
--vendor-version [vendorVersion] last supported vendor (default: current)
--copy-ignore [copyIgnore...] Do not copy the files in this list, glob pattern
--compile-ignore [compileIgnore...] Do not compile the files in this list, glob pattern
--no-manifest-validation Skip Manifest Validation
--save Save config to .webextensiontoolboxrc
--verbose print messages at the beginning and end of incremental build
--no-auto-reload Do not inject auto reload scripts into background pages or service workers
-p, --port [port] Define the port for the websocket development server (default: "35729")
--dev-server [devServer] use webpack dev server to serve bundled files (default: false)
-h, --help display help for command
```## .webextensiontoolboxrc
This file is used to configure the WebExtension Toolbox without cli options. You can generate it by running `webextension-toolbox --save command`. This will take your current cli options and save them to `.webextensiontoolboxrc`. You can then run `webextension-toolbox` without any options
## Customizing webpack config
In order to extend the usage of `webpack`, you can define a function that extends its config through a file you define through the usage of the `-c` option in your project root.
```js
module.exports = {
webpack: (config, { dev, vendor }) => {
// Perform customizations to webpack config// Important: return the modified config
return config;
},
};
```As WebExtension Toolbox uses webpack’s [devtool](https://webpack.js.org/configuration/devtool/) feature under the hood, you can also customize the desired devtool with the `--devtool` argument.
For example, if you have problems with source maps on Firefox, you can try the following command:
```
webextension-toolbox build firefox --devtool=inline-cheap-source-map
```Please see [Issue #58](https://github.com/webextension-toolbox/webextension-toolbox/issues/58) for more information on this
# FAQ
## What is the difference to [web-ext](https://github.com/mozilla/web-ext)?
If want to develop browser extensions for Firefox only [web-ext](https://github.com/mozilla/web-ext) might be a better fit for you, since it supports extension signing, better manifest validation and auto mounting.
Nevertheless if you want to develop cross browser extensions using
- the same development experience in every browser
- a single codebase
- custom webpack configurationwebextension-toolbox might be your tool of choice.
## How do I use React?
1. `npm install @babel/preset-react --save-dev`
2. Create a .babelrc file next to your package.json file and insert the following contents:```
{
"presets": [
"@babel/preset-react"
]
}
```## How do I use Typescript?
1. `npm install typescript --save-dev`
2. Run `tsc --init` or manually add a tsconfig.json file to your project root## What is SWC?
SWC (stands for Speedy Web Compiler) is a super-fast TypeScript / JavaScript compiler written in Rust. It's an alternative to Babel. For more informaiton see: https://github.com/swc-project/swc
# License
Copyright 2018-2023 Henrik Wenz
This project is free software released under the MIT license.