buildstats.io

Bundle size tools for GitHub Actions compared

Eight tools that check JavaScript bundle size in CI, compared on history, pull request comments, hosting and price. Four keep no history; one charges from $29/month; buildstats is free for public repos.

The tools split into three groups. Diff-only actions build the pull request and its base branch in the runner and compare the two, which needs no account but stores nothing. Hosted services keep every build and draw charts, in exchange for an account, a bundler plugin and sometimes a bill. buildstats sits in between: your workflow measures the files, the Action pushes the numbers, and the history, chart, badge and pull request comment come from that.

Side by side

ToolStores historyPull request outputChartSetupPrice
buildstatsYes, 50,000 points per metricComment with deltas, optional max-regression gateSVG in README, light and darkOne Action step, no account for public reposFree public, $9/month per owner private
size-limit + size-limit-actionNoComment via andresz1/size-limit-actionNonpm package, config file, action builds base and PRFree, MIT
compressed-size-actionNoComment with gzip or brotli deltasNoOne Action step, builds base and PRFree, MIT
bundlewatchLatest value per branch onlyCommit statusNonpm package, GitHub token from bundlewatch serviceFree hosted service, self-host option
bundlesizeNoCommit statusNonpm package, GitHub tokenFree, MIT, maintenance mode
BundleMonYes, in its own backendComment and check via GitHub AppYes, on app.bundlemon.devnpm package, project id and API keyFree hosted with retention limits, self-host with MongoDB
RelativeCIYes, 12 months on Free, 3 years on ProComment, status and checkYesBundler plugin and agentFree 100 jobs/month, Pro from $29/month
bundle-statsNo, local HTML reportNoNo, static reportBundler pluginFree, MIT

size-limit

size-limit (Evil Martians, 14.1.0 released September 2026, about 7,000 GitHub stars) measures the real cost of a JavaScript library: it bundles the entry with webpack or esbuild, applies tree shaking and reports the brotli size, optionally with an estimated loading time on slow 3G and a running time on a low-end phone. Limits live in package.json and the CLI fails when one is exceeded. The pull request comment comes from a separate project, andresz1/size-limit-action, which runs size-limit on the pull request and on the base ref and diffs the two JSON outputs; its last release is 1.8.0 from April 2024. Nothing is stored anywhere, so there is no chart and no answer to when a number changed.

compressed-size-action

preactjs/compressed-size-action (2.10.0, June 2026) is the simplest pull request diff: one Action step that builds the target branch and the pull request in the runner, gzips or brotli-compresses the files matching a glob and posts one comment with the deltas. It uploads nothing and needs no account. It cannot comment on pull requests from forks and it keeps no history.

bundlewatch and bundlesize

bundlewatch (0.4.2, April 2026) is the maintained successor to bundlesize, whose last release is 0.18.2 from March 2024 and whose own successor describes it as being in maintenance mode. Both check gzip sizes against maxSize thresholds and report through a GitHub commit status rather than a comment. bundlewatch stores the latest value per branch in its hosted service so a pull request can be compared with its base; a history view is on its roadmap but not shipped. Both need a GitHub token issued through the service.

BundleMon

BundleMon (3.1.0, October 2024, still actively developed) keeps history in its own backend and draws charts. The free hosted service deletes pull request records after 14 days, thins branch history to one record per day after 60 days and deletes branches without new commits after 180 days. Self-hosting needs the Docker image and a MongoDB. The GitHub App posts a check, a commit status and a detailed pull request comment, and it supports fork pull requests.

RelativeCI and bundle-stats

bundle-stats (4.22.3, August 2026) generates a local HTML report with assets, modules, packages and duplicate-package insights, and can compare two builds. History, pull request comments and monitoring come from RelativeCI, its hosted service: Free has 100 jobs and 50 MiB of stats per month with 12 months of retention, open source projects get 500 jobs and 250 MiB, and Pro starts at $29/month for 1,000 jobs with 3 years of retention. It supports webpack, Vite, Rspack, Rollup and Rolldown through a bundler plugin.

buildstats

buildstats stores numbers, not bundler stats. Your workflow builds the project the way it already does, measures the output with wc -c, gzip or brotli, and passes the values to the bitgate/buildstats@v1 Action. Every push to the default branch becomes a point in a history of up to 50,000 per metric, every pull request gets one comment with the delta against the base branch, and max-regression fails the step when a bundle grows more than the percentage you allow. The chart is an SVG you embed in the README, in light and dark. Public repositories are free with no account; private repositories are $9/month per GitHub user or organization after a 14-day trial. Because it stores plain numbers it works for any bundler, and for the CSS, the image sprite, the WebAssembly module and the test count in the same project. The bundle size page has the workflow.

Which one to pick

  • A pull request diff and nothing else: compressed-size-action, or size-limit if you want tree-shaken cost and time estimates.
  • A hard limit as a commit status: bundlewatch.
  • Module-level analysis of why a bundle grew: bundle-stats, or webpack-bundle-analyzer's treemap.
  • History and a chart with the least setup: buildstats, free for public repositories.
  • History with per-module breakdowns and budget for a hosted service: RelativeCI.
  • History you host yourself: BundleMon with your own MongoDB.

Questions

Which bundle size tools keep history?

BundleMon, RelativeCI and buildstats. size-limit, compressed-size-action, bundlesize and bundle-stats compute a diff per run and store nothing. bundlewatch stores only the latest value per branch.

Which ones post a pull request comment?

compressed-size-action, size-limit through size-limit-action, BundleMon, RelativeCI and buildstats. bundlewatch and bundlesize post a commit status instead.

Which are free for open source?

All of them have a free path. size-limit, compressed-size-action, bundlesize, bundlewatch and bundle-stats are MIT and free everywhere. BundleMon's hosted service is free with retention limits. RelativeCI is free for public repositories up to 500 jobs a month. buildstats is free for public repositories with the same limits as the paid plan.

Which ones need a bundler plugin?

RelativeCI and bundle-stats read bundler stats, so they need a webpack, Vite, Rspack, Rollup or Rolldown plugin. The others measure built files and work with any bundler.

Is Packtracker still an option?

No. packtracker.io and its app and docs hosts were unreachable in October 2026 and the plugin's last commit is from 2022.

Last updated 2026-10-07.