Lemma Engine
A programming language that means business
Lemma is a declarative logic language for expressing business rules, contracts, and policies in a way that's both human-readable and machine-executable. Write rules once, audit them easily, and execute them reliably.
Why Lemma?
- Human-readable - Business logic that looks like the contracts and policies you already write
- Type-safe - Built-in support for money (usd, eur), mass (kilograms, pounds), length (meters, feet), time (hours, days), percentages, and dates
- Auditable - Every evaluation provides a complete operation trail showing how decisions were made
- Composable - Reference other documents and rules to build complex logic from simple pieces
- Multi-platform - Rust library, CLI tool, HTTP server, WebAssembly for browsers, and Model Context Protocol support
Quick Start
Add to your Cargo.toml:
[]
= "0.6"
Simple Example
use Engine;
let mut engine = new;
engine.add_lemma_code?;
let response = engine.evaluate?;
for result in response.results
// Output:
// bonus: 6000 USD
// total: 66000 USD
Business Rules with Conditionals
use ;
let mut engine = new;
engine.add_lemma_code?;
// Override facts at runtime
let facts = parse_facts?;
let response = engine.evaluate?;
JSON Integration
use ;
let mut engine = new;
engine.add_lemma_code?;
// Load facts from JSON
let json = r#"{"base_price": "150 USD", "discount": 0.2}"#;
let doc = engine.get_document.unwrap;
let facts_str = from_json?;
let facts = parse_facts?;
let response = engine.evaluate?;
Features
Type System
Built-in support for business-critical types:
- Money:
100 USD,50 EUR, automatic currency validation - Percentages:
15%,0.5%, works with unit arithmetic - Mass:
10 kilogram,5 pound, automatic conversions - Length:
100 meter,5 feet,10 mile - Time:
2 hour,30 minute,1 day - Dates:
2024-12-25,2024-12-25T14:30:00Z, date arithmetic - And more: Volume, temperature, pressure, power, energy, frequency, data sizes
Document Composition
engine.add_lemma_code?;
Audit Trail
Every evaluation returns complete operation records showing how each result was computed:
let response = engine.evaluate?;
for result in &response.results
Installation Options
As a Library
CLI Tool
Then run:
WebAssembly
HTTP Server
Documentation
- Language Guide: https://benrogmans.github.io/lemma/
- API Documentation: https://docs.rs/lemma-engine
- Examples: GitHub examples directory
- CLI Guide: CLI.md
Use Cases
- Employment contracts and compensation calculations
- Shipping and pricing policies
- Tax calculations
- Insurance premium calculations
- Discount and promotional rules
- Compliance and validation rules
- SLA and service level calculations
License
Apache 2.0
Contributing
Contributions welcome! See contributing.md