javy

A configurable JavaScript runtime for WebAssembly.

Uses QuickJS through the quickjs-wasm-rs crate to evalulate JavaScript source code or QuickJS bytecode.

Example usage

```rust use anyhow::{anyhow, Result}; use javy::{quickjs::JSValue, Runtime};

fn main() -> Result<()> { let runtime = Runtime::default(); let context = runtime.context(); context.globalobject()?.setproperty( "print", context.wrapcallback(move |ctx, this, args| { let str = args .first() .okor(anyhow!("Need to pass an argument"))? .tostring(); println!("{str}"); Ok(JSValue::Undefined) })?, )?; context.evalglobal("hello.js", "print('hello!');")?; Ok(()) } ```

Create a Runtime and use the reference returned by context() to add functions and evaluate source code.

Features

Building a project using this crate

For example, if you install the wasi-sdk in /opt/wasi-sdk, you can run: bash export QUICKJS_WASM_SYS_WASI_SDK_PATH=/opt/wasi-sdk

Publishing to crates.io

To publish this crate to crates.io, run ./publish.sh.