Reference

Coverage matrix

Two different things live on this page, and it's worth not confusing them. First: how much of each targeted feature area works. Second: how the compiler scores against full external test suites — a much harsher, much lower number.

Targeted feature areas

These count a feature that works for its core, documented case, mirrored from the project's own status matrix (the repository tracks a stricter “zero-caveat” number per page too). They say “the paths this compiler targets work” — not “it runs all TypeScript.”

~99%TypeScript core language369 / 374 targeted features
~96%Web Platform APIs78 / 81 targeted features
~97%Node.js APIs146 / 150 targeted features

External conformance

Run unfiltered against the public suites, the numbers are low — and shown anyway, because hiding them would be dishonest. This is a typed subset compiler: most of Test262 uses eval as its own assertion mechanism, and Node's tests are dynamic, untyped JavaScript against the entire platform. Those files don't fail so much as fall outside what this project set out to compile.

19.1%Test2628,213 / 42,942 in-scope · 15.7% of the full corpus
1.6%Web Platform Tests31 / 1,966 runnable documents · 392 / 644 subtests where a document executed
62.4%TypeScript accept/reject7,021 / 11,247 cases agree with tsc
11.7%Node.js test/parallel303 / 2,586 runnable files pass

By compat flag

Every suite runs under both compatibility lanes. -compat=strict — The compiler's opinionated, safer-than-JS typed semantics — the default. Untyped-JS patterns it can't prove safe are rejected at compile time.

-compat=js — Best-effort vanilla-JS compatibility — a permissive superset of strict, for running untyped JavaScript as-is. Trades some of strict’s guarantees for reach.

Test262

The official ECMAScript conformance corpus, run unfiltered. Most of it is out of scope by design — eval-based assertions, Intl/Temporal, dynamic import — so the honest figure is the in-scope subset.

19.1%-compat=strict8,213 / 42,942 in-scope · 15.7% of the full corpus
25.4%-compat=js10,924 / 42,942 in-scope · 21.0% of the full corpus

Web Platform Tests

The browser platform’s own test suite, run headless through a testharness shim. It is dominated by DOM/rendering tests this compiler doesn’t target, so the runnable-document figure is low by design — shown for the JS/encoding/URL corners that do apply.

1.6%-compat=strict31 / 1,966 runnable documents · 392 / 644 subtests where a document executed
2.1%-compat=js42 / 1,966 runnable documents · 3,146 / 5,306 subtests where a document executed

TypeScript accept/reject

Agreement with tsc’s own accept/reject verdict over Microsoft’s compiler and conformance test cases — a measure of front-end fidelity, not runtime behavior.

62.4%-compat=strict7,021 / 11,247 cases agree with tsc
60.0%-compat=js6,751 / 11,247 cases agree with tsc

Node.js test/parallel

How much of Node’s own behavioral test suite runs verbatim after a mechanical CommonJS→typed-ESM transform — a floor on Node fidelity, not a coverage claim.

11.7%-compat=strict303 / 2,586 runnable files pass
24.0%-compat=js620 / 2,586 runnable files pass

Numbers are generated by the conformance tool (both lanes, full corpora) and sourced from conformance-platforms.json — never hand-edited, so they can't drift from the last run. Shown here for the primary platform; the conformance page tabs across every OS.

Exact match to JS Works, with documented differences

Language

AreaCoverage
Async / Promise100%
Classes / OOP100%
Array methods100%
Number / Math100%
Type primitives100%
Object & collections100%
Type system features100%
Modules100%
String methods97%
JSON100%

Web platform

AreaCoverage
Networking (fetch, WS, SSE)100%
Streams100%
Web Crypto89%
Workers / Concurrency100%
Binary data & Typed Arrays100%
URL100%
Timers100%

Node.js

AreaCoverage
HTTP Server100%
events (EventEmitter)100%
path100%
os100%
Process / CLI I/O100%
File System (fs)90%
Other core modules94%

Known sharp edges

  • Compiling to native doesn't make : number a machine integer — it stays an IEEE-754 double, exactly as in JS. For real integer semantics reach for a sized int8…uint64 type (or a JSDoc width) — a KlainMainLang extension that standard tsc doesn't recognize.
  • Concurrency is cooperative — one fiber at a time per thread, no preemption.
  • Nothing is dynamic — no Proxy, no runtime property add/delete.
  • Whole-program compile only — there's no separate compilation or link step.

The repository's status pages and generated conformance reports are the source of truth.