Repository navigation
·
1251 commits
to master
since this release
Immutable
release. Only release title and notes can be modified.
Lambda Script 0.3 (alpha)
Released: 1st October 2026
Lambda 0.3 alpha is the largest release so far: about 6,500 commits over the six months since 0.2 (March 2026):
- Lambda, the language, now has a normative specification, enforced type annotations, value semantics for mutable data, structured concurrency, and a new execution pipeline: a hand-written parser, an AST interpreter, and automatic tiering into the MIR JIT.
- Radiant grew from a layout engine into an interactive document and UI engine: events, selection, forms, rich-text editing, animation, page scripting, basic web browsing, and reactive UI written in Lambda.
- LambdaJS grew from an experimental transpiler into an ES2024 JavaScript engine that passes 40,261 Test262 tests and shares its runtime, DOM and event loop with Lambda.
Together, Lambda and Radiant are now one parser-to-pixel, end-to-end pipeline.
This is an alpha. Syntax and semantics changed substantially since 0.2 and may change again.
Lambda
Language
- Pipes and queries:
|>maps,|:filters,thatis a one-value proviso; for-expressions gaingroup by … intoand joins.
users |: ~.age >= 18 |> ~.name - Array operations: element-wise comparison (
[1, 2, 3] gt 1), mask and index-array indexing, thelastindex, and computed keys. - String patterns: delimited
\(…)patterns, usable wherever a type is.
type Email = \(w+ "@" w+ "." a{2,6}) - Error handlers:
expr ^ { … }handles a failure in place. - Path literals redesigned for files, URLs and system data.
Type system
- Enforced annotations: each is proven statically, rejected statically, or checked at run time.
- Typed arrays
T[],T[n],T[][]with unboxed storage. - New number model: saturating 53-bit
int, sized integers and floats (255u8), arbitrary-precisionintegeranddecimal. - Constrained types (
{age: int} that (age >= 18)), type operators in expressions, and distinctfn/pnfunction types.
Procedures and concurrency
- Mutable value semantics: assignment copies (copy-on-write underneath);
varparameters are the only write-through. - Structured concurrency: tasks with
start,wait,select, mailboxes and cancellation, withoutasync/await. - Document updates (preview):
put/delstatements and transactions withcommit/rollback. - Reactive UI:
view/edittemplates withstateandonhandlers.
Compiler and runtime
- Hand-written C parser replaces Tree-sitter.
- AST interpreter with automatic tiering into the MIR JIT, now the default. MIR Direct is the only back end;
--c2miris removed.
Packages and tooling
- Modules: a
lambda.*root, parent imports, and two-way imports with JavaScript. - New packages:
graph(Mermaid, Graphviz, D2, Structurizr),pdf(experimental),dom,editorandedit. - New inputs: SQLite, Structurizr/C4, TikZ and TSV.
lambda edit: rich-text editing for Markdown and HTML, drawing for SVG, with lossless saving.- Formal specifications for semantics and design, and a ten-chapter tutorial with checked examples.
Breaking changes since 0.2
- The pipe
|is now|>, and the old|>/|>>file-output operators are replaced byoutput(). - Filtering with
xs that porwhereis nowxs |: p. Oldthatcode still parses but means something different. - Error destructuring (
let a^err = …) is removed; useexpr ^ { … }.input()andparse()raise and must be handled with^. - Assignment copies;
letcontainers are immutable;varexists only insidepn. - Number literals: suffix
nnow meansintegerandmmeansdecimal; negative indexes return null (uselast). - Elements separate attributes from content with
,(was;); object literals are written<Point x: 1>. - A line that starts with
(,[,-or<after a complete statement needs a;before it. - String patterns are written
type D = \(d+)(wasstring D = \d+).
Radiant
Layout and Rendering
- Multi-column layout rewritten, with balancing, spanners and break control.
- Custom layout in Lambda, which now drives diagram layout (Mermaid, Graphviz, D2, Structurizr).
- Animation: a vsync frame clock, CSS
@keyframes, a first set of transitions,requestAnimationFrame, GIF and Lottie. - Own SVG renderer and font engine: FreeType is removed; WOFF, WOFF2 and colour glyphs are supported.
- Effects and content: blend modes, filters,
clip-path, 3D transforms, a Canvas 2D subset, and experimental PDF viewing.
Interaction and editing
- Unified event pipeline across JavaScript listeners and Lambda handlers, with IME.
- Selection, form controls and
contenteditable, with editing policy written in Lambda. - Basic web browsing in
lambda view: http(s) pages, navigation history, parallel loading, cache and cookies.
Lambda JS
Conformance
- Test262: 40,261 tests pass, none fail, at ES2024 scope (42,889 discovered; 2,628 skipped as out of scope). 0.2 had no Test262 run at all.
- Out of scope for now: ES2025+ additions,
intl402, Temporal, decorators and proper tail calls.
Engine
- Two tiers, automatic by default: a new AST interpreter runs code first and promotes hot functions to the MIR JIT.
- First-party parser for JavaScript and TypeScript, replacing Tree-sitter.
- TypeScript:
lambda ts file.tsruns TypeScript directly (annotations are stripped; there is no type checking). - One runtime with Lambda: JS values are Lambda values, with the same precise GC, typed-array storage and event loop. Lambda can import
.jsmodules and JavaScript can import.lsmodules. - Headless DOM scripting outside the browser:
lambda js app.js --document page.htmlgives a script the real DOM, CSS cascade and layout metrics. - Web APIs: events, observers, CSSOM,
fetch, XMLHttpRequest, storage, history, selection and clipboard. - JS libraries tested: lodash, ramda, rxjs, immer, marked, handlebars, acorn, ajv, zod and others.
Benchmarks
The latest run (Result50, 2026-09-30) covers 63 benchmarks against Node.js v22.13.0. Ratios are geometric means of each engine's time over Node's; below 1.0× is faster than Node.
| Engine | Workload time | End to end, default tier |
|---|---|---|
| Lambda, typed | 0.54× | 1.32× |
| Lambda, untyped | 1.05× | 1.41× |
| LambdaJS | 7.43× | 8.86× |
| QuickJS (reference) | 7.24× | 1.26× |
See the full report for per-benchmark results.