Skip to Content

TypeScript-Go toolchain

ttsc

Build with TypeScript-Go. Run scripts only after they type-check. Report lint rules, unmet requirements, and plugin findings in the one diagnostic stream your CI already gates on.

10x

faster type checks

TypeScript-Go checks natively, in parallel. JavaScript tsc does neither.

800x

faster lint loop

Rules reuse the AST and types the compiler already built. ESLint parses it all again.

100%

requirement coverage

Every configured requirement is acknowledged by name, or the build stops. Counted per obligation, never pooled.

90%

fewer agent tokens

Agents read one compiler-resolved graph over MCP instead of crawling source files.

compiler path
1
ttsc

build / check / watch

2
ttsx

checked script runner

3
@ttsc/lint

rules as compiler diagnostics

4
@ttsc/evidence

requirements as compiler diagnostics

5
@ttsc/graph

code graph for coding agents, over MCP

6
plugins

AST + Checker before emit

src/index.ts:3:7 - error TS2322

Type errors and lint rules land in the same diagnostic stream.

[Diagnostics]

Type errors and lint errors should look like one failure.

ttsc can print rule violations as TS diagnostics. Local runs, CI, and the editor all point at the same file, line, and rule.

type errors

lint violations

format fixes

editor underlines

$ npx ttsc --noEmit
src/index.ts:3:7 - error TS2322: Type 'number' is not assignable to type 'string'.
src/index.ts:2:5 - error TS17397: [prefer-const] Use const instead of let.
src/index.ts:1:1 - error TS11966: [no-var] Unexpected var, use let or const instead.
1 var x: number = 3; ~~~~~~~~~~~~~~~~~~
2 let y: number = 4; ~~~~~~~~~~~~~
3 const z: string = 5; ~
4
5 console.log(x + y + z);
Found 3 errors in the same file.

[Requirement coverage]

Your spec, as a compile error no agent can skip.

@ttsc/evidence fails the build once per obligation, because one reference never covers another. @evidence <target> <reason> closes one, by naming a unit of the spec and why this declaration answers for it.

An AI coding agent has to clear those errors to finish. Coverage reaches 100% on its own, as the residue of the ones it closed.

CouponStackingNotice.tsx
/**
* @evidence docs/discount.md#coupon-stacking <reason...>
* @evidence POST:/orders/{orderId}/coupons <reason...>
* @evidence {@link hooks.useCouponStacking} <reason...>
*/
export function CouponStackingNotice(props: IProps)
$ npx ttsc
error TS16411: [evidence/graph] Missing acknowledgement for
'docs/discount.md#coupon-stacking'
error TS16411: [evidence/graph] Missing acknowledgement for
'POST:/orders/{orderId}/coupons'
error TS16411: [evidence/graph] Missing acknowledgement for
'useCouponStacking'
Found 3 errors.

codex gpt-5.6-luna, four subjects. Thirteen edges and token spend: full benchmark.

[Coding agents]

Your agent should ask the compiler, not grep.

@ttsc/graph hands a coding agent a checker-resolved graph of your project, over MCP. On the agent-cost benchmark, Claude agents answer reading zero files, cutting tokens by roughly 90%.

.mcp.json
{
"mcpServers": {
"ttsc-graph": {
"command": "npx",
"args": ["-y", "@ttsc/graph"]
}
}
}
The whole setup. It never writes into CLAUDE.md or AGENTS.md.

GPT-5.6 Sol, shared onboarding question. Every model and repository: full benchmark.

[Playground]

Try the compiler path in the browser.

The playground boots the WebAssembly build of ttsc in a worker. Your source stays in the tab while you test diagnostics, transforms, and emitted output.

01edit TypeScript
02run ttsc.wasm
03inspect diagnostics
04compare output

globalThis.ttsc.build()

Same engine shape as the CLI, packaged for in-tab demos and plugin playgrounds.

[Sponsors]

Built with help from people who keep the work moving.

Sponsor support funds the quiet work behind ttsc: TypeScript-Go upgrades, platform binaries, plugin compatibility, documentation, and the playground.

Sponsor ttsc

Thank you for your support

ttsc sponsors
Last updated on