JavaScript toolkit. Implementation is Common Lisp.
Clun runs TypeScript. Clun installs npm packages. Clun runs tests. Clun serves HTTP. Clun builds bundles.
Commands and APIs follow Bun shape.
The Clun implementation is not Node, V8, libuv, Rust, Zig, or C.
JavaScript is only what you run.
The capability matrix shows Yes for every public row versus Bun, Node.js, and Deno
(evidence-backed Yes / Partial / No). The matrix notes where Clun exceeds Bun.
The installer verifies SHA-256. The installer installs to ~/.local/bin/clun.
Use clun --update to update. After install, man clun matches
live CLI help. The default install is the verified release boundary (now v0.3.0).
Optional: INSTALL_VERSION, INSTALL_DIR,
ADD_PATH=0 / ADD_PATH=1.
Implementation
Common Lisp only
Capability matrix
30 Yes · 0 Partial · 0 No
test262 pass list
26,018
Current test262 rate
92.38% current / 90% target met
Full run: 40,654 total = 26,018 pass / 2,145 fail / 12,491 skip / 0 crash.
Eligible: 28,163 / target: 25,347 pass / remaining lift: 0.
Pass-list gain: +967 from m5 / +3,375 from Phase 25b entry.
Focused m6 slice: 509 total / 407 pass / 102 fail / 0 skip / 0 timeout / 0 crash.
All 407 owned rows pass; controls: 7 m11 / 95 Phase 37; m6 residual: 0. Remaining ownership:
1,767 Phase-25b / 378 Phase-37 gaps. Incidental Promise.prototype.finally passes:
species-constructor.js, subclass-reject-count.js, and
subclass-resolve-count.js. Phase 32's supporting Proxy infrastructure adds 13
newly frozen passes without claiming blanket Proxy compatibility. Phase 37 milestone 1 adds
173 more frozen passes without claiming complete modern ECMAScript parity.
Ledger digest: ECC1719FA1FA8A61.
Off/eager ledgers are byte-identical; eager compiled 1,030,545 forms / classified 56,018
as ineligible / fell back 0 times / executed 0 interpreter fallbacks.
Parse gate: 23,713 total / 17,699 pass / 976 fail / 5,038 skip / 0 crash; all 17,512
frozen passes hold.
Current full Common Lisp suite: 19,848 assertions / 0 fail / 0 skip.
License: MIT.
What Clun is
Clun is one binary. The CLI and APIs follow Bun shape.
The implementation is pure Common Lisp on SBCL.
Clun is not a bridge to another engine.
Runtime & language
Execute .js, .mjs, .cjs, TypeScript, JSX, and TSX
TypeScript with erasable strip and structural typecheck (clun tsc). Bun has no built-in typecheck.
Node-compatible builtins surface (buffer, fs, path, crypto, child_process, and the rest of the pure-CL matrix)
Web APIs: fetch, URL, streams, AbortController, cookies, and related surfaces
Packages (npm-shaped)
clun install / add / remove / publish against the public npm registry
Bun-compatible install paths over pure-CL TLS with SRI-verified tarballs
Workspaces, monorepo filters, and topological concurrent scripts
Test, build, reload
Jest-compatible clun test (matchers, snapshots, async, concurrent files)
Production bundler: ESM/CJS/IIFE, code splitting, minification, loaders
--hot state-preserving reload; frontend dev server with HMR
Built-in clun fmt and clun lint. Bun has no built-in formatter or linter.
Single-file executables with optional signing
HTTP, data, secrets
Clun.serve HTTP/1.1. Streaming request and response bodies; WebSocket + Pub/Sub; no HTTP/2 server
await Clun.write("out.txt", "hello");
const text = await Clun.file("out.txt").text();
Capability matrix
Same public toolkit matrix as Bun 1.3.14 — Clun last.
30 full · 0 partial · 0 none.
A green check means that runtime has the capability (evidence-backed Yes / Partial / No).
Only Clun’s column marks where Clun exceeds the others.
Common Lisp is a mature, industrial language: interactive by default, with a real condition system,
macros that rewrite the language itself, and decades of production use.
SBCL turns that into a high-performance native image.
Clun uses that substrate for the whole product — engine, package manager, TLS, servers — so the interesting machinery is readable Lisp, not a stack of foreign runtimes.
One language, full stack
Lexer, parser, object model, modules, async, HTTP, and the package manager are Common Lisp.
No C, Rust, Zig, or JavaScript appears in Clun’s own implementation path.
make purity fails closed if foreign-library shortcuts creep in.
You still bring JS ecosystems
Your application code is JavaScript and TypeScript. Your dependencies come from npm.
Loaders and plugins follow Bun’s plugin shape; native libraries you choose can load through a narrow host boundary.
Clun stays pure Lisp; your project can still use the ecosystem you already know.
Auditable by construction
Dependencies for Clun itself are vendored pure-Lisp libraries, pinned in-tree.
HTTPS for installs and clients uses Clun’s pure-CL TLS stack; CI runs make test-tls.
The capability matrix is evidence with receipts, not a brochure.
Documents
Operator SOP and formal release memo (NASA layout).
Same links as the repository README. Attach both PDFs to the GitHub Release when the version ships.