All Projects → ahwayakchih → crx3

ahwayakchih / crx3

Licence: MIT license
Node.js module to create CRX3 files (web extension package v3 format) for Chromium, Google Chrome and Opera browsers.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to crx3

Uget Chrome Wrapper
Moved to https://github.com/ugetdm/uget-integrator and https://github.com/ugetdm/uget-extension
Stars: ✭ 74 (+89.74%)
Mutual labels:  opera, google-chrome, chromium
Chromium Ipc Sniffer
A tool to capture communication between Chromium processes on Windows
Stars: ✭ 197 (+405.13%)
Mutual labels:  google-chrome, chromium
Html Pdf Chrome
HTML to PDF converter via Chrome/Chromium
Stars: ✭ 629 (+1512.82%)
Mutual labels:  google-chrome, chromium
exploration-service-worker
Let's get started with ServiceWorker
Stars: ✭ 14 (-64.1%)
Mutual labels:  opera, google-chrome
Qzoneexport
QQ空间导出助手,用于备份QQ空间的说说、日志、私密日记、相册、视频、留言板、QQ好友、收藏夹、分享、最近访客为文件,便于迁移与保存
Stars: ✭ 456 (+1069.23%)
Mutual labels:  chromium, crx
Chrome Charset
An extension used to modify the page default encoding for Chromium 55+ based browsers.
Stars: ✭ 346 (+787.18%)
Mutual labels:  google-chrome, chromium
Pdf Bot
🤖 A Node queue API for generating PDFs using headless Chrome. Comes with a CLI, S3 storage and webhooks for notifying subscribers about generated PDFs
Stars: ✭ 2,551 (+6441.03%)
Mutual labels:  google-chrome, chromium
browserexport
backup and parse browser history databases (chrome, firefox, safari, and other chrome/firefox derivatives)
Stars: ✭ 54 (+38.46%)
Mutual labels:  google-chrome, chromium
Chrome Remote Interface
Chrome Debugging Protocol interface for Node.js
Stars: ✭ 3,603 (+9138.46%)
Mutual labels:  opera, google-chrome
Awesome Meta And Manifest
⚡ Awesome collection of meta tags & manifest properties.
Stars: ✭ 499 (+1179.49%)
Mutual labels:  opera, google-chrome
Gotenberg
A Docker-powered stateless API for PDF files.
Stars: ✭ 3,272 (+8289.74%)
Mutual labels:  google-chrome, chromium
new-tab
⚡ A high-performance browser new tab page that gets you where you need to go faster.
Stars: ✭ 64 (+64.1%)
Mutual labels:  google-chrome, chromium
Wpt
Test suites for Web platform specs — including WHATWG, W3C, and others
Stars: ✭ 3,573 (+9061.54%)
Mutual labels:  opera, google-chrome
Sponsorblock
Skip YouTube video sponsors (browser extension)
Stars: ✭ 3,627 (+9200%)
Mutual labels:  opera, chromium
Colorblinding
An extension for Google Chrome (and Chromium) that simulates the website as a color vision impaired person would see.
Stars: ✭ 25 (-35.9%)
Mutual labels:  google-chrome, chromium
Image-Reverse-Search-WebExtension
WebExtension: Adds an option to the context menu to search with an image on various services.
Stars: ✭ 89 (+128.21%)
Mutual labels:  opera
dnevnik mos ru
Python module to get easy machine access to dnevnik.mos.ru
Stars: ✭ 21 (-46.15%)
Mutual labels:  google-chrome
chef-chrome
Chef cookbook to install Google Chrome browser
Stars: ✭ 16 (-58.97%)
Mutual labels:  google-chrome
docker-selenium-lambda
The simplest demo of chrome automation by python and selenium in AWS Lambda
Stars: ✭ 172 (+341.03%)
Mutual labels:  chromium
throughout
🎪 End-to-end testing made simple (using Jest and Puppeteer)
Stars: ✭ 16 (-58.97%)
Mutual labels:  chromium

CRX3

This module allows you to create web extension files for Chromium, Google Chrome and all other browsers supporting the file format and API, e.g., Opera.

It creates CRXv3 files, which work for Chrome versions 64.0.3242 and above.

If you need to create web extension file for older browser versions, where CRXv3 is not supported, use CRX module instead.

It requires Node.js version 12 (or above) and runs on Linux, MacOS and Windows.

Build status on Linux & MacOS Build status on Windows

Installation

To install CRX3, as with most of the other Node.js modules, use following command line:

npm install crx3

or install it globally:

npm install -g crx3

Usage (CLI)

If you installed CRX3 globally, or you are trying to use it from your project's package.json script(s), you should be able to use it like this:

crx3 web-extension-directory

