13 unstable releases (5 breaking)

0.6.0-rc.1 May 18, 2024
0.5.0 Apr 8, 2024
0.4.6 Feb 10, 2024
0.4.5 Oct 28, 2023
0.1.0 Mar 4, 2023

#94 in Programming languages

Download history 45/week @ 2024-07-30 2/week @ 2024-09-17 33/week @ 2024-09-24

948 downloads per month

MIT license

3MB
89K SLoC

C 76K SLoC // 0.0% comments Rust 6.5K SLoC // 0.0% comments JavaScript 5.5K SLoC // 0.0% comments Bitbake 424 SLoC // 0.1% comments Just 42 SLoC // 0.1% comments Shell 22 SLoC // 0.1% comments

quickjspp-rs

Crates.io docs.rs

This is a fork of quickjs-rs but replaces the binding to the original quickjs by Fabrice Bellard with its fork quickjspp by Andrew Fedoniouk, which is MSVC compatible/compileable.

QuickJS is a new, small Javascript engine by Fabrice Bellard and Charlie Gordon. It is fast and supports the full ES2020 specification.

QuickJSpp is a fork of Quickjs By Andrew Fedoniouk (a.k.a. c-smile).

This crate allows you to easily run and integrate with Javascript code from Rust.

Quickstart

[dependencies]
quickjspp = "0.5.0"
use quickjspp::{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();

Optional Features

The crate supports the following features:

  • serde: (default enabled). enable serde method from_js and to_js to transform between Rust types and js value in quickjs context. It should compatible with serde_json but not tested yet. See more on the example.

  • chrono: chrono integration

    • adds a JsValue::Date variant that can be (de)serialized to/from a JS Date
  • bigint: arbitrary precision integer support via num-bigint

  • log: allows forwarding console.log messages to the log crate. Note: must be enabled with ContextBuilder::console(quickjspp::console::LogConsole);

  • patched Enabled automatically for some other features, like bigint. You should not need to enable this manually. Applies QuickJS patches that can be found in libquickjs-sys/embed/patches directory.

Installation

By default, quickjs is bundled with the libquickjs-sys crate and automatically compiled, assuming you have the appropriate dependencies.

Windows Support

quickjspp-rs can be used under target x86_64-pc-windows-msvc,

System installation

To use the system installation, without the bundled feature, first install the required dependencies, and then compile and install quickjspp.

You then need to disable the bundled feature in the libquickjs-sys crate to force using the system version.

Dependencies

~1.4–2.4MB
~44K SLoC