vite-plugin-tsgo-checker
v0.1.0
Published
Vite plugin that runs TypeScript type checking using the native Go TypeScript compiler (tsgo) in a separate thread.
Maintainers
Readme
vite-plugin-tsgo-checker
A Vite plugin that runs TypeScript type checking using the native Go TypeScript compiler (@typescript/native-preview / tsgo) in a separate worker thread.
What is
tsgo? In March 2025, Microsoft announced a native Go port of the TypeScript compiler that is ~10x faster than the classictsc. This plugin integrates that compiler into your Vite dev server and build pipeline.
Features
- ⚡ 10x faster type checking using the TypeScript native Go compiler
- 🔀 Non-blocking — runs in a separate worker thread, keeping your dev server fast
- 🖥️ Terminal output — type errors shown in the terminal with formatting
- 🌐 Browser overlay — errors displayed in a styled overlay in the browser during development
- 🔄 Watch mode — automatically re-checks on file changes
- 🏗️ Build mode support — fails the build if there are type errors
Installation
# npm
npm install -D vite-plugin-tsgo-checker @typescript/native-preview
# pnpm
pnpm add -D vite-plugin-tsgo-checker @typescript/native-preview
# yarn
yarn add -D vite-plugin-tsgo-checker @typescript/native-previewUsage
// vite.config.ts
import { defineConfig } from 'vite'
import tsgoChecker from 'vite-plugin-tsgo-checker'
export default defineConfig({
plugins: [tsgoChecker()],
})Options
interface TsgoCheckerOptions {
/**
* Path to tsconfig.json file, relative to the root
* @default 'tsconfig.json' (auto-discovered by tsgo)
*/
tsconfigPath?: string
/**
* Root directory for the type checker
* @default config.root (Vite root)
*/
root?: string
/**
* Show overlay on the browser when there are errors in dev mode.
* - Set to `true` to enable (default)
* - Set to `false` to disable
* @default true
*/
overlay?: boolean
/**
* Show errors in the terminal
* @default true
*/
terminal?: boolean
/**
* Enable type checking in build mode (`vite build`)
* @default true
*/
enableBuild?: boolean
}Examples
Basic TypeScript project
// vite.config.ts
import { defineConfig } from 'vite'
import tsgoChecker from 'vite-plugin-tsgo-checker'
export default defineConfig({
plugins: [tsgoChecker()],
})Custom tsconfig path
// vite.config.ts
import { defineConfig } from 'vite'
import tsgoChecker from 'vite-plugin-tsgo-checker'
export default defineConfig({
plugins: [
tsgoChecker({
tsconfigPath: './tsconfig.app.json',
}),
],
})Terminal only (no browser overlay)
// vite.config.ts
import { defineConfig } from 'vite'
import tsgoChecker from 'vite-plugin-tsgo-checker'
export default defineConfig({
plugins: [
tsgoChecker({
overlay: false,
terminal: true,
}),
],
})Disable in build mode
// vite.config.ts
import { defineConfig } from 'vite'
import tsgoChecker from 'vite-plugin-tsgo-checker'
export default defineConfig({
plugins: [
tsgoChecker({
enableBuild: false,
}),
],
})How it works
- When Vite starts the dev server, the plugin spawns a worker thread
- The worker thread starts
tsgo --noEmit --watchas a child process - The output from
tsgois parsed to extract diagnostics (file, line, column, message) - Diagnostics are sent back to the main thread via
postMessage - The main thread:
- Logs formatted errors to the terminal
- Sends errors to the browser via Vite's WebSocket HMR channel
- A custom web component overlay displays errors in the browser
In build mode, the plugin runs tsgo --noEmit and fails the build if there are type errors.
Requirements
- Node.js >= 18
- Vite >= 5
@typescript/native-previewinstalled in your project
License
MIT
