31 releases (16 breaking)

new 0.19.0 Mar 25, 2024
0.17.0 Dec 12, 2023
0.16.1 Nov 30, 2023
0.8.0 Jul 28, 2023

#221 in Date and time

Download history 23/week @ 2023-12-06 68/week @ 2023-12-13 28/week @ 2023-12-20 15/week @ 2023-12-27 75/week @ 2024-01-03 27/week @ 2024-01-10 54/week @ 2024-01-17 88/week @ 2024-01-24 134/week @ 2024-01-31 76/week @ 2024-02-07 286/week @ 2024-02-14 172/week @ 2024-02-21 188/week @ 2024-02-28 270/week @ 2024-03-06 249/week @ 2024-03-13 149/week @ 2024-03-20

882 downloads per month
Used in zen-engine

MIT license

170KB
4K SLoC

A lightweight expression language designed for the evaluation of expressions in various contexts.

Zen Expression is a versatile single-threaded expression language designed for simplicity high-performance. It's primarily used for evaluating and processing JSON data offers key components that empower developers in creating responsive and non-blocking I/O applications Out of the box, it comes with amazing benefits:

  • 🚀 Blazingly fast - Perform millions of evaluations per second
  • 🧠 Intuitive syntax - Minimalistic and expressive syntax
  • 💼 Portable - Can be compiled for all standard architectures including WASM

For a full list of language references, visit documentation.

Example

Evaluate expression using isolate:

use zen_expression::{evaluate_expression, json};

fn main() {
    let context = json!({ "tax": { "percentage": 10 } });
    let tax_amount = evaluate_expression("50 * tax.percentage / 100", &context).unwrap();

    assert_eq!(tax_amount, json!(5));
}

High Performance

When evaluating a lot of expressions at once, you can use Isolate directly. Under the hood, Isolate will re-use allocated memory from previous evaluations, drastically improving performance.

use zen_expression::{Isolate, json};

fn main() {
    let context = json!({ "tax": { "percentage": 10 } });
    let mut isolate = Isolate::with_environment(&context);

    // Fast 🚀
    for _ in 0..1_000 {
        let tax_amount = isolate.run_standard("50 * tax.percentage / 100").unwrap();
        assert_eq!(tax_amount, json!(5));
    }
}

Feature flags

Name Description Default?
regex-deprecated Uses standard regex crate Yes
regex-lite Opts for usage of lightweight regex-lite crate. Useful for reducing build size, especially in WASM. No

Dependencies

~4–5.5MB
~95K SLoC