larvaedocs
GitHub

Roadmap

What is still ahead, published benchmarks, a 1.0 freeze, and four worm gaps

updated Aug 16, 20262 min read

Where larvae is going, so you can tell whether to adopt now or wait.

The old milestones on this page have shipped. larvae now formats (larvae fmt), lints (larvae lint), bundles (larvae bundle and [bundle]), minifies (generator = "dense" and [minify]), serves an editor (larvae lsp), gates CI through [check], reads and emits instance requires, overlays config per environment with [profile.<name>], and loads worms. For what works today, see configuration, rules, and the CLI reference.

What remains is short, and this page lists all of it.

Published benchmarks and the 1.0 freeze

The numbers on the performance page are reproducible with scripts/bench.sh, but they were measured on a development machine. Published benchmarks on fixed hardware are planned, so the quoted figures stop depending on whose laptop ran them.

Alongside them, a 1.0 release freezes semantics: what each rule does to a file stops changing except by a new option. Until then a minor release may tighten a rule's guards, which can change output bytes.

Worms, the parts that are not built

Worms ship today, in their Luau, wasm, and native forms. Four things about them do not.

The raw transform role

Text in and edits out, with none of the guarantees the rule role carries. Designed and not built. A worm today is a front-end, a set of rules, or both.

Requires emitted by a late rule

A rule emitting a require that was not in the source is only resolved if that worm runs "before". larvae does not schedule an extra resolution pass after a worm that runs late, so a rule generating requires should ask for "before" today. See using worms.

Tier two edits

Where a worm synthesizes structure rather than splicing bytes. Not built, so a worm today edits what is already there.

An api compatibility window

api in worm.toml is exact equality today, so a worm built against api = 1 is rejected by a host speaking api = 2. Whether a window is accepted instead is undecided.