npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

jsvu

v2.4.0

Published

JavaScript (engine) Version Updater

Downloads

3,114

Readme

jsvu Build status jsvu on npm

jsvu is the JavaScript (engine) Version Updater.

jsvu makes it easy to install recent versions of various JavaScript engines without having to compile them from source.

Installation

Note: jsvu requires Node.js v18+. (jsvu follows the latest active LTS version of Node.)

Install the jsvu CLI:

npm install jsvu -g

Modify your dotfiles (e.g. ~/.bashrc) to add ~/.jsvu/bin to your PATH:

export PATH="${HOME}/.jsvu/bin:${PATH}"

Then, run jsvu:

jsvu

On first run, jsvu prompts you for your operating system and architecture, and the list of JavaScript engines you wish to manage through jsvu. It then downloads and installs the latest version of each of the engines you selected.

To update the installed JavaScript engines later on, just run jsvu again.

Supported engines per OS

| JavaScript engine | Binary name | mac64 | mac64arm | win32 | win64 | linux32 | linux64 | | ------------------------- | ------------------------- | ------- | ---------- | ------- | ---------------- | --------- | --------- | | Chakra | chakra or ch | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | | GraalJS | graaljs | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | | Hermes | hermes & hermes-repl | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | | JavaScriptCore | javascriptcore or jsc | ✅ | ✅ | ❌ | ✅ * | ❌ | ✅ | | QuickJS-ng | quickjs | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | SpiderMonkey | spidermonkey or sm | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | V8 | v8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | V8 debug | v8-debug | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | XS | xs | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ |

* JavaScriptCore requires external dependencies to run on Windows:

  • On 32-bit Windows, install iTunes.
  • On 64-bit Windows, download the latest WebKitRequirements and add its bin64 directory to your PATH.

Integration with eshost-cli

eshost-cli makes it easy to run and compare code in all JavaScript engines that jsvu installs.

First, install eshost-cli:

npm install -g eshost-cli

Then, either automatically configure jsvu-installed hosts:

eshost --configure-jsvu

…or tell eshost-cli where jsvu installs each JavaScript engine following the instructions below.

Linux/Mac

eshost --add 'Chakra' ch ~/.jsvu/bin/chakra
eshost --add 'GraalJS' graaljs ~/.jsvu/bin/graaljs
eshost --add 'JavaScriptCore' jsc ~/.jsvu/bin/javascriptcore
eshost --add 'QuickJS' qjs ~/.jsvu/bin/quickjs
eshost --add 'SpiderMonkey' jsshell ~/.jsvu/bin/spidermonkey
eshost --add 'V8 --harmony' d8 ~/.jsvu/bin/v8 --args '--harmony'
eshost --add 'V8' d8 ~/.jsvu/bin/v8
eshost --add 'XS' xs ~/.jsvu/bin/xs

Windows

eshost --add "Chakra" ch "%USERPROFILE%\.jsvu\bin\chakra.cmd"
eshost --add "GraalJS" graaljs "%USERPROFILE%\.jsvu\bin\graaljs.cmd"
eshost --add "JavaScriptCore" jsc "%USERPROFILE%\.jsvu\bin\javascriptcore.cmd"
eshost --add "SpiderMonkey" jsshell "%USERPROFILE%\.jsvu\bin\spidermonkey.cmd"
eshost --add "V8 --harmony" d8 "%USERPROFILE%\.jsvu\bin\v8.cmd" --args "--harmony"
eshost --add "V8" d8 "%USERPROFILE%\.jsvu\bin\v8.cmd"
eshost --add "XS" xs "%USERPROFILE%\.jsvu\bin\xs.cmd"

That’s it! You can now run code snippets in all those engines with a single command:

eshost -e 'new RegExp("\n").toString()' # https://crbug.com/v8/1982

eshost -e '(function maxCallStackSize() { try { return 1 + maxCallStackSize(); } catch (_) { return 1; }}())'

eshost -e 'Date.parse("1 Octopus 2018")'

Integration with non-interactive environments

On your personal devices, the only command you’ll ever need is jsvu as described above. There are no command-line flags to remember. 👋🏻

However, there are use cases for running jsvu within non-interactive environments (e.g. as part of continuous integration), where it’s desirable to bypass the initial jsvu prompt asking to confirm your operating system, architecture, and the list of JavaScript engines to install. Here’s how to do that:

jsvu --os=linux64 --engines=all
# Equivalent to:
jsvu --os=linux64 --engines=chakra,graaljs,hermes,javascriptcore,quickjs,spidermonkey,v8,xs

If the operating system and architecture are not known in advance, the --os=default flag attempts to guess the correct value from the running environment. This might not be right for example if running a 32-bit Node.js process on a 64-bit machine.

Note that --engines=all does not install the v8-debug binaries.

Installing specific versions

jsvu also supports installing specific versions alongside the main engine binaries (which it keeps up to date). Here’s an example:

jsvu [email protected]

Binaries installed using this method are named ${BINARY}-${VERSION}, so that the above example installs a binary named v8-7.2.502. This way, there’s never any conflict with the main v8 binary, which jsvu can keep up to date.

This feature works for all the supported engines:

jsvu [email protected]
jsvu [email protected]
jsvu [email protected]
jsvu javascriptcore@242640
jsvu quickjs@2019-08-18
jsvu [email protected]
jsvu [email protected]
jsvu [email protected]
jsvu [email protected]

If you pass in an invalid version number, or if the JavaScript engine creators don’t provide a precompiled binary for that specific version, jsvu shows an error.

As a shorthand, for v8 and v8-debug builds, jsvu can even figure out the last known good revision within a milestone. To install the latest available V8 v7.2.x for example, run:

jsvu [email protected]
# jsvu figures out that this means v7.2.502, and then installs that version.

Security considerations

jsvu avoids the need for sudo privileges by installing everything in ~/.jsvu/bin rather than, say, /usr/bin.

jsvu downloads files over HTTPS, and only uses URLs that are controlled by the creators of the JavaScript engine or, in the case of JavaScriptCore on Linux, the port maintainers.

For maintainers

How to publish new releases

  1. On the main branch, bump the version number in package.json:

    npm version patch -m 'Release v%s'

    Instead of patch, use minor or major as needed.

    Note that this produces a Git commit + tag.

  2. Push the release commit and tag:

    git push && git push --tags

    Our CI then automatically publishes the new release to npm.

Author

Mathias Bynens (@mathias)