5 releases

✓ Uses Rust 2018 edition

new 0.2.2 Aug 13, 2019
0.2.1 Aug 12, 2019
0.2.0 Jul 30, 2019
0.1.0 Jul 22, 2019

#1 in #quickjs

38 downloads per month

MIT license

2.5MB
66K SLoC

C 61K SLoC // 0.0% comments Rust 5.5K SLoC // 0.1% comments

quickjs-rs

Crates.io docs.rs Build Status CircleCI

A Rust wrapper for QuickJS.

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

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

Limitations

  • Windows is not supported yet

Usage

[dependencies]
quick-js = "0.2.2"
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();

Installation

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

If you would like to use a system version instead, see below.

QuickJS will always be statically linked to your binary.

Features

The crate supports the following features:

  • chrono: adds chrono integration
    • adds a JsValue::Date variant that can be (de)serialized to/from a JS Date
  • patched: applies QuickJS patches that can be found in libquickjs-sys/embed/patches directory.

System installation

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 install

Dependencies