nonzzz/vite-bundle-analyzer

bundle analyzer for vite

TypeScript

466

218 commits

updated Jul 13, 2026

See the code

README

vite-bundle-analyzer

Awesome

Vite Bundle Analyzer

A bundle analyzer for Vite, Rollup, and Rolldown that visualizes bundle size with an interactive treemap.

[!WARNING] Vite enables minification by default. The parsed size may appear larger than actual size because bundle info from Rollup isn't compressed. Rolldown support is experimental.

Installation

npm install vite-bundle-analyzer -D
# or
yarn add vite-bundle-analyzer -D
# or
pnpm add vite-bundle-analyzer -D

Usage

Plugins only work during the build phase.

Vite

import { defineConfig } from 'vite'
import { analyzer } from 'vite-bundle-analyzer'

export default defineConfig({
  plugins: [
    analyzer()
  ]
})

Rollup

import { adapter } from 'vite-bundle-analyzer'
import { analyzer } from 'vite-bundle-analyzer'

export default {
  plugins: [
    adapter(analyzer())
  ]
}

Rolldown Plugin (Experimental)

import { unstableRolldownAdapter } from 'vite-bundle-analyzer'
import { analyzer } from 'vite-bundle-analyzer'

export default {
  plugins: [
    unstableRolldownAdapter(analyzer())
  ]
}

Configuration

OptionTypeDefaultDescription
analyzerMode'server' | 'static' | 'json' | function'server'Analysis output mode
fileNamestring | function'stats'Output filename (without extension)
reportTitlestring'Vite Bundle Analyzer'Report page title
gzipOptionsRecord<string, any>{}Gzip compression options (see zlib module)
brotliOptionsRecord<string, any>{}Brotli compression options
analyzerPortnumber | 'auto'8888Server port
openAnalyzerbooleantrueAuto-open browser (server/static mode only)
defaultSizes'stat' | 'gzip' | 'brotli''stat'Default size metric
summarybooleantrueShow summary in console
enabledbooleantrueEnable/disable plugin
includestring | RegExp | Array<string | RegExp>[]Include patterns
excludestring | RegExp | Array<string | RegExp>[]Exclude patterns
pathFormatter(path: string, defaultWd: string) => stringundefinedFormatting Paths

CLI

npx vite-bundle-analyzer

# With options
npx vite-bundle-analyzer --help

# If you're using rolldown-vite pls using the following command

npx vite-bundle-analyzer -e=rolldown-vite

Common Issues

Empty Chunk Sizes

If chunk sizes appear empty, check for plugins that break source maps (e.g., @vitejs/plugin-legacy). The analyzer relies on source maps for accurate size calculation.

Vite-based Frameworks

For frameworks built on Vite (VitePress, Remix, Qwik), use analyzerMode: 'server' for accurate results due to multiple build instances.

Static Mode Without Server

When analyzerMode: 'static' and openAnalyzer: false, no development server is created.

API Integration

import { SSE, createServer, injectHTMLTag, openBrowser, renderView } from 'vite-bundle-analyzer'

// Create custom server
const server = createServer()
server.get('/', async (c) => {
  const html = await renderView(data, { title: 'Custom Analyzer', mode: 'stat' })
  c.res.writeHead(200, { 'Content-Type': 'text/html' })
  c.res.write(html)
  c.res.end()
})
server.listen(3000)

Debug

# Vite
vite build --debug

# Environment variable
ANALYZE_DEBUG=true npm run build

Contributors

Kanno Aleksandr Mitskevich mengdaoshizhongxinyang

Sponsors

Credits

  • Geist UI
  • The friend who proposed this idea.
  • All contributors and sponsors

License

MIT

analyzer
bundle-analyzer
rollup-plugin
visualizer
vite-plugin

nonzzz/vite-bundle-analyzer

bundle analyzer for vite

TypeScript

466

218 commits

updated Jul 13, 2026

See the code

README

vite-bundle-analyzer

