Nodora

Introduction

Learn how to define, compile, and evaluate rules with Nodora

Nodora is a small, declarative rule language and runtime. You write rules in a .ruleset file, compile them to a portable compiled ruleset (NIR), and evaluate them against an input payload. Rules can produce outputs and emit signals that hook into your own application code.

signal SendVerificationEmail(user_id)
signal BlockAccount(user_id)

rule AccountApproval {
    is_adult = input.age >= 18
    allowed_country = input.country == "us" || input.country == "ca"
    eligible = is_adult && allowed_country

    emit SendVerificationEmail(input.user_id) when eligible && !input.email_verified
    emit BlockAccount(input.user_id) when !eligible

    out approved = eligible && input.email_verified
}

How it works

A Nodora ruleset goes through three stages:

  1. Compile. Source code is parsed, type-checked, compiled, and optimized into a compiled ruleset.
  2. Load. The resulting compiled ruleset is loaded into the evaluator.
  3. Evaluate. The evaluator executes a named rule against an input object, produces the declared outputs, and dispatches any emitted signals to their registered listeners.

The compiler and evaluator are decoupled. You can compile rules ahead of time and ship just the compiled artifact to any environment that can run the evaluator (Go binary, JS/WASM, etc.).

Where to next

On this page