vuejs/core
By the numbers
Data collected on 2026-04-30 against commit 3310eea4 of main.
A snapshot of the codebase from a few quantitative angles. Per-person stats are intentionally not included — the maintainers page handles ownership separately. For history and narrative, see lore.
Size
The repo holds 12 public packages under packages/ plus 5 private workspaces under packages-private/. Source totals across the public packages:
| Package | Source files | Source lines | Test files |
|---|---|---|---|
runtime-core |
65 | 20,714 | 45 |
compiler-core |
30 | 11,011 | 21 |
compiler-sfc |
30 | 8,113 | 20 |
runtime-dom |
17 | 5,038 | 16 |
reactivity |
13 | 3,898 | 16 |
compiler-ssr |
17 | 2,249 | 16 |
compiler-dom |
16 | 1,417 | 13 |
server-renderer |
15 | 1,321 | 18 |
shared |
16 | 1,088 | 6 |
runtime-test |
5 | 405 | 1 |
vue-compat |
6 | 208 | 12 |
vue |
3 | 146 | 20 |
xychart-beta horizontal
title "Source lines per package (TypeScript)"
x-axis ["vue", "vue-compat", "runtime-test", "shared", "server-renderer", "compiler-dom", "compiler-ssr", "reactivity", "runtime-dom", "compiler-sfc", "compiler-core", "runtime-core"]
y-axis "Lines"
bar [146, 208, 405, 1088, 1321, 1417, 2249, 3898, 5038, 8113, 11011, 20714]Repo-wide totals:
- 277 TypeScript files in
packages/*/src/. - 195 Vitest spec files across
packages/*/__tests__/. - 204 TypeScript files inside
__tests__/directories overall. - 50 dev-dependencies in the root
package.json.
Activity
The full history runs from September 19, 2018 (commit 3a86b6f) to April 22, 2026 (commit 3310eea4). 7,018 commits total. Distribution by year:
xychart-beta horizontal
title "Commits per year"
x-axis ["2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026 YTD"]
y-axis "Commits"
bar [223, 1051, 1746, 1112, 478, 867, 1027, 372, 142]The 2020 spike covers the run-up to and stabilization of the Vue 3.0 release. 2022's dip and 2023's rebound coincide with the rise of the SFC-Studio/Volar ecosystem outside the core repo and the introduction of the <script setup> macros (defineModel, definePropsDestructure) in 3.4 and 3.5.
In the last 90 days (Feb–Apr 2026), the most-touched files are package manifests during release prep (packages/*/package.json). Among source files, the leaders were in compiler-sfc and runtime-core.
Churn hotspots
All-time most-changed source files (excluding package.json):
| File | Commits touching it |
|---|---|
packages/runtime-core/src/component.ts |
340 |
packages/compiler-sfc/src/compileScript.ts |
305 |
packages/runtime-core/src/renderer.ts |
303 |
These three files are the biggest in the codebase by complexity, and each one is the spine of its area:
component.tsis where every Composition/Options API path eventually lands.compileScript.tsis the<script setup>transform.renderer.tsis the patch loop.
Touching them is a strong signal that something nontrivial is happening; reviewers tend to be especially careful with PRs against these three.
Bot-attributed commits
7,018 total commits. Of those:
- 1,046 commits have a bot in the author field (
[bot]/dependabot/github-actions/renovate). About 15% of all commits. - 558 commits carry a
Co-authored-by:trailer mentioning a bot.
These numbers are a lower bound on AI/automation involvement. Inline tools like Copilot, Cursor, or Codeium leave no trace in git log. The high bot-author share reflects this repo's heavy use of Renovate for dependency updates (configured in .github/renovate.json5).
Test-to-code ratio
Across the public packages, the ratio of test files to source files is roughly 0.7 (195 test files : 277 source files). It varies by package — vue-compat is over 2.0 (12 tests for 6 source files), while compiler-core is around 0.7 and runtime-core is around 0.69.
Complexity
Largest single source files (excluding tests and generated data):
| File | Bytes |
|---|---|
packages/runtime-core/src/renderer.ts |
~74 KB |
packages/compiler-sfc/src/script/resolveType.ts |
~60 KB |
packages/runtime-dom/src/jsx.ts |
~48 KB |
packages/compiler-sfc/src/compileScript.ts |
~45 KB |
packages/compiler-core/src/tokenizer.ts |
~36 KB |
packages/runtime-core/src/component.ts |
~35 KB |
packages/runtime-core/src/componentOptions.ts |
~33 KB |
packages/runtime-core/src/hydration.ts |
~30 KB |
packages/compiler-core/src/parser.ts |
~30 KB |
packages/compiler-core/src/codegen.ts |
~28 KB |
packages/compiler-core/src/transforms/transformElement.ts |
~28 KB |
renderer.ts is intentionally one big file — splitting it across modules would force the tight processX/mountX/patchX paths to bounce through indirection, which the maintainers have explicitly resisted on perf grounds.
TODOs and FIXMEs
grep -rE 'TODO|FIXME|HACK|XXX' against packages/**/*.ts produces 32 matches. Vue's source is unusually low on accumulated debt markers compared to similarly sized repos.
Dependencies
Root devDependencies count: 50. Notable runtime dependencies (per-package):
compiler-sfcdepends on@babel/parser,magic-string,estree-walker,postcss,source-map-js.server-rendereris dependency-free apart from the@vue/*workspace packages.reactivity,runtime-core,runtime-dom,compiler-core,compiler-dom,compiler-ssrhave only@vue/sharedand (for runtimes)@vue/reactivityas runtime dependencies.
This dependency hygiene is one of the reasons the prod runtime bundle stays around 35 KB minified.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.