marked 18.0.10 · LilScript port · @itslil/marked

Markdown,
compiled.

This is not marked. It is the marked@18.0.10 parse pathparse, parseInline, setOptions — rewritten in LilScript. No use(), Hooks, or Tokenizer subclassing: LilScript cannot override methods, and it is not trying to become JavaScript. Every number on this page compares that same official parse path, then Oxc and Terser, mangling on and off. The npm file is the Brotli-scored compile. gzip and raw each have their own compile.

npm install @itslil/marked
Bytes over the wire, Brotli-11, against the official parse path minified by Oxc smaller

Brotli-11 you ship, vs Oxc
gzip-9, gzip-scored compile vs Oxc
raw, raw-scored compile vs Oxc
spec cases with identical HTML

Official rows are one parse-path file, then Oxc or Terser, measured three ways. LilScript searches a different artifact for each cost_model, so the gzip and raw numbers come from those compiles — not from compressing the Brotli npm file. Brotli is still the headline. The published official marked package is not a lane. Speed is time spent parsing in Chromium. HTML is checked byte-for-byte against that same official parse path before any number is reported.

gfm commonmark tables task lists fences autolinks parse parseInline setOptions

Measured in Chromium

Playwright,
not inferred.

HTML must match the official parse path of marked@18.0.10. The document suite is the GFM+CommonMark corpus repeated 32 times. The loop suite parses all 660 cases forty times. Ratio is lane / official parse path (lower is faster).

Lane 32× document 660-case ×40 document speed vs official parse path

The compiled runtime, in the browser

Live
markdown.

Left is the editor. Right is HTML from @itslil/marked or the official marked@18.0.10 parse path — the same Lexer/Parser/Renderer cut used for size. Marked does not sanitize HTML. Do not paste untrusted markdown.

The receipts

Raw, gzip,
and Brotli.

Official 18.0.10 Lexer/Parser/Tokenizer/Renderer, then Oxc and Terser with mangling on and off. LilScript is not post-minified. Each codec below uses the LilScript compile scored for that codec (cost_model = raw | gzip | brotli). The npm file is the Brotli compile. Closed LilScript is Brotli with extern_fields = false.

Brotli-11

The wire number. LilScript row is cost_model = brotli, the npm file.

Lane Brotli-11 vs Oxc

gzip-9

LilScript row is a separate compile: cost_model = gzip.

Lane gzip-9 vs Oxc

Raw

LilScript row is a separate compile: cost_model = raw.

Lane Raw vs Oxc

All three, matched compiles

Official rows are one file measured three ways. The LilScript library row takes raw from the raw compile, gzip from the gzip compile, and Brotli from the Brotli compile.

Lane Raw gzip-9 Brotli-11 Brotli vs Oxc

Why this surface. LilScript cannot override methods, so this port has no use() / Hooks / walkTokens — and there is no plan to grow the language into JavaScript to get them. Comparing against published marked.esm.js would put the extension system on one side only. The fair fight is the 18.0.10 parse path, then the same Oxc and Terser work the JS ecosystem actually ships. Closed LilScript is the other honest comparison: no JavaScript options object, so those property names mangle.

README ↗

Zero runtime dependencies

Install the
current port.

npm install @itslil/marked