Open-Source Wikis

/

Vue.js

/

By the numbers

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.ts is where every Composition/Options API path eventually lands.
  • compileScript.ts is the <script setup> transform.
  • renderer.ts is 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-sfc depends on @babel/parser, magic-string, estree-walker, postcss, source-map-js.
  • server-renderer is dependency-free apart from the @vue/* workspace packages.
  • reactivity, runtime-core, runtime-dom, compiler-core, compiler-dom, compiler-ssr have only @vue/shared and (for runtimes) @vue/reactivity as 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.

By the numbers – Vue.js wiki | Factory