The team behind Knip, the widely-used open-source tool for finding unused files, dependencies, and exports in JavaScript and TypeScript projects, has shipped version 6 — and the headline number is hard to ignore: 2 to 4 times faster across the board.
The key change is a complete swap of the TypeScript backend for oxc-parser, the Rust-based parser from the Oxc Project. Author Lars Kappert calls it the natural next step after years of incremental tuning.
Why the TypeScript backend hit a wall
Knip has always parsed each file only once, but the old TypeScript-based engine carried the overhead of wiring up an entire program and typechecker along with it. That setup was designed for IDEs and language servers — keeping symbols connected across a project — which is considerably more than what a single-pass static analyzer needs.
"The TypeScript backend made the setup as a whole harder and slower than it needed to be, especially to keep large monorepos in check," Kappert wrote in the v6 announcement.
The TypeScript team is also in the process of rewriting the compiler in Go for v7 (a project Microsoft previewed in March 2026). That rewrite would have eventually broken the LanguageService-based APIs that Knip's more niche features — like classMembers tracking — relied on. The move to oxc was as much about future-proofing as performance.
The numbers
The Knip team benchmarked v5.88.0 against v6.0.0 on real-world projects:
| Project | v5.88.0 | v6.0.0 | Speedup |
|---|---|---|---|
| Astro | 4.0s | 2.0s | 2.0x |
| TanStack Query | 3.8s | 1.7s | 2.2x |
| Rolldown | 3.7s | 1.7s | 2.2x |
| Sentry | 11.0s | 4.0s | 2.8x |
| TypeScript (microsoft/TypeScript) | 3.7s | 0.9s | 4.1x |
The Rust-based parser tears through the Microsoft TypeScript repo in under a second.
What else changed in v6
Beyond the core performance work, several plugins were updated to statically analyze configuration files directly rather than importing them — including ESLint (flat config), tsdown, and tsup. This removes the need to actually load transitive dependencies just to scan them, further improving speed and reducing memory pressure.
Support for TypeScript namespaces and modules improved too, via a new namespaceMembers issue type that was previously ignored in v5.
Breaking changes to be aware of
- Node.js v20.19.0+ required — v18 support is dropped
- classMembers issue type removed — no longer viable without TypeScript's JS-based LanguageService API
--include-libsand--isolate-workspacesflags removed — these are now the default (and only) behavior--experimental-tagsrenamed to--tags- Reporter function signatures changed:
issues.filesis now consistent with other issue shapes - JSON reporter now consistently uses arrays for all issue types
Upgrade path
npm install -D knip@latest
If your project relies on the classMembers feature, open an issue on GitHub — Kappert has signaled openness to finding a solution, possibly a dedicated companion tool.
The full migration guide and documentation are on the Knip website.