Next generation frontend tooling. It's fast!
This report summarizes scanner evidence for vitejs/vite, a TypeScript project with 83,630 GitHub stars. SynthScan examined 164,287 lines of code across 2285 source files, recording 209 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 202 finding(s).
Are imports declared and package/API names verified? 7 finding(s).
Are wrappers, guards, and repeated structures necessary? 173 finding(s).
Which changes need focused human review? 209 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 209 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | playground/test-utils.ts | 273 | export function readDepOptimizationMetadata( | CODE |
| LOW | playground/vitestSetupUtils.ts | 520 | function setupConsoleWarnCollector(logs: string[]) { | CODE |
| LOW | playground/vitestSetupUtils.ts | 532 | function stripTrailingSlashIfNeeded(url: string, base: string): string { | CODE |
| LOW | playground/dynamic-import/dep-cjs-umd/index.js | 2 | ;(function webpackUniversalModuleDefinition(root, factory) { | CODE |
| LOW | playground/backend-integration/vite.config.js | 9 | function BackendIntegrationExample() { | CODE |
| LOW | playground/hmr/vite.config.ts | 94 | function virtualInvalidationPlugin(): Plugin { | CODE |
| LOW | playground/ssr/src/app.js | 51 | async function renderForkedDeadlockStaticImports(rootDir) { | CODE |
| LOW | playground/ssr/src/app.js | 57 | async function renderForkedDeadlockDynamicImports(rootDir) { | CODE |
| LOW | …nd/ssr/src/forked-deadlock/fuse-stuck-bridge-module.js | 6 | export function fuseStuckBridgeModuleExport() { | CODE |
| LOW | …d-deadlock/dynamic-imports/fuse-stuck-bridge-module.js | 6 | export function fuseStuckBridgeModuleExport() { | CODE |
| LOW | playground/hmr-full-bundle-mode/vite.config.ts | 14 | function waitBundleCompleteUntilAccess(): Plugin { | CODE |
| LOW | playground/css-lightningcss/vite.config.js | 20 | function testLightningcssVisitorDuringMinify() { | CODE |
| LOW | playground/lib/__tests__/serve.ts | 147 | function setupConsoleWarnCollector() { | CODE |
| LOW | playground/assets/index.html | 720 | function testDynamicImportMetaUrlWithComma(name, i) { | CODE |
| LOW | playground/assets/index.html | 731 | function testDynamicImportMetaUrlWithQuery(name, i) { | CODE |
| LOW | playground/assets/index.html | 742 | function testDynamicImportMetaUrlWithTernaryOperator(name, i) { | CODE |
| LOW | playground/js-sourcemap/foo-with-sourcemap-plugin.ts | 8 | export default function transformFooWithInlineSourceMap(): Plugin { | CODE |
| LOW | playground/js-sourcemap/__tests__/js-sourcemap.spec.ts | 49 | function expectConsoleLogArgumentMapsToOriginalX( | CODE |
| LOW | playground/js-sourcemap/__tests__/js-sourcemap.spec.ts | 116 | function expectVarInitMapsBackToExportConst( | CODE |
| LOW | playground/optimize-deps/vite.config.js | 184 | function injectImportIntoOptimizedDep() { | CODE |
| LOW | docs/guide/api-environment-runtimes.md | 136 | function createWorkerdDevEnvironment( | CODE |
| LOW | docs/guide/api-environment-frameworks.md | 221 | function vitePluginVirtualIndexHtml(): Plugin { | CODE |
| LOW | docs/guide/api-environment-plugins.md | 165 | function PerEnvironmentCountTransformedModulesPlugin() { | CODE |
| LOW | docs/changes/shared-plugins-during-build.md | 24 | function CountTransformedModulesPlugin() { | CODE |
| LOW | docs/changes/shared-plugins-during-build.md | 44 | function PerEnvironmentCountTransformedModulesPlugin() { | CODE |
| LOW | docs/changes/shared-plugins-during-build.md | 65 | function PerEnvironmentCountTransformedModulesPlugin() { | CODE |
| LOW | docs/_data/acknowledgements.data.ts | 113 | function parseBundledDependenciesFromLicense(licensePath: string): string[] { | CODE |
| LOW | scripts/mergeChangelog.ts | 101 | function findPreviousStableVersion(lines: string[], startIdx: number): string { | CODE |
| LOW | packages/plugin-legacy/src/index.ts | 188 | function resolveLegacyOutputMinify( | CODE |
| LOW | packages/plugin-legacy/src/index.ts | 1073 | function prependModenChunkLegacyGuardPlugin(): Plugin { | CODE |
| LOW | packages/plugin-legacy/src/index.ts | 1110 | function recordAndRemovePolyfillBabelPlugin( | CODE |
| LOW | packages/plugin-legacy/src/index.ts | 1126 | function replaceLegacyEnvBabelPlugin(): BabelPlugin { | CODE |
| LOW | packages/plugin-legacy/src/index.ts | 1139 | function replaceModernEnvBabelPlugin(): BabelPlugin { | CODE |
| LOW | packages/create-vite/src/index.ts | 1057 | function updateReactCompilerReadme(root: string, newBody: string) { | CODE |
| LOW | packages/vite/rolldown.config.ts | 178 | function enableSourceMapsInWatchModePlugin(): Plugin { | CODE |
| LOW | packages/vite/rolldown.config.ts | 207 | function externalizeDepsInWatchPlugin(): Plugin { | CODE |
| LOW | packages/vite/rolldown.config.ts | 302 | function buildTimeImportMetaUrlPlugin(): Plugin { | CODE |
| LOW | packages/vite/rolldown.dts.config.ts | 163 | function stringifyModuleExportName(node: ModuleExportName): string { | CODE |
| LOW | packages/vite/rolldown.dts.config.ts | 267 | function replaceConfusingTypeNames( | CODE |
| LOW | packages/vite/rolldown.dts.config.ts | 438 | function esmifyPostcssLoadConfigDts(): Plugin { | CODE |
| LOW | packages/vite/src/shared/forwardConsole.ts | 27 | export function setupForwardConsoleHandler( | CODE |
| LOW | packages/vite/src/shared/utils.ts | 81 | export function getAsyncFunctionDeclarationPaddingLineCount(): number { | CODE |
| LOW | packages/vite/src/shared/ssrTransform.ts | 23 | export function analyzeImportedModDifference( | CODE |
| LOW | packages/vite/src/node/external.ts | 35 | export function createIsConfiguredAsExternal( | CODE |
| LOW | packages/vite/src/node/plugin.ts | 411 | export async function resolveEnvironmentPlugins( | CODE |
| LOW | packages/vite/src/node/http.ts | 169 | async function getAvailableEphemeralPort( | CODE |
| LOW | packages/vite/src/node/utils.ts | 736 | function windowsMappedRealpathSync(path: string) { | CODE |
| LOW | packages/vite/src/node/utils.ts | 967 | export function getLocalhostAddressIfDiffersFromDNS(): | CODE |
| LOW | packages/vite/src/node/utils.ts | 1035 | export function extractHostnamesFromCerts( | CODE |
| LOW | packages/vite/src/node/utils.ts | 1141 | export function extractHostnamesFromSubjectAltName( | CODE |
| LOW | packages/vite/src/node/utils.ts | 1201 | function backwardCompatibleWorkerPlugins(plugins: any) { | CODE |
| LOW | packages/vite/src/node/utils.ts | 1364 | function setupRollupOptionCompatForEnvironment(environment: any): any { | CODE |
| LOW | packages/vite/src/node/utils.ts | 1375 | export function hasBothRollupOptionsAndRolldownOptions( | CODE |
| LOW | packages/vite/src/node/utils.ts | 1976 | export function formatAndTruncateFileList(files: string[]): { | CODE |
| LOW | packages/vite/src/node/deprecations.ts | 44 | export function isFutureDeprecationEnabled( | CODE |
| LOW | packages/vite/src/node/packages.ts | 176 | export function findNearestMainPackageData( | CODE |
| LOW | packages/vite/src/node/config.ts | 260 | function defaultCreateClientDevEnvironment( | CODE |
| LOW | packages/vite/src/node/config.ts | 272 | function defaultCreateDevEnvironment(name: string, config: ResolvedConfig) { | CODE |
| LOW | packages/vite/src/node/config.ts | 819 | async function loadDevToolsIntegrationPlugins( | CODE |
| LOW | packages/vite/src/node/config.ts | 961 | export function resolveDevEnvironmentOptions( | CODE |
| 113 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | playground/html/__tests__/html.spec.ts | 546 | viteServer.environments.client.moduleGraph.urlToModuleMap.has( | CODE |
| CRITICAL | playground/html/__tests__/html.spec.ts | 551 | viteServer.environments.client.moduleGraph.urlToModuleMap.has( | CODE |
| CRITICAL | packages/vite/src/node/server/middlewares/static.ts | 384 | ${server.config.server.fs.allow.map((i) => `- ${i}`).join('\n')} | CODE |
| CRITICAL | packages/vite/src/node/server/middlewares/indexHtml.ts | 185 | server.environments.client.moduleGraph.urlToModuleMap.get(moduleUrl) | CODE |
| CRITICAL | …rc/node/server/middlewares/__tests__/indexHtml.spec.ts | 167 | server.environments.client.moduleGraph.urlToModuleMap.get('/src/main.ts') | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | playground/css/vite.config.js | 81 | css: { | COMMENT |
| LOW | playground/ssr-deps/module-condition/module.js | 1 | // this is written in ESM but the file extension implies this is evaluated as CJS. | COMMENT |
| LOW | playground/chunk-importmap/shared-dep.js | 1 | // CSS-only module (no JS exports) shared by multiple dynamic chunks, so it is | COMMENT |
| LOW | …nd/lazy-compilation/__tests__/lazy-compilation.spec.ts | 1 | import type { Response, Route } from 'playwright-chromium' | COMMENT |
| LOW | …mize-deps/dynamic-use-dep-alias-using-absolute-path.js | 1 | // This is used to setup a test scenario, where dep scanner | COMMENT |
| LOW | playground/optimize-deps/unused-split-entry.js | 1 | import msg from '@vitejs/test-added-in-entries' | COMMENT |
| LOW | …d/optimize-deps/dep-alias-using-absolute-path/index.js | 1 | // Importing a shared dependency used by other modules, | COMMENT |
| LOW | packages/vite/types/import-meta.d.ts | 1 | /// <reference path="./importMeta.d.ts" /> | COMMENT |
| LOW | packages/vite/src/types/ws.d.ts | 1 | // Modified and inlined to avoid extra dependency | COMMENT |
| LOW | packages/vite/src/node/config.ts | 1361 | rolldownOptions.platform = merged.esbuildOptions.platform | COMMENT |
| LOW | packages/vite/src/node/config.ts | 1381 | // - alias (it probably does not work the same with `resolve.alias`) | COMMENT |
| LOW | packages/vite/src/node/optimizer/rolldownDepPlugin.ts | 281 | // create the Proxy in the prototype to workaround esbuild issue. Why? | COMMENT |
| LOW | packages/vite/src/node/optimizer/optimizer.ts | 261 | // For dev, we run the scanner and the first optimization | COMMENT |
| LOW | packages/vite/src/node/optimizer/optimizer.ts | 581 | COMMENT | |
| LOW | packages/vite/src/node/plugins/html.ts | 481 | // position, or the newline at the end of the previous line's node. | COMMENT |
| LOW | packages/vite/src/node/plugins/esbuild.ts | 281 | cjs: 'cjs', | COMMENT |
| LOW | packages/vite/src/node/server/transformRequest.ts | 81 | options: TransformOptionsInternal, | COMMENT |
| LOW | …/node/__tests__/optimizer/discoverBeforeListen.spec.ts | 81 | ]) | COMMENT |
| LOW | packages/vite/src/client/bundledDevHmrClient.ts | 381 | update: Extract<HmrUpdate, { type: 'update' }>, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/guide/index.md | 123 | You can also use a tool like [tiged](https://github.com/tiged/tiged) to scaffold your project with one of the templates. | CODE |
| MEDIUM | docs/guide/ssr.md | 26 | You can also scaffold these projects locally by [running `create-vite`](./index.md#scaffolding-your-first-vite-project) | CODE |
| MEDIUM | docs/blog/announcing-vite8.md | 45 | Play online with Vite 8 using [vite.new](https://vite.new) or scaffold a Vite app locally with your preferred framework | CODE |
| MEDIUM | docs/blog/announcing-vite8-1.md | 43 | Play online with Vite 8.1 using [vite.new](https://vite.new) or scaffold a Vite app locally with your preferred framewor | CODE |
| MEDIUM | docs/blog/announcing-vite7.md | 50 | Play online with Vite 7 using [vite.new](https://vite.new) or scaffold a Vite app locally with your preferred framework | CODE |
| MEDIUM | packages/create-vite/README.md | 84 | create-vite is a tool to quickly start a project from a basic template for popular frameworks. Check out Awesome Vite fo | CODE |
| MEDIUM | packages/create-vite/README.md | 84 | create-vite is a tool to quickly start a project from a basic template for popular frameworks. Check out Awesome Vite fo | CODE |
| MEDIUM | packages/create-vite/__tests__/cli.spec.ts | 35 | // Underscore-prefixed files are renamed to dot-prefixed on scaffold | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/guide/static-deploy-github-pages.yaml | 2 | # This file is extracted as a separate file so that renovate can update the action versions | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/vite/src/node/plugins/css.ts | 3503 | // lightningcss always generates `url("placeholder")` | COMMENT |
| LOW | packages/vite/src/node/plugins/css.ts | 3504 | // (`url('placeholder')`, `url(placeholder)` is not generated) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …kages/vite/src/node/server/middlewares/htmlFallback.ts | 53 | // so we need to check if the file exists | COMMENT |