# vue vs svelte — codebase comparison

> Canonical page: https://codevetter.com/unpack/compare/vue-vs-svelte

# vue vs svelte — codebase comparison

Runtime-vs-compiler tradeoffs: Vue ships a reactive runtime, Svelte compiles components to direct DOM operations.

| | vuejs/core | sveltejs/svelte |
|---|---|---|
| Scanned commit | 4ab865a (2026-09-18) | 636eaaa (2026-09-18) |
| Files | 696 | 4000 |
| Primary source root | packages | packages |

## vue

This is the vuejs/core monorepo at v3.5.43 — the source of the `vue` npm package and its ten sibling `@vue/*` packages, split cleanly into a compiler half (compiler-core → compiler-dom → compiler-sfc/compiler-ssr) and a runtime half (reactivity → runtime-core → runtime-dom/server-renderer), glued by `@vue/shared`. The distinctive engineering shape is compile-time configurability: every package is built by a single `rollup.config.js` driven by `scripts/build.js` into up to seven output formats, with `__DEV__`/`__BROWSER__`/`__FEATURE_*`/`__COMPAT__` flags statically replaced so that dev warnings, the Options API, Suspense, and the Vue-2 compat layer all tree-shake away. It is written for framework maintainers and ecosystem tool authors rather than app developers: the public API surface is small, but the internal surface (renderer internals object, `createRenderer` for custom platforms, compiler `nodeTransforms`/`directiveTransforms`) is explicitly designed as an extension substrate. Two private packages — `sfc-playground` and `template-explorer` — are live-deployed dev tools that consume the built artifacts of the very repo that builds them.

## svelte

This is the `sveltejs/svelte` monorepo: a single publishable package (`packages/svelte`, v5.57.1) containing both a compiler that turns `.svelte` components into plain JavaScript modules and a signals-based client/server runtime those modules import at runtime. The compiler runs a strict three-phase pipeline (parse → analyze → transform) with separate client and server code generators, while the runtime implements Svelte 5 runes ($state/$derived/$effect) on top of a push-pull reactive graph with bitflag-tagged signals, batched flushing, and an experimental async/fork mode. It is aimed at framework consumers (SvelteKit, vite-plugin-svelte, svelte-check, the REPL) rather than app authors directly, and is distinctive for shipping unbundled ESM source as the published artifact, generating its error/warning catalogue and its `.d.ts` types from source, and carrying ~3,400 fixture directories as its primary test surface.

Full evidence: https://codevetter.com/unpack/vue · https://codevetter.com/unpack/svelte

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
