vue-tsc

A command-line type-checking tool that teaches the TypeScript compiler to understand Vue single-file components.

Tool
npm
v3.3.11
6,717stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
89/100Excellent
Development Activity96
Maintenance96
Community64
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
69/100Good
Architecture82
Code Quality85
Innovation85
Learning Curve25

vue-tsc is the command-line type checker for Vue projects, published as one package inside the vuejs/language-tools monorepo alongside the editor tooling that powers the official Vue VS Code extension. It wraps tsc itself rather than reimplementing it: it hands TypeScript a Vue-aware language plugin (built on @vue/language-core) so .vue files are transformed into virtual TypeScript code before the compiler ever sees them, then delegates everything else — argument parsing, diagnostics, declaration emit — to the real tsc binary.

Because it is a thin wrapper, every native tsc flag works unchanged: vue-tsc --noEmit type-checks a project the same way tsc --noEmit would if .vue files were plain TypeScript, and vue-tsc --declaration --emitDeclarationOnly produces .d.ts files for a Vue component library. It reads vueCompilerOptions straight out of the project’s existing tsconfig.json, so there is no separate configuration format to learn, and it automatically detects related file types (Vitepress or petite-vue extensions) declared in that config.

vue-tsc is the standard type-check step wired into nearly every Vue 3 + TypeScript project scaffold, run in CI to catch template and script type errors that a bundler’s transpile-only pipeline would silently let through.

What You Get

  • Drop-in tsc replacement - accepts the exact same CLI flags as tsc, so existing type-check npm scripts just swap the binary name.
  • Template type checking - type errors inside <template> blocks (wrong prop names, mistyped v-model bindings, bad event handler signatures) are reported alongside <script> errors.
  • Declaration file generation - --declaration --emitDeclarationOnly emits .d.ts files for publishable Vue component libraries.
  • Zero extra config format - reads vueCompilerOptions from the project’s existing tsconfig.json instead of introducing a new config file.
  • Programmatic run() API - importable for tooling that needs to point at a custom TypeScript installation rather than the one on PATH.

Common Use Cases

  • CI type-check gate - a type-check script (vue-tsc --noEmit) run in GitHub Actions/CI to fail a build when a .vue file has a type error a bundler would otherwise ignore.
  • Publishing typed component libraries - authors of shared Vue component packages use vue-tsc --declaration --emitDeclarationOnly to ship accurate .d.ts files to consumers.
  • Pre-commit / pre-push hooks - projects wire vue-tsc --noEmit into Husky or lint-staged so type errors are caught before code reaches a PR.
  • Editor-independent verification - teams that don’t all use VS Code + Volar still get the same type information enforced from the command line, keeping local and CI results consistent.

Under The Hood

Architecture vue-tsc (packages/tsc in the vuejs/language-tools monorepo) is a thin CLI wrapper — a single index.ts plus a bin/vue-tsc.js shim — around @volar/typescript’s runTsc, into which it injects a Vue language plugin constructed from @vue/language-core (createVueLanguagePlugin) so that .vue single-file components are transformed into virtual TypeScript code the real compiler can consume; a small retry loop catches a sentinel retryToken error to progressively discover which file extensions (.vue, plus optional Vitepress/petite-vue extensions) a project actually uses before settling on a final compiler run, and a resolveTscPath helper handles resolving the correct tsc binary even when TypeScript is aliased to an alternate package. Almost all of the substantive logic — SFC parsing, virtual code generation, type inference across template and script boundaries — lives in the sibling @vue/language-core package that vue-tsc depends on as workspace:*, making vue-tsc itself a deliberately thin, low-risk integration point in a larger, well-separated monorepo (language-core, language-server, language-service, typescript-plugin, component-meta all sit alongside it).

Tech Stack Written entirely in TypeScript within a pnpm workspace monorepo (managed with lerna for versioning), vue-tsc depends on @volar/typescript for the generic Volar.js language-tooling bridge and @vue/language-core for Vue-specific compilation, and peer-depends on typescript (>=5.0.0) to supply the actual compiler it wraps; the monorepo builds via TypeScript project references (tsc -b), is formatted with dprint rather than Prettier, linted with @tsslint (a TypeScript-native lint runner, with an ESLint compatibility layer), tested with Vitest, and runs its full suite through GitHub Actions on every push and pull request.

