Read Lisp
Parse located forms, persistent literals, modules, macros, and explicit host boundaries.
Emacs-first · standard ECMAScript
A functional Lisp with persistent values, a compiler written in itself, and direct access to the modern JavaScript ecosystem.
Plain Emacs builds the seed. The seed builds the compiler written in Eliscript. Both lower the same checked program through explicit IR into readable, source-mapped ESM.
Parse located forms, persistent literals, modules, macros, and explicit host boundaries.
Expand deterministically, resolve lexical identities, validate ownership, and reject invalid control flow.
Both generations produce the same versioned representation, diagnostics, and Source Map locations.
Generated modules use ordinary JavaScript imports and execute under Bun, Node, browsers, and compatible tools.
Switch between language mechanisms. The right pane describes the behavior the compiler and runtime preserve across both hosts.
(defun sum-to (n total)
(if (= n 0)
total
(recur (1- n) (+ total n))))
tail position verified
arguments evaluated once, left to right
function frame reused as a loop
constant JavaScript stack
Immutable data, open abstractions, deterministic tooling, and explicit host access form one coherent system. Frameworks remain consumers, never compiler architecture.
Linked Lists, 32-way Vectors, HAMT Maps and Sets, Queues, AVL-sorted collections, Records, metadata, and value hashing.
Owner-token Vector, Map, and Set builders reduce allocation while the compiler rejects lifecycle escape and reuse.
Collection protocols, transducers, lazy sequences, multimethods, and external type extensions compose without hidden framework rules.
Reader, expansion, analysis, IR, emission, project planning, formatting, and evaluation converge across seed and self-hosted builds.
A major mode, Flymake diagnostics, persistent REPL, project watch, and a resilient worker return JavaScript performance to Emacs workflows.
Standard ESM, packages, promises, native containers, browser capabilities, and host calls are explicit and directly interoperable.
All 42 implementation units, 35 mandatory verification criteria, and 173 stabilization units are complete in the retained core evidence. Future work is tracked without retroactively inflating that result; general automatic tail-call optimization begins as a Draft and Pending specification.