We’re happy to announce the inclusion of Javy as a hosted project under the Bytecode Alliance. This post will delve into what Javy is, the motivation behind its adoption, and the process that led to its integration into the Bytecode Alliance.

Javy

Javy is a JavaScript-to-WebAssembly toolchain originally developed by Shopify to bring JavaScript support to Shopify Functions. It is based on the QuickJS engine and generates compact and efficient WebAssembly modules. Shopify has published a detailed technical article covering the original motivation and the technical details of Javy.

The motivation and process behind the adoption

While Javy was initially designed for a specific use-case, it eventually found its way into multiple companies operating in the WebAssembly space as a means to run JavaScript on WebAssembly. This adoption prompted the creators of Javy to rethink its governance model, shifting towards an open, community-driven model that ensures a healthy environment for the project’s growth and development.

The process to include Javy as a hosted project involved:

Getting started

The simplest way to try Javy is to invoke it through npx javy-cli, assuming that npm is installed in your system.

Upon successful execution of the command, you can create a JavaScript source and compile it to WebAssembly.

Consider the following simple program, stored in a file named index.js:

console.log("Hello, world!");

To generate a WebAssembly module, run npx javy-cli compile index.js -o index.wasm.

If the process is successful, you should have index.wasm in your current working directory, which then can be executed with Wasmtime via wasmtime run index.wasm --invoke _start and you should see the string Hello, world! printed as output.

For more details, please see the project’s README.

Contributing

If you find a missing feature, a bug or any other kind of improvements, come talk to us on GitHub. We also have a list of good first issues if you’re interested in contributing and getting familiar with Javy.