#wasm-engine #javascript #quickjs #anyhow #configuring

javy

Configurable JavaScript runtime for WebAssembly

13 stable releases (5 major)

Uses new Rust 2024

6.0.0 Nov 12, 2025
5.1.0 Oct 6, 2025
5.0.0 Aug 29, 2025
4.1.0 Jul 24, 2025
1.0.0 May 17, 2023

#1367 in WebAssembly

Download history 121/week @ 2025-10-24 159/week @ 2025-10-31 138/week @ 2025-11-07 126/week @ 2025-11-14 101/week @ 2025-11-21 138/week @ 2025-11-28 87/week @ 2025-12-05 198/week @ 2025-12-12 267/week @ 2025-12-19 278/week @ 2025-12-26 305/week @ 2026-01-02 177/week @ 2026-01-09 251/week @ 2026-01-16 539/week @ 2026-01-23 450/week @ 2026-01-30 699/week @ 2026-02-06

1,985 downloads per month
Used in 2 crates (via javy-plugin-api)

Apache-2.0 WITH LLVM-exception

115KB
2.5K SLoC

Javy

A configurable JavaScript runtime for WebAssembly

Documentation Status crates.io status

Uses QuickJS through the rquickjs crate to evalulate JavaScript source code or QuickJS bytecode.

Refer to the crate level documentation to learn more.

Example usage:

use anyhow::Result;
use javy::quickjs::{
   function::{MutFn, Rest},
   Ctx, Function, Value
};
use javy::{from_js_error, Runtime};

fn main() -> Result<()> {
    let runtime = Runtime::default();
    let context = runtime.context();

    context.with(|cx| {
        let globals = cx.globals();
        globals.set(
            "print_hello",
            Function::new(
                cx.clone(),
                MutFn::new(|_: Ctx<'_>, _: Rest<Value<'_>>| {
                    println!("Hello, world!");
                }),
            )?,
        )
    })?;

    context.with(|cx| {
        cx.eval_with_options("print_hello();", Default::default())
            .map_err(|e| from_js_error(cx.clone(), e))
            .map(|_: ()| ())
    })?;

    Ok(())
}

Publishing to crates.io

To publish this crate to crates.io, run ./publish.sh. You will likely need to run git submodule deinit test262 so the working tree is small enough for the publishing to succeed.

Dependencies

~9–13MB
~305K SLoC