rhai 0.17.0

Embedded scripting for Rust
Documentation

Rhai - embedded scripting for Rust

Rhai is a tiny, simple and very fast embedded scripting language for Rust that gives you a safe and easy way to add scripting to your applications. It provides a familiar syntax based on JavaScript and Rust and a simple Rust interface. Here is a quick example.

First, the contents of my_script.rhai:

// Brute force factorial function
fn factorial(x) {
if x == 1 { return 1; }
x * factorial(x - 1)
}

// Calling an external function 'compute'
compute(factorial(10))

And the Rust part:

use rhai::{Engine, EvalAltResult, RegisterFn};

fn main() -> Result<(), Box<EvalAltResult>>
{
// Define external function
fn compute_something(x: i64) -> bool {
(x % 40) == 0
}

// Create scripting engine
let mut engine = Engine::new();

// Register external function as 'compute'
engine.register_fn("compute", compute_something);

#   #[cfg(not(feature = "no_std"))]
#   #[cfg(not(target_arch = "wasm32"))]
assert_eq!(
// Evaluate the script, expects a 'bool' return
engine.eval_file::<bool>("my_script.rhai".into())?,
true
);

Ok(())
}

Optional features

Feature Description
unchecked Exclude arithmetic checking (such as overflows and division by zero). Beware that a bad script may panic the entire system!
no_function Disable script-defined functions if not needed.
no_module Disable loading external modules if not needed.
no_index Disable arrays and indexing features if not needed.
no_object Disable support for custom types and objects.
no_float Disable floating-point numbers and math if not needed.
no_optimize Disable the script optimizer.
only_i32 Set the system integer type to i32 and disable all other integer types. INT is set to i32.
only_i64 Set the system integer type to i64 and disable all other integer types. INT is set to i64.
no_std Build for no-std. Notice that additional dependencies will be pulled in to replace std features.
sync Restrict all values types to those that are Send + Sync. Under this feature, Engine, Scope and AST are all Send + Sync.
serde Enable serialization/deserialization via serde. Notice that the serde crate will be pulled in together with its dependencies.
internals Expose internal data structures (beware they may be volatile from version to version).

See The Rhai Book for details on the Rhai script engine and language.