Skip to content
This repository has been archived by the owner on Mar 22, 2023. It is now read-only.
/ toobig Public archive

Check file and directory sizes against a budget.


Notifications You must be signed in to change notification settings


Repository files navigation

toobig ⚖️

A simple utility to check file and directory sizes against a budget.

Screenshot of toobig in action

Table of contents


To install:

npm install toobig --save-dev

Or if you prefer using Yarn:

yarn add toobig --dev



By default, toobig will search up the directory tree for configuration in the following places:

  • a toobig property in package.json
  • a .toobigrc file in JSON or YAML format
  • a .toobigrc.json file
  • a .toobigrc.yaml, .toobigrc.yml, or .toobigrc.js file
  • a toobig.config.js file exporting a JS object

toobig continues to search up the directory tree, checking each of these places in each directory, until it finds some acceptable configuration (or hits the home directory).

Configuration looks like this:

  "budgets": {
    "dist/*.entry.js": "16KB",
    "dist/*.lazy.js": "128KB"

If you want to specify which reporters to use, it would look something like this:

  "budgets": {
    "dist/*.entry.js": "16KB",
    "dist/*.lazy.js": "128KB"
  "reporters": [
    ["table", { "template": "markdown" }],
    ["json", { "output": "toobig-report.json" }],
    ["junit", { "output": "toobig-report.xml" }],
    ["tap", { "output": "toobig-report.txt" }]


budgets is a map where the keys are glob expressions, and the values are their corresponding budget. If any file or directory that matches a glob expression is bigger than its specified budget, toobig will exit with a non-zero status.


reporters is an array of reporters that will process results.

Built-in reporters are:

  • line
  • table
  • summary
  • json
  • junit
  • tap


scan [options]

scan is the default command. It scans the current working directory to check for entries over budget, and reports them.

To get help:

toobig --help

To run:


To specify the location of the config file, instead of relying on the search logic described above:

toobig --config path/to/.toobigrc

To specify the reporters to use:

toobig --reporters json > toobig-report.json

To compare against the results of a previous run:

toobig --baselines toobig-previous.json --reporters table summary

load [options]

load allows you to load results from a previous run, and report them.

To get help:

toobig load --help

To run:

toobig load --results toobig-report.json

To specify the reporters to use:

toobig load --results toobig-report.json --reporters table summary

To compare against the results of a previous run:

toobig load --results toobig-report.json --baselines toobig-previous.json --reporters table summary



import { scanAndReport } from "toobig";

const { results, anyOverBudget } = await scanAndReport({
  budgets: {
    "dist/*.entry.js": "16KB",
    "dist/*.lazy.js": "128KB",
  reporters: [["json", { output: "toobig-report.json" }]],


import { loadAndReport } from "toobig";

const { results, anyOverBudget } = await loadAndReport({
  results: "toobig-report.json",
  reporters: [
    ["junit", { output: "toobig-report.xml" }],
    ["tap", { output: "toobig-report.txt" }],


To build:

npm run build

To continuously build on changes:

npm run watch:build


To run linting and unit tests:

npm test

To run just unit tests:

npm run test:unit

To continuously run unit tests on changes:

npm run watch:unit




This is free software, and may be redistributed under the terms specified in the LICENSE file.