Skip to content
Nilay Kabariya

Entry No.067·Tested·Updated ·4 min read

bun check vs tsc: TypeScript type-check speed, tested

Bun 1.4.3 adds bun check, a built-in TypeScript type checker. I timed it against tsc 6 and tsc 7 on Zod and Hono, compared every error, and hit one trap.

Verdict

On Zod, bun check took 3.7 s against 13.7 s for tsc 7 and 58 s for tsc 6, and printed the same 31 errors as tsc 7, line for line. On Hono, 7 referenced projects, it took 3.8 s against 7.3 s for tsc 7 -b, with nothing built first. The trap: in a project whose package.json has a "check" script, bun check runs that script and never type-checks.

Tested on

Bun
1.4.3; re-run on 1.4.3 and 1.4.4 (Linux)
TypeScript
7.0.2 / 6.0.3
Projects
colinhacks/zod @ 680d19f, honojs/hono @ 588ec13
Machine
Windows 11 Pro, 4-thread laptop CPU

✓ Last re-run on GitHub Actions · see the run · all repros

Contents
  1. Does it report the same errors?01
  2. The trap: a “check” script in package.json02
  3. Project references need -b03
  4. How I timed it04

Bun 1.4.3 added bun check, a type checker built into Bun. It’s a port of TypeScript 7’s checker, reads your tsconfig.json, and, in Bun’s words, “reports the same errors as tsc, using all CPU cores.” Bun says it’s 3 to 6 times faster.

I tested both claims on two real open-source projects: Zod, which is heavy on types, and Hono, which is split into 7 TypeScript projects with project references. Each check ran three times; the numbers are the middle run.

Project tsc 6.0.3 tsc 7.0.2 bun check
Zod 58.3 s, 0 errors 13.7 s, 31 errors 3.7 s, 31 errors
Hono (7 projects) 36.5 s with -b 7.3 s with -b 3.8 s with -b
Type-check Zod (median of 3)lower is better · s
  1. tsc 6.0.358.3 s
  2. tsc 7.0.213.7 s
  3. bun check3.7 sbest

This laptop has 4 CPU threads, and bun check uses one per thread. On a machine with more cores, expect a bigger gap.

Does it report the same errors?

On Zod, yes. tsc 7 and bun check printed the same 31 errors, identical line for line, the same codes (14 × TS6133, 8 × TS6196 and nine others) in the same places.

It matches TypeScript 7, not 6. tsc 6.0.3 reported no errors on the same project and config. If you’re still on TypeScript 6, switching to bun check also means switching to TypeScript 7’s results, so expect new errors.

On Hono, bun check reported 4 errors, all in src/hono.test.ts. tsc 7 -b reported the same 4, plus 11 in runtime-tests/bun/index.test.tsx, starting with:

error TS7016: Could not find a declaration file for module 'hono/jsx/jsx-runtime'.

That file imports Hono’s own build output, which tsc -b hasn’t produced yet when it checks that project. bun check checks against the source without building anything first, so it didn’t hit that.

The trap: a “check” script in package.json

In the Hono folder, bun check didn’t type-check anything. It printed:

Found formatting issues in 469 files (2168ms, 4 threads). Run `vp check --fix` to fix them.
error: script "check" exited with code 1

Hono’s package.json has "check": "vp check", a formatting and lint command. Inside a project with a check script, bun check runs that script instead of Bun’s type checker. Flags went to the script too: bun check -b failed with error: Unexpected argument '-b', an error from vp, not from Bun.

Zod has no check script, so there bun check type-checked normally.

Run Bun’s checker from outside the project folder and point it at the project:

cd ..
bun check -b -p hono

To use bun check inside the project, rename the existing check script (for example to lint:check).

Project references need -b

Hono’s root tsconfig.json has "files": [] and lists the real projects under references. Plain tsc -p . checked no files at all and finished in about a second with no errors. tsc -b checks every referenced project. In bun check, -b does the same.

How I timed it

Windows 11 Pro on a laptop with 4 CPU threads, October 14, 2026. Bun 1.4.3 and TypeScript 7.0.2 and 6.0.3 from npm, installed locally. Zod (680d19f) and Hono (588ec13) were shallow clones with dependencies from bun install. Each command ran three times, and the table shows the middle time. For tsc -b, the build output was deleted before every run so each one started from scratch. Every message above is the real output.

Re-run on Linux, November 3

The same two commits on a 4-CPU GitHub Actions ubuntu-latest machine (Node 24.22.1), with Bun 1.4.3 and 1.4.4. Absolute times were lower than on my laptop, the ranking was the same:

Project tsc 6.0.3 tsc 7.0.2 bun check (1.4.3 / 1.4.4)
Zod 14.6 s 4.5 s, 31 errors 1.3 s / 1.2 s, 31 errors
Hono, -b 11.4 s 2.3 s 1.1 s / 0.7 s, Found 4 errors in 1 file, checked 511 files across 7 projects

On Zod, bun check printed the same 31 error lines as tsc 7 again. On Hono, run from the parent folder with -p hono, bun check reported the same 4 errors as before; tsc 7 -b reported 8 on Linux, not the 15 it reported on Windows, which I haven’t traced. The trap held on both versions: in a folder whose package.json has a check script, bun check ran the script and type-checked nothing. The script and the run are public.

— N.K., end of entry No.067

Useful? Pass it on:Post on XFollow @EmotionalMatter

Related entries

  1. No.019

    TypeScript 7 with ts-jest, ESLint, ts-node: 9 tools tested

    Plain TypeScript 7 broke ts-node, ts-jest, typescript-eslint, TypeDoc and ts-loader, and npm refused to install it at all without a flag. Microsoft's side-by-side setup ran all 9 tools with no errors while tsc stayed on 7.

    TESTED7 min
  2. No.011

    Bun vs Node.js 24 benchmark: startup, TypeScript and tests

    Bun started 1.7× faster, ran a TypeScript file 3× faster and finished the same test suite 5× faster. The tight number-crunching loop was close: Node won it on Bun 1.4.2, and on 1.4.3 it was a toss-up. The HTTP test hit a limit of this machine, not of either runtime.

    TESTED5 min
  3. No.051

    Bun "error: Cannot find module": every cause, tested

    Bun prints the same Cannot find module error for six different problems. Each one reproduced on Bun 1.4.2 on Windows and Linux, with the fix that worked.

    > error: Cannot find module '@mono/ui' from 'D:\nk-repro\bun-cnf\e-mono\apps\web\index.ts'

    FIXED9 minWindows
  4. No.092

    TypeScript 7.1 beta tested: ts-jest, ESLint, NestJS, Angular

    On TypeScript 7.1.0-beta, ts-jest, typescript-eslint, ts-node and TypeDoc failed exactly as on 7.0, and so did NestJS, Angular, vue-tsc, svelte-check and astro check. The beta does ship a compiler API, but at new entry points (typescript/sync and typescript/async) that no tool uses yet. The side-by-side setup with TypeScript 6 fixed every one I re-ran.

    TESTED4 min

Post card · Every Sunday

What broke this week.

One email on Sundays: the Node, TypeScript, Python and AI SDK releases that broke builds that week, each one reproduced, with a link to the fix that worked. Never shared, and you can leave any time.

— Nilay

or follow by RSSor on X

By subscribing you agree to the privacy note. One click to leave.

tip: paste the exact error text