Runtime + client LSX parity

Reactive UI runtime

SolidLil

The published port is Solid 2.0’s client, compiled as @itslil/solidjs. Official js-framework-benchmark keyed JS is 11,180 B Brotli versus 3,862 B for SolidLil. The sections below keep the older in-repo 1.9 runtime and LSX evidence.

Two independent gates

Runtime parity does not waive LSX parity

The reusable solid-js, solid-js/web, and solid-js/store browser entries are checked independently from LSX syntax lowering. Both live in this monorepo; both the public runtime gate and the 21/21 client LSX gate pass. Hydration and SSR remain outside this client-only claim. Compare them as demos: API vs SolidJS, LSX vs JSX, and the keyed app.

Runtime

Unchanged upstream tests

The pinned Solid test files resolve their public entries to SolidLil without source edits. Core, Web, and Store behavior all remain in scope.

LSX

Explicit feature ledger

JSX-shaped Lilscript UI syntax is credited only where lowering and differential runtime evidence both exist.

Fairness

Brotli before victory labels

Every exact surface shows official and SolidLil Brotli-11 bytes first. A behavior pass can still be an optimization loss.

Archived served-app result

Historical todolist snapshot

The table counts the full served todolist application in the checked sibling-worktree snapshot. It stays visible as historical evidence but cannot satisfy the new integrated parity gate.

Artifact Brotli-11 · primary gzip-9 Raw
Solid todolist 5,479 B 6,077 B 15,456 B
SolidLil LSX todolist 3,722 B 4,226 B 10,590 B

The archived SolidLil LSX app is 32.1% smaller Brotli, 30.5% smaller gzip, and 31.5% smaller raw. This is an application result within the old implemented slice, not current full Solid or LSX compatibility.

Behavior evidence

Parity includes teardown

The candidate passes 469/469 unchanged upstream tests across 26 files. A second 112-case Lilscript corpus passes maximum and disabled optimization on the JavaScript target: 224 compiler/runtime executions. C/native are excluded because they do not yet implement the JavaScript exception and Promise semantics required by Solid.

Lifecycle and memory

The deterministic gate covers idempotent unmount, stale disposers after slot reuse, keyed/indexed row cleanup, and resources resolving after disposal. After warmup, SolidLil holds a stable eight-owner / sixteen-effect high-water; every slot is returned and the pending queue is empty.

Included today

Verified browser runtime

  • Exact Core, Web, and Store export inventories
  • Ownership, errors, resources, transitions, Suspense, scheduling, and context
  • DOM insertion, events, control flow, portals, teardown, and store proxies
  • Public-safe open-world ESM and export-mangled closed-world runtime builds

Explicit exclusions

Server-coupled systems

  • SSR templates, streaming, serialization, and server resources
  • True hydration markers, event replay, and mismatch recovery
  • Exhaustive type-level and ecosystem-package compatibility
  • Claims beyond the pinned browser runtime and declared 21-family client LSX contract