A configurable JavaScript runtime for WebAssembly.
Uses QuickJS through the quickjs-wasm-rs
crate to evalulate JavaScript source code or QuickJS bytecode.
```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.
json
- transcoding functions for converting between JSValueRef
and JSONmessagepack
- transcoding functions for converting between JSValueRef
and MessagePackQUICKJS_WASM_SYS_WASI_SDK_PATH
environment variable to the absolute path where you installed the wasi-sdk
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
To publish this crate to crates.io, run ./publish.sh
.