Vite 8 25,978 builds with Rolldown 181,166 , a Rust port of Rollup 141,981 that bundles and minifies in one pass, so there is nothing to configure: npm 2,036 run build already tree-shakes, minifies and hashes filenames. To see what that pass is worth, rebuild with npx vite build --minify false. Both builds transformed the same 668 modules; the brotli column comes from Node's zlib.brotliCompressSync over the emitted files, which is what a CDN sends.
| Build | Raw | gzip | brotli |
|---|---|---|---|
| vite build | 603,289 | 180,604 | 151,886 |
| vite build --minify false | 1,543,569 | 329,054 | 259,318 |
| Reduction | 61% | 45% | 41% |
Minification wins 61% of the raw bytes but only 41% of the transferred bytes, because gzip and brotli already compress repeated identifiers. The raw figure still matters: it is what the engine parses and compiles after decompression. Compress at the edge, not in the build — every serious CDN negotiates brotli.
rollup-plugin-visualizer 2,424 (https://github.com/btd/rollup-plugin-visualizer 2,424 ) (MIT) turns the build metadata into a treemap of which module contributed which bytes. npm i -D rollup-plugin-visualizer, add visualizer({ filename: 'stats.html' }) to plugins, and open the report it writes into the project root; it works unchanged on Rolldown. Here the chart route owns 336 kB of the 603 kB bundle — the number that motivates the rest of this section.