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.
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.
Frameworks and apps
Runnable products, with a scope line on each card.
Solid 2.0 vs SolidLil
Official js-framework-benchmark keyed table. Solid 2.0 on the left, compiler-only SolidLil on the right.
solid-js Core
Archived 1.9 open-world Core row. Current published port is Solid 2.0 on the SolidLil lab.
solid-js Store
Archived 1.9 Store surface. Not the current Solid 2.0 client row.
Lastro
Parcel Market versus the accessibility-matched Astro control.
Motion
mix / wrap / stagger / spring. Live carousel and spring fixtures in the Motion lab. Full DOM package is still backlog.
Solid todolist
Archived JSX vs LSX todolist. −32% Brotli. Not the current integrated lab gate.
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.
gl-matrix
Complete ESM namespace and setMatrixArrayType.
murmurhash-js
MurmurHash 2 and 3. Reusable API, not an app-specialized kernel.
js-levenshtein
Full root. Eligible on size and throughput.
clamp + lerp
Both published roots compiled together.
@emotion/hash
Published root versus Vite and Closure ADVANCED.
robust-predicates
Large typed suite. The cut is closer to the 5–10% band.
Nano ID
Published browser entrypoint. Effectively tied.
mitt
Complete default-export surface. Currently a few Brotli bytes up.
clsx
Recursive class-name builder. Size gate is open on Brotli.
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.”
immer
produce path used by the app contract.
Preact 10
Selected render surface, not the full Preact package.
Redux Toolkit
Store core used by the contract. Not the full toolkit.
Zod 3
Schema parse surface in the app. Not the published Zod 4 port.
Acorn 8
Parser subset required by the contract app.
@motionone/easing
Full published easing root. Smaller than Vite and Closure; the isolated throughput gate is still just over 1.05×.
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.
yeargun.github.io/solidlil
Solid 2.0 client lab and the official keyed table (11,180 B → 3,862 B).
Open SolidLil Motionyeargun.github.io/motionlil
Full Motion 13 DOM runtime exports and 16 paired browser fixtures.
Open Motionlil MobXyeargun.github.io/mobxlil
MobX 7 public API, official tests, size vs Vite 8 Oxc.
Open MobXlil jQueryyeargun.github.io/jquerylil
jQuery 3.7.1 drop-in. Official min is still 1.12× smaller on Brotli.
Open jQuerylil markedyeargun.github.io/markedlil
marked 18.0.13 package with the 18.0.10-compatible parse API. 9,515 B vs parse-only official Oxc 10,092 B, not the full use() package.
yeargun.github.io/zodlil
Zod 4.4.3 classic-compatible API. Size claim withdrawn: the linked package exposes 192 ESM names versus the official entry's 240.
Open Zodlil posthog-jsyeargun.github.io/posthoglil
Capture kernel plus five tabbed lanes. Autocapture is 4,215 → 3,186 B and replay core is 4,258 → 3,465 B Brotli versus Oxc.
Open Posthoglil Monacoyeargun.github.io/monacolil
Submodule catalog and the paired editors.
Open Monacolil This siteIn-repo demos
Lastro, hashes, algorithms, Closure pairs — Solid keyed, Motion carousel.
Browse demosMore tables. Filterable corpus: library lab, benchmarks, explorer. Delivery architecture: Lilpack. Language: syntax and behavior.