# Bundle size

Every import of `@northguild/gmt` carries `@js-temporal/polyfill`, so the polyfill row is the floor under every other row: no import is smaller than it. The last four columns of the other rows show what is left once the floor is taken away.

The `@northguild/gmt` row is the whole package, all 733 public functions, which is the figure a package-size service such as Bundlephobia reports. A single function from a module costs far less than that row.

| Import | Minified | Gzipped | Minified over the polyfill | Gzipped over the polyfill | Budget (minified) |
| --- | --- | --- | --- | --- | --- |
| `import * as gmt from "@northguild/gmt"` | 567.9 kB | 155.1 kB | 415.4 kB | 110.9 kB | 567.9 kB |
| `import { Temporal } from "@js-temporal/polyfill"` | 152.5 kB | 44.2 kB | floor | floor | none |
| `import { isValidDate } from "@northguild/gmt/plain/validate"` | 153.4 kB | 44.6 kB | 0.8 kB | 0.4 kB | 154.9 kB |
| `import { formatDate } from "@northguild/gmt/plain/format"` | 156.9 kB | 45.7 kB | 4.3 kB | 1.5 kB | 158.3 kB |
| `import { businessDaysBetween } from "@northguild/gmt/calendar/business"` | 155.9 kB | 45.6 kB | 3.4 kB | 1.4 kB | 157.5 kB |
| `import { addBusinessDays } from "@northguild/gmt/plain/calculate"` | 157.0 kB | 46.0 kB | 4.5 kB | 1.8 kB | 158.6 kB |
| `import { chargeableDays } from "@northguild/gmt/intermodal/calculate"` | 202.5 kB | 60.0 kB | 50.0 kB | 15.9 kB | 202.6 kB |
| `import { operatingTimeBetween } from "@northguild/gmt/calendar/hours"` | 210.4 kB | 62.2 kB | 57.8 kB | 18.0 kB | 210.4 kB |
| `import { dutyViolations } from "@northguild/gmt/workforce/calculate"` | 234.7 kB | 70.0 kB | 82.2 kB | 25.8 kB | 234.8 kB |

Sizes come from bundling `packages/gmt/src` with esbuild, minified, as ES modules for a neutral platform. 1 kB is 1,000 bytes. The minified size of each row is gated: the repository's check fails when it passes the budget in the last column, and a budget changes only by a reviewed edit. Gzipped sizes are reported and never gated, because they vary with the version of zlib.

The polyfill stays until a stable Safari ships `Temporal` and the weekly run against native `Temporal` passes on Node 26, Chromium, Firefox and WebKit for 12 weeks running ([#316](https://github.com/northguild/gmt/issues/316)).
