Roadmap
Nothing is released yet; 2.0.0-alpha.1 is in preparation, and what it adds is in the changelog.
The charter is PLAN.md; this page summarizes its phases. Each phase lands fixtures first, keeps every gate green, and records its outcome in the definition-of-done manifest (tests/dod-manifest.ts). Status as of 2026-09-23.
| Phase | What | Status |
|---|---|---|
| 0 | Gates: value-model probes as fixtures, structural-subtyping fuzzer | done |
| 1 | Modules: named, default, namespace imports, re-exports, TS-source packages, CommonJS rejections | done (node:process as a module still open) |
| 2 | Runtime ported from C to Milo; C residue under 100 lines | done |
| 3 | Shaped objects, whole-program field ordering, inline caches | done |
| 4 | Value words, mixed unions, narrowing | done |
| 5 | Mutable captures in heap cells, erased generics | done |
| 6 | Own garbage collector in Milo (conservative roots, precise heap, inline bump allocation); libgc dropped | done |
| 7 | 0.1 "TS CLI tools": argv, fs, validated JSON.parse, async, chad doctor | done (2.0.0-alpha.1 in preparation) |
Planned, not scheduled to a phase
These are rejected today with a specific code, so programs that need them fail at compile time instead of misbehaving:
- Prebuilt compiler binaries, and
--fallback=milojs. - Classes that extend
Erroror other built-in classes, and.stackon errors. .then()on promises, andnew Promisewith an executor that is not written inline.- Regular expressions (CS1213) and
Dateinstances (CS1215). - Destructured parameters with defaults (CS1217),
let x;without an initializer (CS1218), getters, setters and access modifiers. toPrecisionandtoExponential(CS1221).- Generics instantiated with arrays, maps or functions (CS1242), and monomorphization as a flag-gated optimization.
- Optional chains longer than one
?., andMap/Setkeyed by a union. - Garbage collector: evacuation, returning memory to the OS, a generational nursery.
- Unicode: strings are UTF-8 and exact for ASCII; operations that depend on UTF-16 code units are gated (CS1216) until that decision is made.
Never
Permanent non-goals: a JavaScript engine in the binary (eval, prototype mutation, adding or deleting properties, Proxy), custom type inference or a custom parser, self-hosting, npm compatibility as a goal (a package works if and only if its TypeScript source is in the subset), and CommonJS.
History
Branch v1 holds v1, a self-hosting compiler that resolved types during code generation and could not be stabilized. A second attempt went fully dynamic and lost scope. This is the third, built around two rules: TypeScript's own checker decides every type, and Node decides what every program must print. The post-mortems are in the plan.
Follow progress and file issues on GitHub.
Next: Quickstart, and try it on your own code.