Awesome

Vite Bundle Analyzer

A bundle analyzer for Vite, Rollup, and Rolldown that visualizes bundle size with an interactive treemap.

[!WARNING] Vite enables minification by default. The parsed size may appear larger than actual size because bundle info from Rollup isn't compressed. Rolldown support is experimental.

Installation

npm install vite-bundle-analyzer -D
# or
yarn add vite-bundle-analyzer -D
# or
pnpm add vite-bundle-analyzer -D

Usage

Plugins only work during the build phase.

Vite

import { defineConfig } from 'vite'
import { analyzer } from 'vite-bundle-analyzer'

export default defineConfig({
  plugins: [
    analyzer()
  ]
})

Rollup

import { adapter } from 'vite-bundle-analyzer'
import { analyzer } from 'vite-bundle-analyzer'

export default {
  plugins: [
    adapter(analyzer())
  ]
}

Rolldown Plugin (Experimental)

import { unstableRolldownAdapter } from 'vite-bundle-analyzer'
import { analyzer } from 'vite-bundle-analyzer'

export default {
  plugins: [
    unstableRolldownAdapter(analyzer())
  ]
}

Configuration

OptionTypeDefaultDescription
analyzerMode'server' | 'static' | 'json' | function'server'Analysis output mode
fileNamestring | function'stats'Output filename (without extension)
reportTitlestring'Vite Bundle Analyzer'Report page title
gzipOptionsRecord<string, any>{}Gzip compression options (see zlib module)
brotliOptionsRecord<string, any>{}Brotli compression options
analyzerPortnumber | 'auto'8888Server port
openAnalyzerbooleantrueAuto-open browser (server/static mode only)
defaultSizes'stat' | 'gzip' | 'brotli''stat'Default size metric
summarybooleantrueShow summary in console
enabledbooleantrueEnable/disable plugin
includestring | RegExp | Array<string | RegExp>[]Include patterns
excludestring | RegExp | Array<string | RegExp>[]Exclude patterns
pathFormatter(path: string, defaultWd: string) => stringundefinedFormatting Paths

CLI

npx vite-bundle-analyzer

# With options
npx vite-bundle-analyzer --help

# If you're using rolldown-vite pls using the following command

npx vite-bundle-analyzer -e=rolldown-vite

Common Issues

Empty Chunk Sizes

If chunk sizes appear empty, check for plugins that break source maps (e.g., @vitejs/plugin-legacy). The analyzer relies on source maps for accurate size calculation.

Vite-based Frameworks

For frameworks built on Vite (VitePress, Remix, Qwik), use analyzerMode: 'server' for accurate results due to multiple build instances.

Static Mode Without Server

When analyzerMode: 'static' and openAnalyzer: false, no development server is created.

API Integration

import { SSE, createServer, injectHTMLTag, openBrowser, renderView } from 'vite-bundle-analyzer'

// Create custom server
const server = createServer()
server.get('/', async (c) => {
  const html = await renderView(data, { title: 'Custom Analyzer', mode: 'stat' })
  c.res.writeHead(200, { 'Content-Type': 'text/html' })
  c.res.write(html)
  c.res.end()
})
server.listen(3000)

Debug

# Vite
vite build --debug

# Environment variable
ANALYZE_DEBUG=true npm run build

Contributors

Kanno Aleksandr Mitskevich mengdaoshizhongxinyang

Sponsors

Credits

  • Geist UI
  • The friend who proposed this idea.
  • All contributors and sponsors

License

MIT

analyzer
bundle-analyzer
rollup-plugin
visualizer
vite-plugin

Project health

Latest release

1.3.9 · Jul 13, 2026

Releases this year

11

Significant stargazers

Pooya Parsa

5,149 followers · starred Oct 2025

Daniel Roe

6,061 followers · starred Oct 2025

Wojciech Maj

3,572 followers · starred Apr 2024

Mathieu Acthernoene

902 followers · starred Mar 2025