A Rust wrapper for QuickJS.
QuickJS is a new, small Javascript engine by Fabrice Bellard and Charlie Gordon. It is fast and supports the full ES2020 specification.
This crate allows you to easily run and integrate with Javascript code from Rust.
[dependencies] quick-js = "0.4.1"use quick_js::{Context, JsValue}; let context = Context::new().unwrap(); // Eval. let value = context.eval("1 + 2").unwrap(); assert_eq!(value, JsValue::Int(3)); let value = context.eval_as::<String>(" var x = 100 + 250; x.toString() ").unwrap(); assert_eq!(&value, "350"); // Callbacks. context.add_callback("myCallback", |a: i32, b: i32| a + b).unwrap(); context.eval(r#" // x will equal 30 var x = myCallback(10, 20); "#).unwrap();The crate supports the following features:
-
chrono: chrono integration- adds a
JsValue::Datevariant that can be (de)serialized to/from a JSDate
- adds a
-
bigint: arbitrary precision integer support via num-bigint -
log: allows forwardingconsole.logmessages to thelogcrate. Note: must be enabled withContextBuilder::console(quick_js::console::LogConsole); -
patchedEnabled automatically for some other features, likebigint. You should not need to enable this manually. Applies QuickJS patches that can be found inlibquickjs-sys/embed/patchesdirectory.
By default, quickjs is bundled with the libquickjs-sys crate and automatically compiled, assuming you have the appropriate dependencies.
Windows is only supported with the MSYS2 environment and x86_64-pc-windows-gnu target architecture.
If you have MSYS2 installed and the MSYS bin directory in your path, you can compile quickjs with cargo build --target="x86_64-pc-windows-gnu".
The target can also be configured permanently via a cargo config file or the CARGO_BUILD_TARGET env var.
To use the system installation, without the bundled feature, first install the required dependencies, and then compile and install quickjs.
# Debian/Ubuntu: apt-get install -y curl xz-utils build-essential gcc-multilib libclang-dev clang mkdir quickjs curl -L https://bellard.org/quickjs/quickjs-2019-07-09.tar.xz | tar xJv -C quickjs --strip-components 1 cd quickjs sudo make installYou then need to disable the bundled feature in the libquickjs-sys crate to force using the system version.