- Alpha
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, 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 | Runs TypeScript on Node 22.15+; passes 100 of 100 compared tests of tsx's own suite and 36 of 36 of Node's type-stripping tests | Only the entry's tsconfig is used; Windows untested |
ts-r-dev | Hot reload, Vite's import.meta.hot API, React Fast Refresh, dependency pre-bundling | No CSS preprocessors; some vite.config options and plugin APIs; HTTP/1.1 only |
ts-r-build | esbuild's CLI flags, ESM/CJS/IIFE, splitting, minify, source maps, --watch | No plugins, no CSS bundling, lowering down to ES2015 (not ES5) |
ts-r-check | tsc's codes and messages; 97.0% of conformance tests exact; 3 of 6 public bench projects match exactly | No "Did you mean" suggestions on regular expression errors (TS1369); some inference and narrowing; emits like tsc unless --noEmit |
ts-r-lint | 154 rules (51 type-aware) matching 15,495 of 15,517 of ESLint's own tests; ESLint flat config, oxlint and Biome configs | Type-aware rules only where ts-r-check matches your tsc; plugins other than typescript-eslint unsupported |
ts-r-lsp | Shared server per workspace; lint; our checker or your TypeScript as the type backend | Slower than TypeScript 7's LSP to first diagnostics; most projects fall back to your TypeScript for diagnostics |
Conformance
| Area | Compared against | Result | Source |
|---|---|---|---|
| Parser | every JavaScript and TypeScript file of the top 1,000 npm packages (39,101 files in 989 packages) | 989 of 989 packages with no false errors: the parser reports no grammar error that Node and tsc don't | ecosystem/STATUS.md, commit 865f781 |
| Print, then parse again | TypeScript's tests/cases | 17,741 files ok, 0 mismatches (1,471 skipped: syntax errors) | ts_r_codegen/AGENTS.md, commit 773fed9 |
| tsconfig loading | tsc 7.0.2 --showConfig and config diagnostics on the five public bench repos (114 tsconfig files) | 114 of 114 --showConfig outputs match; 114 of 114 with the same diagnostics | ts_r_config/AGENTS.md, commit b5938d0 |
| Module resolution | tsc 7.0.2 --traceResolution on the five public bench repos (114 configs) | 158,174 resolutions, 0 mismatches | ts_r_resolver/AGENTS.md, commit d5e3943 |
| JavaScript emit | tsc 7.0.2's emit baselines (below ES2022, outFile, AMD/System/UMD and syntax errors skipped) | 1,678 match, 50 differ | ts_r_transform/AGENTS.md, commit 628c8cc |
| Binder diagnostics | tsc 7.0.2 baselines for the binder's codes (12,783 variants) | 418 of 464 tests exact; 1,720 of 1,839 diagnostics found | ts_r_binder/AGENTS.md, commit 4224610 |
| Type checker | tsc 7.0.2 conformance baselines, 12,750 compared test variants | 97.0% exact (all diagnostics and chains); 186 variants with a diagnostic tsc does not report, 10 of them in tests where tsc reports nothing | ts_r_checker/AGENTS.md, commit 687b025 |
| Type checker | tsc 7.0.2 on six public projects: tRPC, date-fns, TypeORM, Playwright, RxJS and the React Compiler | 4 of 6 match exactly (tRPC, date-fns, TypeORM, Playwright); RxJS 0 extra and 5 missing of 21,908; React Compiler 71 extra, 0 missing of 156 | bench/README.md, commit 687b025 |
| Lint rules | every case of the published ESLint and typescript-eslint rule tests (154 rules, 51 type-aware) | 15,495 of 15,517 cases match (8,597 of 8,597 without types; 6,898 of 6,920 type-aware) | ts_r_lint/AGENTS.md, commit 087afc9 |
| Lint on a real project | ESLint on TypeORM without type information (ts-r-lint --no-type-check), every configured rule, 2026-10-16 | 2,174 of ESLint's 7,392 problems match, 2 only ts-r-lint; most of the 5,218 missed (4,928) come from jsdoc plugin rules ts-r-lint doesn't have | bench/README.md |
| Bundler | esbuild 0.28.2's end-to-end bundler tests | 854 of 881 compared cases pass (96.9%); 189 skipped | esbuild-oracle/README.md, commit 45ab2ad |
| Dev server | Vite 8.3.4's playground e2e specs, run in headless Chrome against both servers (tests that pass on Vite are compared) | 312 of 322 compared tests pass (96.9%); 77 skipped | dev-oracle/README.md, commit 61c9d42 |
| Runner | tsx 4.23.15's own test suite, run with ts-r-run in place of tsx | 100 of 100 compared cases pass (100%); 35 skipped | run-oracle/README.md, commit 30863e8 |
| Runner | Node 24.21.0's TypeScript (type stripping) tests | 36 of 36 compared cases pass (100%); 53 skipped | run-oracle/README.md, commit 23aedd7 |
| Editor features | tsc 7.0.2 --lsp on TypeScript's fourslash tests (hover, completion, definition, references, rename, signature help, highlights) | 1048 of 2543 compared tests pass (41.2%); 4677 of 9055 queries agree | lsp-oracle/README.md, commit f591d51 |
| Launcher | the standalone ts-r-<tool> binaries (ts-r <tool> args vs ts-r-<tool> args) | 37 of 37 passthrough cases and 13 of 13 launcher cases pass | cli-oracle/README.md, commit 8c14f29 |
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 for how each stage compares.
Run on 2026-10-26 at commit 865f781 over the top 1000 npm packages (662 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 | 989 | 0 | 0 | 11 | 100.0% |
| transform | 48 | 0 | 0 | 952 | 100.0% |
| bundle | 915 | 0 | 0 | 85 | 100.0% |
| check | 652 | 57 | 0 | 291 | 92.0% |
| tests | 2 | 2 | 0 | 996 | 50.0% |
| Stage | Items compared | Items failing |
|---|---|---|
| parse | 39101 | 0 |
| transform | 1156 | 0 |
| bundle | 1217 | 0 |
| check | 1460 | 121 |
| tests | 4 | 2 |
Bundle size versus esbuild (minified): 914 packages with both bundles: ts-r-build 98041.1 KiB total, esbuild 101020.8 KiB (-2.9%). Median ratio 0.993; 641 of 914 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 TS2536: Type '…' cannot be used to index type '…'. | 21 | 21 | ts_r_checker |
| 2 | check | extra TS2716: Type parameter '…' has a circular default. | 18 | 18 | ts_r_checker |
| 3 | check | extra TS2344: Type '…' does not satisfy the constraint '…'. | 13 | 26 | ts_r_checker |
| 4 | check | extra TS2739: Type '…' is missing the following properties from type '…': RuleOptions, MessageId… | 7 | 10 | ts_r_checker |
| 5 | check | extra TS2417: Class static side '…' incorrectly extends base class static side '…'. | 4 | 20 | ts_r_checker |
| 6 | check | extra TS2322: Type '…' is not assignable to type '…'. | 2 | 2 | ts_r_checker |
| 7 | check | extra TS2415: Class '…' incorrectly extends base class '…'. | 2 | 2 | ts_r_checker |
| 8 | tests | tsc → ts-r-check: errors tsc does not report (TS2661) | 2 | 2 | ts_r_checker |
| 9 | check | extra TS2749: '…' refers to a value, but is being used as a type here. Did you mean '…'? | 1 | 8 | ts_r_checker |
| 10 | check | extra TS2589: Type instantiation is excessively deep and possibly infinite. | 1 | 5 | ts_r_checker |
The full list of failing packages and a repro for each top cause are in 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. Alpha releases are on npm under the next dist-tag; see Getting started.