4 stable releases
2.2.0 | Jan 31, 2024 |
---|---|
2.1.0 | Sep 11, 2023 |
2.0.0 | Aug 17, 2023 |
1.0.0 | May 17, 2023 |
#905 in WebAssembly
31 downloads per month
Used in javy-apis
145KB
3K
SLoC
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
use anyhow::{anyhow, Result};
use javy::{quickjs::JSValue, Runtime};
fn main() -> Result<()> {
let runtime = Runtime::default();
let context = runtime.context();
context.global_object()?.set_property(
"print",
context.wrap_callback(move |_ctx, _this, args| {
let str = args
.first()
.ok_or(anyhow!("Need to pass an argument"))?
.to_string();
println!("{str}");
Ok(JSValue::Undefined)
})?,
)?;
context.eval_global("hello.js", "print('hello!');")?;
Ok(())
}
Create a Runtime
and use the reference returned by context()
to add functions and evaluate source code.
Features
export_alloc_fns
- exportscanonical_abi_realloc
andcanonical_abi_free
from generated WebAssembly for allocating and freeing memoryjson
- transcoding functions for converting betweenJSValueRef
and JSONmessagepack
- transcoding functions for converting betweenJSValueRef
and MessagePack
Publishing to crates.io
To publish this crate to crates.io, run ./publish.sh
.
Using a custom WASI SDK
This crate can be compiled using a custom WASI SDK. When building this crate, set the QUICKJS_WASM_SYS_WASI_SDK_PATH
environment variable to the absolute path where you installed the SDK.
Dependencies
~3.5–8MB
~175K SLoC