← back

TOOLS

Small things that run in your browser. Mostly compilers and formal methods dragged out of the terminal and given a surface.

01

LDLf

Linear Dynamic Logic on finite traces, in the browser

Write a formula in Linear Dynamic Logic over finite traces and watch it become a deterministic finite automaton. Runs entirely client-side — the Lydia translator compiled to WebAssembly, no server round-trip, no install.

WebAssemblyAutomataFormal Methods|open →
02

LDLf modulo theories

Temporal logic over predicates, mintermized with Z3

LDLf where atoms are linear integer predicates instead of opaque letters. Z3 turns the predicate combinations into an alphabet — keeping the satisfiable ones with concrete witnesses, pruning the contradictions — and Lydia builds the automaton. With a minterm debugger and a concrete-trace simulator, all in the browser.

Z3SMTAutomataWebAssembly|open →
03

Dafny

The full Dafny verifier, in the browser

Not a port — Dafny 4.11 and Boogie, the same .NET assemblies the CLI runs, executing on the .NET runtime compiled to WebAssembly, with Boogie's z3 subprocess pipe rerouted into Z3 wasm. Write a program with pre/postconditions and loop invariants, and every proof obligation is discharged on your machine.

Dafny.NET wasmZ3Verification|open →
04

CEL verifier

Google's formal verifier for Common Expression Language, in the browser

The cel-java verifier — the Z3-backed framework Google shipped in August 2026 for proving policies correct — running client-side. Not a reimplementation: the same Java classes, on a JVM compiled to WebAssembly, with the JNI binding to Z3 replaced by a bridge generated from Z3's own API headers. Satisfiability, validity, equivalence, and policy invariants over every possible input.

CELZ3JVM on wasmVerification|open →
05

CSP# trace checker

Runtime verification for PAT's process language, in the browser

Write a model in CSP# — Hoare's CSP with shared variables, channels, and C#-style program blocks, as understood by the PAT model checker — then paste a trace and see whether the model can produce it. Not a model checker: it runs the language's operational semantics forward along the trace, following every state the nondeterminism allows, and shows the enabled events wherever it stops.

CSP#PATProcess algebraRuntime verification|open →