Skip to content
Calcrivo

Helm Package Size Calculator

Estimate the compressed .tgz size of a `helm package` build from its Chart.yaml, templates, values, and bundled CRDs.

Inputs

KB

Size of the chart metadata file.

KB

Combined size of all files under templates/.

KB

Size of values.yaml (and values.schema.json if present).

KB

Combined size of files under crds/, often the largest contributor for operator charts.

×

Fraction of original size remaining after gzip (YAML/text typically compresses to ~25–35%).

Compressed .tgz Size

19.95KB

Uncompressed Source Size

66.50KB

Space Saved by Compression

70.0%

Step by step

  1. Uncompressed = Chart.yaml + templates + values + CRDs

    0.5KB + 20KB + 6KB + 40KB

    = 66.50KB

  2. Compressed .tgz size

    66.50KB × 0.3

    = 19.95KB

How it works

`helm package` bundles Chart.yaml, the templates/ directory, values.yaml, and any crds/ into a single gzip-compressed tarball. Because all of these are text (YAML, JSON, Go templates), gzip typically compresses the archive down to roughly 25–35% of its uncompressed size, so estimating final .tgz size means summing the raw component sizes and then applying that compression ratio.

Formula

tgzSize = (chartYaml + templates + values + crds) × compressionRatio

Y
Chart.yaml size in KB
T
Templates size in KB
V
Values size in KB
D
CRDs size in KB
c
Gzip compression ratio (fraction remaining)
S
Compressed .tgz size in KB

Frequently Asked Questions

Why are CRDs often the largest part of a chart package?

CustomResourceDefinitions embed a full OpenAPI v3 schema for validation, which for complex CRDs (e.g. operators with many configurable fields) can run to hundreds of KB per CRD — far larger than a typical Deployment or Service template.

Does helm package compress CRDs differently from templates?

No — everything in the chart directory (crds/, templates/, values.yaml, Chart.yaml) is bundled into the same tar stream and gzip-compressed together as one .tgz.

How can I reduce final package size?

Trim unused fields from CRD schemas where you control them, remove verbose comments from templates before packaging, and avoid embedding large binary or base64 blobs directly in values.yaml.

You might also need