Eliscript is an Emacs Lisp-flavored language that compiles to modern JavaScript. The seed compiler runs in plain Emacs, emits standard ECMAScript modules, and bootstraps a compiler written in Eliscript itself.
Documentation · Core documentation · Getting started · Language reference · Library API · Playground · Roadmap · Acceptance evidence · Specifications
Building from source needs Emacs 29 or newer and Bun 1.4 or newer. The compiled compiler ships in the release tarball, so a consumer needs only Node 24 or Bun; the package is prepared and rehearsed, and the first publication is pending.
bun install --frozen-lockfile
./bin/eliscript --output dist/basic.mjs examples/basic/main.eli
bun run dist/basic.mjsA whole project compiles as one graph, with --source-map for an external
Source Map v3:
./bin/eliscript-build --root . --out-dir dist/project \
examples/stdlib-cli/main.eli
bun run dist/project/examples/stdlib-cli/main.mjsThe daily commands are ./bin/eliscript-check for type and protocol checks,
./bin/eliscript-format for canonical formatting, ./bin/eliscript-eval for
evaluation, ./bin/eliscript-watch for rebuilds, and ./bin/eliscript-org for
Org sources. Each has a documented page in the
documentation.
| Area | State |
|---|---|
| Compiler | Emacs Lisp seed, reproducible self-hosted compiler, deterministic formatter, versioned canonical IR, Source Maps that name .eli files |
| Language | Tail calls, macros, modules, protocols, records, deftype/reify, case/condp, multi-arity named, anonymous, async, and portable functions |
| Data | Persistent List, Vector, Map, Set, and Queue with value equality; transients; lazy sequences; transducers |
| Runtime | Host-free runtime semantics, frozen regular expressions, a long-lived Emacs-to-JavaScript worker |
| Browser | An in-memory multi-file compile host, a module worker, and a compiler bundled for the browser — the playground compiles and runs Eliscript in the page |
| Editor | eliscript-mode and an evaluation REPL |
| Applications | The proving-ground site and the packaged Action built from it, plus React, Org, and Vite probes as replaceable application evidence |
The retained core acceptance audit records 35 of 35 mandatory criteria
passing, 0 incomplete, 0 failed, with all five evidence groups complete and no
blocking defects: acceptance/report.md. Implementation
units through M12: Reliability, Security, and Performance are complete, and
core stabilization and the retained audit are done. Progress is reported from
acceptance units rather than from elapsed time, in
Evidence-derived maturity progress.
Known gaps, stated rather than implied:
- The Linux x64 compatibility cells are optional in the contract and carry no retained reports; macOS arm64 is the required acceptance platform.
- The proving-ground specifications are marked
In progress: the application is exercised by its tests and published, and its own acceptance set is not complete. - Publication is prepared and not performed: no tag, no registry release, and no Marketplace listing exists yet.
The published surface and the compatibility it must keep are recorded as
machine-checked registries: contracts/public-surface.json
(0044),
contracts/compatibility-matrix.json
(0045), and the retained
baseline in
contracts/compatibility-baseline.json
(0046).
| Path | Purpose |
|---|---|
bin/ |
Command-line entry points |
compiler/ |
Emacs Lisp seed compiler |
bootstrap/ |
Compiler implementation written in Eliscript |
runtime/ |
Value, protocol, collection, and worker runtime |
stdlib/ |
Portable Eliscript standard library |
platform/ |
Host capability packages for Node, Bun, and the browser |
browser/ |
In-memory compile host and its module worker |
editor/ |
Emacs major mode and editor integration |
examples/ |
Language, project, browser, and application probes |
docs/ |
Documentation source and the published site |
specs/ |
Numbered design contracts and the specification catalog |
contracts/ |
Public surface, compatibility, and baseline registries |
acceptance/ |
Retained audits, platform records, and the final artifact |
tests/ |
ERT, Bun, fixtures, and conformance evidence |
benchmarks/ |
Reviewed performance evidence and host fingerprints |
tools/ |
Build, verification, and integration tooling |
make byte-compile # Emacs Lisp with warnings as errors
make test-core # contracts and the framework-neutral suite
make test-applications # maintained application consumers
make check-browsers # three engines against the generated sitebun run test runs both test partitions. Generated output under dist/ is
never committed; contract checks compare it against its sources instead.
Contributing describes the workflow, and
docs/README.md is the documentation hub.
GPL-3.0-or-later. The compiler and standard library ship as source alongside the generated output they produce, which is the preferred form for modification.