Hands-on with Helm: migrating and packaging charts to OCI registries

Helm has been the de facto package manager for Kubernetes for years. But the way we distribute charts is changing: the community is moving from index.yaml-style chart repositories (the old “charts.example.com”) toward storing charts as OCI artifacts in container registries. That shift affects how you package, sign, host, and deploy charts — and it’s a great opportunity to simplify CI/CD and reuse the same registry tooling you already have for container images. In this hands-on guide I’ll explain why the change matters, show the practical Helm commands and a simple migration workflow, and walk through a few gotchas and best practices to keep your releases sane. (helm.sh)

Why OCI for Helm charts?

A few clear reasons have driven the move:

Helm’s OCI story became production-ready when OCI support graduated out of experimental mode in Helm 3.8.0; that’s the baseline you should target for the features and behaviors below. (helm.sh)

Quick primer: core Helm OCI commands

Workflow in OCI mode is straightforward and mirrors what you already do for images.

A few practical notes from the Helm docs: the oci:// prefix is required for registry references; chart names map to the repository basename and chart versions map to the OCI tag. Some registries require you to create the repository/namespace ahead of time. (helm.sh)

A simple migration recipe

If you have existing chart archives or an index.yaml-based repo, the basic migration steps look like this:

  1. Ensure your toolchain uses Helm >= 3.8.
  2. Build the packaged chart:
    helm package ./mychart
    
  3. Authenticate to your chosen registry (Docker Hub, GHCR, ACR, Artifact Registry, Harbor, etc.).
  4. Push the chart:
    helm push mychart-0.1.0.tgz oci://$REGISTRY/$NAMESPACE/helm-charts
    
  5. Update deployment pipelines / GitOps manifests to point to the OCI reference (e.g. oci://ghcr.io/myorg/helm-charts/mychart –version 0.1.0), or use helm pull/install as above.

If you need to migrate many charts, a small script that iterates through tgz files and does helm push is usually sufficient. For repositories that still expect index.yaml, you can keep an index façade for backward compatibility during the transition; some maintainers publish an index as well as OCI artifacts for this reason. Bitnami, for instance, announced an OCI-first default while keeping backward compatibility mechanisms during the transition. (community.broadcom.com)

Real-world example: several projects (including secureCodeBox and many cloud providers) have published migration guides that show simple helm package + helm push flows, and explain how existing chart consumers can switch to the OCI reference. If you run into registry quirks (e.g., namespace creation or permissions), consult the provider docs — the behavior varies. (securecodebox.io)

Provenance and signing: trust matters

One common worry is “how do I verify chart provenance in OCI?” Helm’s traditional GPG-based provenance files (.prov) still exist, but the community is also adopting Sigstore tooling (cosign, Rekor) to sign and record tamper-evident attestations. The community-maintained helm-sigstore plugin lets you upload and verify charts against Sigstore’s transparency logs, integrating chart signing into modern supply-chain workflows. Additionally, policy controllers can enforce signature requirements at admission time. If you need strict attestations in your cluster, pair signed OCI charts with a policy controller that validates signatures before admission. (github.com)

CI/CD notes: where to plug this in

Common gotchas and caveats

Best practices for packaging and releases

Real-world signals

The migration trend is more than theoretical. Bitnami announced moving charts to default to OCI distribution and cloud vendors (including Azure) have been removing legacy Helm repository support in favor of OCI artifacts. Open-source projects and smaller vendors are following suit because registry infrastructure scales better and reduces operational blur between image and chart management. If you manage enterprise or public charts, this is a good time to evaluate migration windows and compatibility layers for your users. (github.com)

Final thoughts

Switching to OCI for Helm charts is largely evolutionary, not revolutionary: the packaging steps remain familiar (helm package) while distribution benefits from the durability, access controls, and ecosystem of container registries. If you standardize on OCI artifacts, you can consolidate artifact storage, reuse the same scanning and RBAC tooling, and embrace modern signing and verification workflows. The practical steps are simple — package, login, push — but the real value comes from aligning chart delivery with the rest of your supply chain tooling. (helm.sh)

References (selected)