It supports following options:

  • -z, --zip, --zipPath: create also a simple ZIP file with web extension's files
  • -o, --crx, --crxPath: specify custom path name for CRX3 file
  • -p, --key, --keyPath: specify custom path name for private key file
  • -x, --xml, --xmlPath: specify custom path name for XML (Update Manifest) file
  • --appVersion : specify version number to be written into Update Manifest file
  • --crxURL : specify URL to be written into Update Manifest file
  • --browserVersion : specify minimum browser version required to run web extension

If any of the *Path options is not followed by a path or a file name, output file name will be based on the web extension's directory name.

Private key file will not be created if one already exist. Existing one will be used. CRX, ZIP and XML files are always overwritten.

--appVersion, --crxURL and --browserVersion are used only for writing XML file.

For example:

crx3 -p -o -x -z some-other-name.zip web-extension

It will create "web-extension.pem" (if one does not exist yet), "web-extension.crx", "web-extension.xml" and "some-other-name.zip" files.

WARNING: if you're using option without name/path, it must be specified before option with name/path. Otherwise, be sure that the list of directories and/or files to include in web extension file is specified after the special -- marker, like this:

crx3 -z some-other-name.zip -x -o -- web-extension

If you already have a ZIP file containing web extension's files, you can use CRX3 like this:

cat web-extension.zip | crx3 -p web-extension.pem

It will convert existing ZIP file into a "web-extension.crx" file and create a "web-extension.pem" file. Make sure that ZIP file content has no parent directory, e.g., "manifest.json" file has to be there, not "web-extension/manifest.json". Otherwise new CRX file will not work in a browser.

WARNING: CRX3 does not read contents of the ZIP file. Which means, that for an optional XML file to be working, either APP_VERSION environment variable or --appVersion argument has to be specified. Otherwise XML file will contain "${APP_VERSION}" placeholder instead. Same for CRX_URL/--crxURL and BROWSER_VERSION/--browserVersion values.

You can also create ZIP file on the fly, and pass it like this:

zip -r -9 -j - web-extension | crx3 -p web-extension.pem

Usage (API)

const crx3 = require('crx3');

crx3(['example/example-extension/manifest.json'], {
	keyPath: 'example/example-extension.pem',
	crxPath: 'example/example-extension.crx',
	zipPath: 'example/example-extension.zip',
	xmlPath: 'example/example-extension.xml',
	crxURL : 'http://127.0.0.1:8080/example-extension.crx'
})
	.then(() => console.log('done'))
	.catch(console.error)
;

Known Issues

CRX_REQUIRED_PROOF_MISSING (Chrome and Chromium)

Since version 75.x, Chrome requires Google's web store signature on extension files. CRX3 module does not provide those (that would require access to Google's private key). Following information is "guessed" by checking Chromium's source code at:

So, there's a chance i got it wrong, in which case do not be afraid to create a new issue about it.

Unless extension is being installed through the chrome://extensions/ page, with "developer mode" enabled beforehand (it has to be enabled and then Chrome has to be restarted), there's a big chance that users will see CRX_REQUIRED_PROOF_MISSING error when they try to install .crx file created with CRX3 module.

If extension is installed manually, on MacOS or Linux, it can be installed as long as:

On Windows, they have to be installed in "developer mode", or through enterprise policy (see https://developer.chrome.com/extensions/hosting_changes).

On all systems, extensions can be installed through a policy setup:

API Documentation

To generate documentation for this module, clone module from repository (package does not include required files) and use:

npm run doc

To write extensions, use Extension API for Chrome/Chromium and WebExtensions API for Mozilla browsers. They are quite similar, so it is possible to create an extension that works on all of them (it just needs to be build into different extension file formats - you can use https://github.com/mozilla/web-ext for Mozilla).

Testing

To run tests, clone module (see API Documentation) and use:

npm test

Tests include optional support for checking if CRX files built by the module will run in Chromium browser on a Linux system. To make it work:

  • make sure that Chrome or Chromium browser is already installed,
  • make sure that CHROME_BIN environment variable is set with path to the browser's executable,
  • run npm run puppeteer to install additional dependencies.

WARNING: Since there is no way to imitate installation process of a CRX file through the puppeteer (or is there?), test will try to create an /etc/chromium/policies/managed/crx3-example-extension-test.json policy file to "force install" it. That is why it is best to run whole thing in a virtual machine, e.g., using qemu, or in a container, e.g., using podman or docker.

Using podman:

podman run --rm -v $(pwd):/app -v $(pwd)/node_modules:/app/node_modules --userns=keep-id -it ahwayakchih/nodeapp:puppeteer xvfb-run npm test

Using docker:

docker run --rm -v $(pwd):/app -v $(pwd)/node_modules:/app/node_modules -it ahwayakchih/nodeapp:puppeteer xvfb-run npm test
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].