Measured ports

Same work. Count the bytes.

These are libraries and apps we rewrote in LilScript to see what the compiler actually does. Numbers are independently measured gzip-9 and Brotli-11 bytes of the selected JavaScript, scored with the same stock zlib / official Brotli binaries. On the 15 currently comparable landing rows, the median result is 7.7% smaller under gzip and 7.5% smaller under Brotli. Zod is visible but excluded after its package surface audit invalidated the old core-only size row.

Mangling contract. On reusable-library rows, mangle: true means identifier mangling only. Oxc renames variables and private class fields; Terser property mangling is a separate option and is off here. Public ESM names and documented object keys must survive, and behavior gates run on the measured artifacts. Property mangling appears only on explicitly labeled closed-world app lanes or on LilScript-owned internals whose public ABI remains named. If Function.name, arity, or constructibility belongs to a library contract, the verifier must pin it too. See the Oxc mangling documentation and Terser API reference.

Monaco · VS Code’s editor

monaco-editor 0.56, JavaScript versus LilScript.

The JS page is npm monaco-editor. The Lil page is compiled from ports/monaco/entry.lil plus 992 catalog modules. Workers except TypeScript are LilScript; both pages still load Microsoft ts.worker so diagnostics match. The view is a functioning editor — create, type, undo, find, fold, hover, suggest — not a claim that every VS Code workbench feature is present.

npm ide.js 887,420 B
Lil ide.js 413,607 B
JS + workers, no tsc 1,416,410 B
Lil + workers, no tsc 415,045 B

Frameworks and apps

Runnable products, with a scope line on each card.

Complete and exact entrypoints

Published roots, same input domain.

Eligible rows beat npm/Vite and public-API Closure ADVANCED on the selected codec, and stay within 1.05× on the isolated runtime gate.

Selected surfaces

Not the whole package. Still a real rewrite.

These rows implement a declared subset. They are useful pressure tests. They are not “we replaced Preact.”

Published · not smaller

jQuery 3.7.1 is published. It is not smaller yet.

The public-library row is a pressure test: host-heavy, string keys, a plugin facade. Behavior lanes for core, deferred, data, events, selectors, ajax, and effects are in the repo. The current Brotli-oriented compiler output is larger than npm jquery.min.js. That is stated here so the other cards stay honest.

Parse API

marked 18.0.13 package, scored without the extension system.

The 18.0.13 package exposes the parse API, live option methods, GFM, and CommonMark HTML, with 660/660 against marked@18.0.10. This port has no use(). Official JavaScript is the parse-only 18.0.10 sources, then Oxc and Terser with identifier mangling enabled or disabled; property mangling is off. The published LilScript artifact is the compiler-selected ESM — not bundled, not post-minified, and still smaller on raw, gzip-9, and Brotli-11 than either minifier, while parsing the same corpus faster in Chromium.

Zod 4.4.3 · size audit open

The behavior result remains; the size win does not.

zod@4.4.3 rewritten in LilScript and published as @itslil/zod. The adapted official suite is 1,353/1,353, but the old 34,152 B Brotli figure measured only zod.core.js while the official lane bundled the full zod/v4 entry. Linking the actual package entry produces 62,763 B gzip and 52,583 B Brotli, before any claim about parity. That package exposes 192 ESM names versus 240 on the official entry, so no compression rate is published until the boundary matches.

Six scoped lanes · posthog-js 1.418.10

A capture kernel plus five independently measured packs.

UUID, flag utils, cookie identity, request routing, token and bucketed rate limits, queue batching, bot detection, and portable helpers — not the published PostHog IIFE. Official JavaScript is that kernel, then Vite 8 Oxc, Terser, and esbuild. The current Brotli-scored compiler artifact is larger than Oxc on this compiler. Autocapture utilities, replay core, surveys, error tracking, and OTLP now have separate public surfaces and tabbed comparison lanes. The two browser packs are 24.4% and 18.6% smaller than Oxc on Brotli; the lab reports every pack's wins and losses without folding them into the kernel result.

Open the pairs

Left is the original. Right is the compile.

These are the hosted comparisons. When this site is on GitHub Pages, they are the github.io URLs.

More tables. Filterable corpus: library lab, benchmarks, explorer. Delivery architecture: Lilpack. Language: syntax and behavior.