# Compatibility and status

> What ts-r matches today against tsc 7, esbuild and ESLint, and how the top 1,000 npm packages fare. Generated from ecosystem/STATUS.md and the crates' notes.

ts-r measures correctness against the tools it replaces: tsc 7.0.2 for parsing, resolution,
emit and type errors, esbuild 0.28.2 for bundling, and ESLint with typescript-eslint for lint.
This page is generated when the site is built. The ecosystem section comes from
[ecosystem/STATUS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/ecosystem/STATUS.md), and the conformance table from numbers
recorded in the crates' `AGENTS.md` files and design records (the build fails if a quoted
number disappears from its source, so the table can't silently go stale).

## Summary

| Tool | Works today | Main gaps |
| --- | --- | --- |
| [`ts-r-run`](https://ts-r.dev/docs/tools/ts-r-run/) | Runs TypeScript on Node 22.15+; output matches tsc 7 on 339 of 339 private-app files | Only the entry's tsconfig is used; Windows untested |
| [`ts-r-dev`](https://ts-r.dev/docs/tools/ts-r-dev/) | Hot reload, Vite's `import.meta.hot` API, React Fast Refresh, dependency pre-bundling | No `vite.config`, no HTTPS, no `--open` |
| [`ts-r-build`](https://ts-r.dev/docs/tools/ts-r-build/) | esbuild's CLI flags, ESM/CJS/IIFE, splitting, minify, source maps, `--watch` | No plugins, no CSS bundling, no lowering below ES2022 |
| [`ts-r-check`](https://ts-r.dev/docs/tools/ts-r-check/) | tsc's codes and messages; 66.1% of conformance tests exact; all 25 private-app projects match | JSX types, some inference; never writes output |
| [`ts-r-lint`](https://ts-r.dev/docs/tools/ts-r-lint/) | 103 rules matching ESLint's own tests; ESLint flat config, oxlint and Biome configs | No type-aware rules; plugins other than typescript-eslint unsupported |
| [`ts-r-lsp`](https://ts-r.dev/docs/tools/ts-r-lsp/) | Shared server per workspace; lint; our checker or your TypeScript as the type backend | 587 MB with every file open against a 500 MB target; most projects fall back to tsserver for diagnostics |

## Conformance

| Area | Compared against | Result | Source |
| --- | --- | --- | --- |
| Parser | private-app including node_modules: 12,711 files, 214.6 MB | 0 files with false errors | [ts_r_parser/AGENTS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/crates/ts_r_parser/AGENTS.md) |
| Print, then parse again | TypeScript's tests/cases | 18,079 files ok, 0 mismatches (1,133 skipped: syntax errors) | [ts_r_codegen/AGENTS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/crates/ts_r_codegen/AGENTS.md), commit [`f3c5476`](https://github.com/Webb-Ventures/typescript-rust/commit/f3c5476) |
| tsconfig loading | tsc --showConfig on private-app | 49 of 49 configs match | commit [`856e43d`](https://github.com/Webb-Ventures/typescript-rust/commit/856e43d) |
| Module resolution | tsc --traceResolution, 24 private-app configs | 63,958 resolutions, 0 mismatches | [ts_r_resolver/AGENTS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/crates/ts_r_resolver/AGENTS.md) |
| JavaScript emit | tsc 7.0.2 on private-app apps and packages (15 tsconfigs) | 339 of 339 files match | [ts_r_transform/AGENTS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/crates/ts_r_transform/AGENTS.md) |
| JavaScript emit | tsc 7.0.2's emit baselines (below ES2022, outFile, AMD/System/UMD and syntax errors skipped) | 1,672 match, 100 differ | [ts_r_transform/AGENTS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/crates/ts_r_transform/AGENTS.md), commit [`61da9b4`](https://github.com/Webb-Ventures/typescript-rust/commit/61da9b4) |
| Binder diagnostics | tsc 7.0.2 baselines for the binder's codes (12,783 variants) | 399 of 445 tests exact; 1,684 of 1,792 diagnostics found | [ts_r_binder/AGENTS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/crates/ts_r_binder/AGENTS.md) |
| Type checker | tsc 7.0.2 conformance baselines, 12,769 compared test variants | 66.1% exact (all diagnostics and chains); 1,698 variants with a diagnostic tsc does not report, 320 of them in tests where tsc reports nothing | [ts_r_checker/AGENTS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/crates/ts_r_checker/AGENTS.md), commit [`6b15792`](https://github.com/Webb-Ventures/typescript-rust/commit/6b15792) |
| Type checker | tsc 7.0.2 on all 25 private-app tsconfig projects | 25 of 25 projects match exactly; 0 missing, 0 extra | [ts_r_checker/AGENTS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/crates/ts_r_checker/AGENTS.md), commit [`ecb5f21`](https://github.com/Webb-Ventures/typescript-rust/commit/ecb5f21) |
| Editor parity check | tsc 6.0.3 on 24 private-app projects | 2 of 24 projects match (22 fall back to tsserver); 3,530 of 3,844 diagnostics same code and position | [ts_r_lsp/AGENTS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/crates/ts_r_lsp/AGENTS.md), commit [`59268bf`](https://github.com/Webb-Ventures/typescript-rust/commit/59268bf) |
| Lint rules | every case of the published ESLint and typescript-eslint rule tests (103 rules) | 8,597 of 8,597 cases match | [design/0006-lint.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/docs/design/0006-lint.md) |
| Lint on a real project | ESLint with every ts-r-lint rule on private-app (690 files) | 1,458 match, 0 missed, 0 extra | [design/0006-lint.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/docs/design/0006-lint.md) |
| Bundler | esbuild 0.28.2's end-to-end bundler tests | 651 of 746 compared cases pass (87.3%); 324 skipped | [esbuild-oracle/README.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/bench/esbuild-oracle/README.md), commit [`292b5bc`](https://github.com/Webb-Ventures/typescript-rust/commit/292b5bc) |

## Ecosystem: the top 1,000 npm packages

`cargo xtask ecosystem` downloads the most-downloaded npm packages and runs each stage that
applies: parse every file, transform TypeScript sources, bundle the package and run it, check
its `.d.ts` files against tsc 7, and run its own test suite with tsc, tsx, ts-node and esbuild
swapped for ts-r. See [ecosystem/README.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/ecosystem/README.md) for how each stage
compares.

Run on 2026-10-14 at commit [`cfbbe41`](https://github.com/Webb-Ventures/typescript-rust/commit/cfbbe41) over the top 1000 npm packages (546 s). Reference tools: esbuild 0.28.2, node v24.21.0, tsc 7.0.2.. Pass rate = pass / (pass + fail + error); skips have nothing to compare.

| Stage | Pass | Fail | Error | Skip | Pass rate |
| --- | ---: | ---: | ---: | ---: | ---: |
| parse | 988 | 1 | 0 | 11 | 99.9% |
| transform | 42 | 6 | 0 | 952 | 87.5% |
| bundle | 844 | 71 | 0 | 85 | 92.2% |
| check | 550 | 159 | 0 | 291 | 77.6% |
| tests | 0 | 4 | 0 | 996 | 0.0% |

| Stage | Items compared | Items failing |
| --- | ---: | ---: |
| parse | 39101 | 1 |
| transform | 1156 | 6 |
| bundle | 1217 | 77 |
| check | 8339 | 7540 |
| tests | 4 | 4 |

**Bundle size versus esbuild (minified):** 909 packages with both bundles: ts-r-build 102531.6 KiB total, esbuild 99466.0 KiB (+3.1%). Median ratio 1.048; 132 of 909 packages are the same size or smaller. Worst ratios:

Top 10 failure causes (all `extra` causes are diagnostics ts-r reports and tsc doesn't):

| # | Stage | Cause | Packages | Items | Owner |
| ---: | --- | --- | ---: | ---: | --- |
| 1 | check | extra TS2344: Type '…' does not satisfy the constraint '…'. | 124 | 2866 | `ts_r_checker` |
| 2 | check | extra TS2305: Module '…' has no exported member '…'. | 56 | 503 | `ts_r_checker` |
| 3 | bundle | minified: runtime error: SyntaxError: Unexpected string | 55 | 60 | `ts_r_bundler` |
| 4 | check | extra TS2694: Namespace '…' has no exported member '…'. | 33 | 3483 | `ts_r_checker` |
| 5 | check | extra TS2304: Cannot find name '…'. | 19 | 101 | `ts_r_checker` |
| 6 | check | extra TS2339: Property '…' does not exist on type '…'. | 10 | 89 | `ts_r_checker` |
| 7 | bundle | minified: runtime error: SyntaxError: Identifier '…' has already been declared | 10 | 11 | `ts_r_minify` |
| 8 | check | extra TS7006: Parameter '…' implicitly has an '…' type. | 6 | 6 | `ts_r_checker` |
| 9 | check | extra TS2300: Duplicate identifier '…'. | 5 | 32 | `ts_r_checker` |
| 10 | bundle | runtime error: Error: Cannot find module '…' | 5 | 5 | `ts_r_bundler` |

The full list of failing packages and a repro for each top cause are in [ecosystem/STATUS.md](https://github.com/Webb-Ventures/typescript-rust/blob/main/ecosystem/STATUS.md).

## What "works today" means

A feature is listed as working when it runs from source on a branch that passed its gates
(`cargo test`, `cargo clippy -D warnings`, `cargo xtask agents-check`) and its numbers are
recorded in the repo. Nothing is released yet; see [Getting started](https://ts-r.dev/docs/getting-started/).

Source: https://ts-r.dev/docs/status/
