- 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+; output matches tsc 7 on 339 of 339 private-app files | 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 vite.config, no HTTPS, no --open |
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 | 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 | 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 | 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 |
| Print, then parse again | TypeScript's tests/cases | 18,079 files ok, 0 mismatches (1,133 skipped: syntax errors) | ts_r_codegen/AGENTS.md, commit f3c5476 |
| tsconfig loading | tsc --showConfig on private-app | 49 of 49 configs match | commit 856e43d |
| Module resolution | tsc --traceResolution, 24 private-app configs | 63,958 resolutions, 0 mismatches | 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 |
| 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, 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 |
| 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, 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, 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, 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 |
| 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 |
| 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, 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 for how each stage compares.
Run on 2026-10-14 at 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.
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.