Lispex is a small Lisp for decisions that should be easy to read again. A rule is ordinary text. Within documented limits, the same input produces the same observable answer, and the result can stay shaped like data instead of disappearing inside an application.
See the shape first
A Lispex program is built from values and parenthesized forms. In an evaluated form, the first name says what to do and the remaining expressions supply the inputs.
(+ 2 3)Result
5Nesting reads from the inside out. Below, define puts a name on a value, >=
answers a question, and if selects one of two data values.
(define total 62)
(if (>= total 50)
'(decision free-shipping)
'(decision standard-shipping))Result
(decision free-shipping)The leading quote in '(decision free-shipping) means “keep this list as
data.” Without it, Lispex would try to call a procedure named decision.
That small distinction, that forms can be executed or preserved as data, is one
of the useful ideas you will learn gradually.
What Lispex is good at
Lispex fits rules such as eligibility checks, refund windows, pricing boundaries, routing choices, and repeatable transformations. Its reference runtime relies on deterministic evaluation rules, exact arithmetic where possible, and stable diagnostics. These properties make a small rule easier to rerun and compare.
Lispex is intentionally not a general operating-system scripting environment. It does not hide network calls, clocks, random values, or package imports inside a decision. Your application supplies the input and decides what to do with the returned value.
Choose your entrance
| If you want to… | Go here |
|---|---|
| learn the language in six small steps | Learning Path |
| run code without installing anything | Playground |
| scan the everyday syntax on one page | Syntax at a Glance |
| install a local runtime | First Program |
| build and run a verified Native artifact | Run Verified Bytecode |
| look up an exact form or procedure | Syntax Reference or Procedure Index |
Exact Lispex Images, verified Native bytecode, and Lispex Vouch are real product features, but none is a prerequisite for learning the language. Images carry exact source. Bytecode gives you an explicit local route through a virtual machine. Lispex Vouch checks a recorded decision later. It authenticates who signed a rule, binds your own copy of the source and input, and can require one exact local decision. Learn the small language first. Those paths will make more sense afterward.
Running a rule you do not trust
The ordinary way of running Lispex does not count all of the work a running
rule can drive, nor does it count all of the memory that rule is charged for.
The products that offer a choice of routes are the same, and so is the
authoring evaluation offered by lispex mcp serve. Use all of them with rules
you trust.
For a rule you do not trust, the downloadable program offers lispex embed.
It provides a smaller restricted set of the language. It puts a limit on the
work and a limit on the memory, and both come out the same on every run. It
has no access to the host machine and no fallback to another way of running.
Those limits are kept inside the same process rather than inside an
operating-system process sandbox. A caller cancellation or a killed process
produces no decision and no portable core, the small movable record a completed
run leaves behind.
A useful promise
The manual distinguishes what the product does from what it does not claim. Rust is the reference runtime. Topaz is a separate language and its compiler, and Lispex uses it in two places. One is a Topaz virtual machine that runs prepared instructions, and the other is an AOT toolchain that compiles a rule ahead of time into a standalone program. LIL, a Lispex interpreter written in Lispex, and LIT, a Lispex interpreter written in Topaz, are verification backends with a limited scope. They are not silent fallbacks, and they are not proof that every implementation agrees everywhere. You can ignore that machinery during the course and return to Runtime and Backends when deployment or cross-checking matters.
Words this documentation reuses
A handful of words repeat across the manual, the guides, and the release history. You do not need any of them for the course.
| Word | What it means |
|---|---|
| evaluator | the program that runs the rule |
| tree | the built-in interpreter that reads your source directly |
| VM | a virtual machine, a program that runs prepared instructions instead of reading your source |
| AOT | ahead-of-time compilation, which turns a rule into a program before anyone runs it |
| canonical | written the same way every time, so the same input gives the same bytes |
| bounded | run under a fixed limit on how much work and memory it may use |
| meter | the counter that measures how much work a run used |
| route | one way of running a rule |
| route lock | a small file that records which route was chosen without recording where that product sits on the machine |
| portable core | the small record that binds the rule, the input, the limits, and the outcome of one run |
| receipt | a written record of what one run or one installation produced |
| court | one run of checks gathered into a single verdict |
| surface | a place where Lispex is offered, such as Native, npm, the WebAssembly build, or the Playground, while the surface of the language means the part of the language that is covered |
| Topaz | A separate language and its compiler. Lispex uses it as a Topaz virtual machine that runs prepared instructions and as an AOT toolchain that compiles a rule ahead of time into a standalone program |
| LIL | A Lispex interpreter written in Lispex |
| LIT | A Lispex interpreter written in Topaz |
| WASM | the WebAssembly build |
Ready? Open the Learning Path, or go straight to the First Program if you prefer to learn by running code.