Why ttsc
If you already have a TypeScript project, you probably already have a build that works. So: why add another tool?
Three reasons.
1. Lint is a compile error.
If you’ve ever shipped code where the type-check passed but ESLint failed in CI two minutes later — @ttsc/lint is the fix. It runs inside the compiler, on the same AST, and reports violations as error TSxxxxx.
src/index.ts:1:1 - error TS11966: [no-var] Unexpected var, use let or const instead.
1 var x: number = 3;
~~~~~~~~~~~~~~~~~~Your CI already runs ttsc. Now it gates lint too. No additional script, no separate step.
Same story for format: the format-class rules in @ttsc/lint cover Prettier’s territory (semis, quotes, trailing commas, a Wadler-style print-width reflow). ttsc fix writes corrections back. See Format.
2. ttsx runs TypeScript with a real type-check.
tsx and ts-node are transpile-only. They’ll happily run code that doesn’t compile. ttsx won’t:
npx ttsx src/index.tsIt type-checks the project, applies every plugin you’ve configured, and only then executes. Type error → execution stops. Same plugins as the build. Same diagnostics as your editor.
3. The plugins your project actually wants.
tsc doesn’t ship a plugin model. ttypescript and ts-patch are patches over the official compiler — they have to chase every TypeScript release. ttsc is its own compiler, built on @typescript/native-preview, with a plugin host that doesn’t depend on patching anything.
In practice that means typia (runtime validators generated from your types) and the rest of the ecosystem run as part of the build, not as a post-build hop:
- One pass instead of
tsc && transform && lint. - Diagnostics from plugins look exactly like type errors.
- Watch mode just works.
When ttsc is not for you
Honest list:
- You ship a library targeting many TS versions.
ttscfollows@typescript/native-preview— the TypeScript-Go preview track, not legacy 5.x. If you must compile under TS 4.x in CI, stick withtscuntil TypeScript-Go is your minimum. - You don’t want plugins. Then
tscandtsxalready do the job. - You have a custom transformer that uses TypeScript 5.x compiler internals. Plugins for
ttscare Go programs that read the TypeScript-Go AST. Porting may be straightforward, but it’s a port. Start with Plugin Development if you need to.
Ready?
→ Setup