Code Quality The package has a dedicated tests/ directory (build.spec.ts, dts.spec.ts, typecheck.spec.ts, unmapped-diagnostics.spec.ts) built on Vitest inline snapshots, driven against a large shared test-workspace/tsc fixture directory containing dozens of numbered regression cases tied to specific historical GitHub issues, which reflects a strong regression-testing discipline; the source itself uses a deliberate sentinel-exception pattern for its extension-discovery retry loop rather than swallowing failures, is fully typed with no loose any surface, and the whole monorepo is enforced by tsslint with an automated lint/format-fix CI job on every push.

API Design The public surface is intentionally minimal: the CLI accepts every native tsc flag unchanged, so teams migrating from tsc to vue-tsc change one binary name and nothing else; Vue-specific behavior is configured through the vueCompilerOptions block already present in tsconfig.json rather than a new file format, and the only additional API is a single optional run(tscPath?) export for tooling that needs to target a non-default TypeScript install. This keeps day-one adoption to essentially zero new concepts, at the cost of the extension-discovery retry mechanism being entirely invisible (and undocumented) to end users.

Used by 28 apps in this directory

Go
73%
GPL 3.0

1Panel

Devops · Hosting Control Panel · Monitoring

36,820

The only open-source VPS control panel with native AI agent runtime — deploy websites, Docker stacks, and local LLMs from one web interface.

View details
90
Repo Health
76
Technical
67
Dependency
Built with
Go73%
Vue27%
Updated 3 days ago
TypeScript
45%
Other

Convex Backend

Developer Tools · Databases

12,494

Open-source reactive database that lets developers build live-updating apps with pure TypeScript, strong consistency, and real-time subscriptions—no separate API layer required.

View details
87
Repo Health
82
Technical
68
Dependency
Built with
TypeScript45%
Rust43%
Updated 2 days ago
Java
78%
GPL 3.0

DataEase

Analytics · Data Engineering · AI Assistants

24,408

Open-source BI tool with drag-and-drop dashboards, 20+ data source connectors, and AI-powered natural language queries — a self-hosted alternative to Tableau.

View details
93
Repo Health
71
Technical
65
Dependency
Built with
Java78%
Vue22%
Updated 3 days ago
TypeScript
81%
Other

Directus

CMS · Low Code Platforms

37,783

Connect any SQL database and get instant REST and GraphQL APIs, a visual management Studio, and a native MCP server for AI agents — free for most organizations.

View details
92
Repo Health
82
Technical
76
Dependency
Built with
TypeScript81%
Vue18%
Updated 3 days ago
Java
34%
Apache 2.0

Enso

Analytics · Data Engineering · Low Code Platforms

7,442

A visual and textual programming platform for data prep and analysis where the node graph and the underlying Enso code are always perfectly in sync, built by an Alteryx co-founder on a GraalVM engine.

View details
61
Repo Health
90
Technical
62
Dependency
Built with
Java34%
TypeScript27%
Scala26%
Updated 4 weeks ago
Go
38%
MIT

ezBookkeeping

Invoicing Finance

5,535

Lightweight self-hosted personal finance manager with AI receipt scanning, multi-currency support, and MCP integration for complete data privacy.

View details
88
Repo Health
80
Technical
72
Dependency
Built with
Go38%
Vue34%
TypeScript25%
Updated yesterday
Python
64%
MIT

Flowfile

Data Engineering

350

Visual ETL that compiles to Polars — build pipelines on a canvas, export as standalone Python, and run anywhere without platform lock-in.

View details
83
Repo Health
81
Technical
66
Dependency
Built with
Python64%
Vue18%
TypeScript16%
Updated yesterday
TypeScript
58%
AGPL 3.0

Frappe Books

Invoicing Finance

4,936

Offline desktop accounting with double-entry, POS, and custom invoice templates

View details
90
Repo Health
77
Technical
73
Dependency
Built with
TypeScript58%
Vue39%
Updated yesterday
Go
83%
Apache 2.0

frp

Networking

109,241

A fast reverse proxy that exposes local servers behind NAT or firewalls to the public internet with multi-protocol support.

View details
93
Repo Health
82
Technical
71
Dependency
Built with
Go83%
Vue12%
Updated 1 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search