Security News
Highlights from the 2024 Rails Community Survey
A record 2,709 developers participated in the 2024 Ruby on Rails Community Survey, revealing key tools, practices, and trends shaping the Rails ecosystem.
Package web extension into CRX file (version 3) for Google Chrome and Chromium browsers
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.
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
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:
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 read existing ZIP file contents and create "web-extension.crx" and "web-extension.pem" files. 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
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)
;
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:
update_url
value in manifest.json
file is correct (see https://developer.chrome.com/extensions/linux_hosting#update_url),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:
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).
To run tests, clone module (see API Documentation) and use:
npm test
Tests include optional support for checking generated CRX file in Chromium browser when run on Linux system. To make it work:
CHROME_BIN
environment variable is set with path to the browser's executable,npm install
again (to install additional dependencies).WARNING: Since there is no way to imitate installation process of a CRX file through 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
FAQs
Package web extension into CRX file (version 3) for Google Chrome and Chromium browsers
The npm package crx3 receives a total of 2,159 weekly downloads. As such, crx3 popularity was classified as popular.
We found that crx3 demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A record 2,709 developers participated in the 2024 Ruby on Rails Community Survey, revealing key tools, practices, and trends shaping the Rails ecosystem.
Security News
In 2023, data breaches surged 78% from zero-day and supply chain attacks, but developers are still buried under alerts that are unable to prevent these threats.
Security News
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.