Helm Repositories in Kubernetes
A friendly, step-by-step guide to the shelves where Helm charts are stored and shared: what a repository is, how Helm finds and downloads charts from it, the classic and modern kinds of repository, and how to publish, secure and troubleshoot them.
Imagine you want to cook a complicated dish for the first time. You could invent every step yourself, or you could visit a cookbook shop, pick a well-tested recipe, and follow it. The recipe lists the ingredients, the quantities and the steps, and if the author improves it next year, you can fetch the new edition. The shop keeps thousands of recipes, each with a title, an edition number and an index at the front so you can find them.
Deploying an application on Kubernetes is a lot like cooking a complicated dish. It needs many ingredients: a deployment, a service, configuration, storage, permissions and more. Helm packages these ingredients into a single recipe called a chart. A Helm repository is the cookbook shop where charts are stored, numbered and shared.
In this guide we build the idea from zero. Every new word is explained the first time it appears, and every big idea comes with an everyday comparison so it sticks. By the end you will know what a Helm repository is, how Helm talks to it, what kinds exist, how to choose between them, and how to keep them safe and healthy.
1What Are Helm Repositories?
To understand Helm repositories we first need a handful of simple words: package manager, chart, release, repository and version.
Package manager
A package manager is a tool that finds, downloads, installs, upgrades and removes software packages for you, so you never assemble them by hand. Helm is the package manager of Kubernetes.
Chart
A chart is a Helm package. It is a folder of templates and default settings that together describe everything an application needs on Kubernetes.
Release
A release is one installed copy of a chart in a cluster. You can install the same chart many times, and each installation is its own release with its own name.
Repository
A repository is a place that stores charts and publishes a catalogue of them, so that Helm can find and download any chart by name and version.
Version
Every chart has a version number that changes whenever the chart changes. Versions follow a three-part scheme, so that newer and older editions can be told apart.
Values
Values are the settings you can adjust when installing a chart, such as how many copies to run or which address to use. The chart ships sensible defaults.
So what exactly is a Helm repository?
A Helm repository is a simple server that holds two kinds of things: packaged charts, each stored as a compressed archive file, and one catalogue file that lists every chart and every version available. When you tell Helm about a repository, it downloads the catalogue and remembers it. From then on, you can search the catalogue, ask for a chart by name and version, and Helm fetches the right archive and installs it.
The important idea is that a repository is deliberately simple. It does not need special software. Anything that can serve static files over the web, such as a small web server, a storage bucket or a page-hosting service, can act as a repository as long as the catalogue and the archives are in the right places. This simplicity is why so many people and companies publish charts.
Think of a library. The books are the packaged charts. The card catalogue at the entrance is the index file. You do not walk the shelves looking for a title; you consult the catalogue, which tells you the exact book and edition, and then you fetch it. A repository is the whole library: shelves plus catalogue.
The three promises of a repository
Findable
Every chart and every version is listed in one catalogue that Helm can read and search.
Repeatable
A given chart name and version always refers to the same package, so an installation today matches one made next month.
Shareable
Anyone with access can download the same packages, so teams and companies share tested recipes instead of rewriting them.
A short history
The first generation of Helm shipped with a big shared repository of community charts, and for a while that shared shelf was the way most people found software. As the project grew, the community moved from one giant shared shelf to many independent repositories run by the projects themselves, and a discovery website appeared that lets people search across them. More recently, Helm gained the ability to store charts in the same kind of registries that already hold container images, a style called OCI. Today both the classic style and the registry style are in use, and this guide covers both.
A repository is not the same as a release, and not the same as a chart. The chart is the recipe, the release is the dish you cooked, and the repository is the cookbook shop. Keeping these three words separate removes most early confusion.
2The Problem Helm Repositories Solve
A chart is only useful if people can get it, trust it and get the same one every time. Repositories exist to make that easy.
Sharing recipes by hand is a mess
Suppose a team writes a chart for its application. How do the other teams get it? Emailing a folder is slow. Copying files between laptops means everybody ends up with a different edition. Storing charts inside each application’s code repository ties the recipe to one project and makes reuse awkward. And nobody can tell which edition is the newest, or which one is running in production.
Where do I get the chart?
Without a shared place, people hunt through chat messages and file shares for the latest copy.
Which edition is which?
Unnumbered copies drift apart, and nobody knows what is actually deployed.
Can I trust it?
A recipe from an unknown source could contain harmful instructions. Users need ways to know who published it and whether it was altered.
How do I upgrade?
Without a catalogue of editions, finding and applying an improved version means detective work.
Dependencies
Charts often need other charts, such as a database. Someone must say where those come from.
Access control
Internal charts should be visible to the company and no one else, while public charts should be open to everyone.
What people did before
| Old approach | How it worked | Why it hurt |
|---|---|---|
| Copy folders between people | Charts travelled as attachments or shared folders | Every copy drifted, and nobody knew which was current |
| Chart inside each application’s source repository | The recipe lived next to the code | Hard to reuse across projects, hard to version independently |
| Plain manifests pasted everywhere | Teams copied long configuration files and edited them | Copy-paste errors and no upgrade path |
| Download links in a wiki | A page listed links to archive files | Stale links, no catalogue, no search |
flowchart LR
subgraph W["Without a repository"]
A1["Team writes a chart"] --> B1["Copies sent by chat or email"]
B1 --> C1["Many different editions"]
C1 --> D1["Nobody knows what is deployed"]
end
subgraph V["With a repository"]
A2["Team packages a numbered chart"] --> B2["Publishes it to the repository"]
B2 --> C2["Everyone installs by name and version"]
C2 --> D2["Same result every time"]
end
Reading Figure 1
The left half shows the world without a repository. A team writes a chart and sends copies around by chat or email. Soon there are many editions, and nobody can say what is deployed. The right half shows the calmer world. The team packages the chart with a version number and publishes it to the repository. Everyone else installs it by name and version, and because a given version never changes, the result is the same for everyone, every time.
Picture a company where every branch office prints its own copy of the staff handbook, editing it as they like. Within a year there are twelve different handbooks. Now picture one official handbook, numbered by edition, kept in one central place. Everyone knows which edition applies. A Helm repository is that central place.
3Core Concepts You Need First
A few building blocks appear again and again around repositories. Learn them once and the rest will follow.
Chart archive
A chart packaged into one compressed file whose name includes the chart name and version. This is what gets stored and downloaded.
Index file
The catalogue of a classic repository. It lists each chart, each version, a short description, the download address and a fingerprint of the archive.
Chart version
The number of the chart’s own edition. It changes when the chart’s templates or defaults change.
Application version
The version of the software that the chart installs. It is informational and separate from the chart version.
Dependency
Another chart that this chart needs, listed together with the repository where it can be found.
Provenance file
A small signature file stored beside a chart archive, letting users verify who published it and that it was not changed.
Two versions, two meanings
Every chart carries two numbers that people mix up. The chart version describes the recipe itself. If you change a template, a default setting or the way the chart works, the chart version goes up. The application version describes the software the recipe installs, such as the release number of a web server. A new release of the software may come without any change to the recipe, and a new recipe may install the same software. Repositories index charts by chart version, because that is what identifies a unique package.
| Number | Describes | Changes when | Used by the repository as |
|---|---|---|---|
| Chart version | The packaged recipe | Templates, defaults or structure change | The unique identity of a package |
| Application version | The software being installed | The software releases a new edition | A descriptive label only |
Think of a cookbook. The edition number of the book is like the chart version. The variety of tomato the recipe uses is like the application version. The cookbook may be reprinted with new photographs while the tomato stays the same, or the tomato may change while the book stays the same. The shop shelves books by edition.
Semantic versioning in plain words
Chart versions follow a widely used three-part scheme: a major number, a minor number and a patch number, separated by dots. A patch increase means small fixes. A minor increase means new features that do not break existing users. A major increase means changes that may break existing users. When you ask for a chart, you can name an exact version or a range, such as any patch of a certain minor edition. Pinning an exact version gives repeatable installs; using ranges gives automatic fixes at the cost of change.
Classic repositories and registry-based storage
A classic repository is a web location with a catalogue file and archives beside it. A registry-based store keeps charts in the same kind of registry that holds container images. There is no single catalogue file; each chart is addressed by a registry address, a name and a version tag. Both styles work with the same Helm tool, but they behave differently for searching, authentication and publishing, as we will see.
A repository lists charts, not the container images those charts deploy. A chart only points at images that live in an image registry. Trusting a chart does not automatically mean trusting every image it pulls.
Discovery is not hosting
A public website exists where people search for charts published across many repositories. It is a discovery service: it indexes information about charts and points you to the repository that actually hosts them. It does not store your charts for you. When you add a repository you are talking to the real host, not to the discovery website.
4Architecture and Components
Several pieces cooperate between the person who writes a chart and the cluster that runs it. It helps to see who talks to whom.
flowchart TB
DEV["Chart author"] -->|"Packages a numbered chart"| ARC["Chart archive"]
ARC -->|"Published to"| REPO["Repository: archives plus catalogue or registry entries"]
CI["Publishing pipeline"] -->|"Updates the catalogue"| REPO
CLIENT["Helm command on a laptop or pipeline"] -->|"Adds and refreshes"| CACHE["Local cache of catalogues"]
CACHE -->|"Reads catalogue from"| REPO
CLIENT -->|"Downloads the chart archive"| REPO
CLIENT -->|"Renders templates and sends objects"| API["Kubernetes API server"]
API --> REL["Release records stored in the cluster"]
Reading Figure 2 piece by piece
Start at the top left. A chart author packages the chart into a numbered archive and publishes it to the repository, usually through an automated pipeline that also updates the catalogue. On the user’s side, the Helm command keeps a local cache of the catalogues of the repositories it knows. When the user asks for a chart, Helm consults the cache to find the right version, downloads that archive from the repository, renders the templates into ordinary Kubernetes objects, and sends them to the cluster’s API server. The cluster stores a record of the release so that later upgrades and rollbacks know what was installed.
Notice that the repository never talks to the cluster. It is a passive shelf. All the work happens in the Helm command on the user’s machine or in a pipeline. This fact has consequences for security and for network design that we explore later.
The parts, one by one
Repository host
The web server, storage bucket, registry or chart-hosting product that serves the catalogue and archives.
Catalogue
The index file, or in registry style the list of tags for each chart name, that tells Helm what exists.
Helm client
The command-line tool that searches, downloads, renders and installs. It runs on a person’s machine or in a pipeline, not in the cluster.
Local cache
A folder on the user’s machine holding downloaded catalogues and archives, so repeated searches are quick.
Publishing pipeline
An automated job that packages, signs, uploads and updates the catalogue when a chart changes.
Release records
Data stored in the cluster describing each release and its history, so upgrades and rollbacks work.
Where a repository can live
Because a classic repository only needs to serve files, it can live almost anywhere: a small web server you run, an object storage bucket behind a web address, a free page-hosting service attached to a code repository, or a dedicated chart-hosting product. Registry-based storage lives in a container registry, which many organisations already run. Cloud providers also offer managed registries that accept charts. The best home is usually wherever your team already manages access, backups and availability.
Think of a mail-order catalogue. The publisher prints the catalogue and stores goods in a warehouse. The customer reads the catalogue at home, orders by item number, and the goods arrive. The warehouse never visits the customer’s house. The repository is the warehouse and catalogue, the Helm command is the customer, and the cluster is the kitchen where the goods are used.
When something goes wrong, decide which stage failed: reaching the repository, finding the chart in the catalogue, downloading the archive, verifying it, or installing it in the cluster. Each stage has its own clues.
5How Helm Repositories Work Internally
Now let us open the box. We will look at what is inside the catalogue, and how Helm turns “install this chart” into a downloaded, checked package.
What the catalogue contains
The index file of a classic repository is a plain text document. For every chart name it lists every published version, and for each version it records the chart’s description, its chart and application versions, the date it was created, the list of dependencies, one or more download addresses and a digest. The digest is a fingerprint of the archive: a long string computed from the file’s contents, which changes completely if even one byte of the file changes. Helm uses it to check that the downloaded file is the one the catalogue promised.
| Catalogue entry | What it tells Helm | Why it matters |
|---|---|---|
| Chart name and version | Which package this entry describes | Identifies exactly one downloadable archive |
| Description and keywords | What the chart is for | Powers searching |
| Application version | Which software edition the chart installs | Helps users pick the right release |
| Download addresses | Where to fetch the archive | May be beside the catalogue or on another host |
| Digest | Fingerprint of the archive | Detects corruption and tampering in transit |
| Dependencies | Other charts needed | Lets Helm fetch them too |
| Creation date | When the version was published | Orders versions and supports audits |
flowchart TD
S["User asks to install a chart by name and version"] --> A{"Is the repository known and its catalogue cached?"}
A -->|"No"| R["Add repository and download the catalogue"]
A -->|"Yes"| B{"Does the catalogue contain that chart name?"}
R --> B
B -->|"No"| X1["Error: chart not found"]
B -->|"Yes"| C{"Does a version match the request or range?"}
C -->|"No"| X2["Error: no matching version"]
C -->|"Yes"| D["Download the archive from its address"]
D --> E{"Does the digest match the catalogue?"}
E -->|"No"| X3["Error: file changed or corrupted"]
E -->|"Yes"| F["Unpack, merge settings, render templates"]
F --> G["Send objects to the cluster and record the release"]
Reading Figure 3
The flow has several checkpoints, each a chance for a clear error. First, Helm needs a cached catalogue for the repository, and downloads it if it does not have one. Second, the chart name must appear in the catalogue. Third, a version must match what the user asked, either exactly or within a range; if not, Helm says no version matches. Fourth, Helm downloads the archive and compares its fingerprint to the catalogue’s digest, refusing files that differ. Only then does it unpack the chart, merge the default settings with the user’s own, turn the templates into ordinary Kubernetes objects and send them to the cluster.
How registry-based storage differs inside
In registry style there is no catalogue file. A chart is stored as an artefact in a registry, addressed by a registry host, a path and a tag that carries the version. When Helm is asked to install, it contacts the registry, authenticates if required, asks for the artefact with that tag, downloads its layers and unpacks them. The registry itself keeps a digest for each artefact, and tags can often be locked so that they never point at anything else. Because there is no index to refresh, there is no add or update step, and versions appear the moment they are pushed. The trade-off is discovery: to list versions you ask the registry for the tags of a given chart path, and to search across many charts you need a discovery site or the registry’s own interface.
This style also inherits everything registries already do well: fine-grained permissions, robot accounts for pipelines, replication between regions, scanning and signing support, and storage that is built for large numbers of artefacts.
Searching happens locally
When you search for a chart in your added repositories, Helm searches the cached catalogues on your own machine, not the servers. That makes searching fast and lets it work offline, and it also means results are only as fresh as your last refresh. Refreshing downloads the newest catalogues again. If a colleague published a new version an hour ago and you have not refreshed, your searches will not show it.
Adding a repository
Helm records a friendly local name and the repository’s web address in its configuration, and downloads the catalogue into the cache. The name is only local; two people may use different names for the same repository.
Refreshing
Helm downloads the catalogue of every added repository again and replaces the cached copies. Nothing changes in your cluster.
Installing or upgrading
Helm consults the cached catalogue, downloads the chosen archive, verifies it, renders it and applies it. The repository is only involved in the download step.
Resolving dependencies
A chart lists the charts it needs and where to find them. Helm downloads those into the chart’s own folder and records the exact versions in a lock file, so that later builds are repeatable.
Imagine ordering from a mail-order catalogue you keep at home. You look up an item in your own copy, so searching is quick, but if the publisher printed a new edition last week, your copy will not show it until you request the latest one. The item arrives with a sealed label, and you check that the label matches the catalogue before opening it.
The digest protects against corruption and accidental changes, but it comes from the same repository as the file. If an attacker controls the repository, they control both. Signing, discussed in Chapter 9, provides an independent check.
6Data Flow and Lifecycle
Let us follow one chart from the day it is written to the day a release using it is removed.
sequenceDiagram
participant A as Author
participant P as Pipeline
participant R as Repository
participant H as Helm client
participant C as Cluster
A->>P: Change chart and raise the version
P->>P: Check the chart and package it
P->>R: Upload archive and update catalogue
H->>R: Refresh catalogue
R-->>H: New catalogue
H->>R: Download archive for chosen version
R-->>H: Archive
H->>H: Verify digest and render templates
H->>C: Create or upgrade objects
C-->>H: Release recorded
H->>C: Later, roll back or uninstall
Reading Figure 4
The story begins with the author changing the chart and raising its version. A pipeline checks the chart, packages it, uploads the archive and updates the catalogue. Later, a user’s Helm client refreshes the catalogue, sees the new version, downloads the archive, checks the digest and renders the templates. It then creates or upgrades objects in the cluster, which records the release. If something goes wrong, the user can roll back to a previous revision or uninstall the release. Notice that the repository takes part only in the middle steps; it never touches the cluster.
Six stages of a chart’s life
Authored
The chart is written, tested and given a new version number.
Packaged
The chart folder is compressed into an archive, optionally signed.
Published
The archive is uploaded and the catalogue is updated so the new version can be found.
Discovered
Users refresh their catalogues and see the new version.
Installed or upgraded
Helm downloads, verifies and applies the chart, creating a numbered revision of the release.
Retired
Old versions may be deprecated, marked in the catalogue and eventually removed, though removal can break users who pinned them.
What if something goes wrong?
If the repository is unreachable when a user installs, the download fails, and installs from that repository stop, while releases already running in the cluster are unaffected. If a published version is faulty, the fix is to publish a new, higher version, not to change the old one. Changing a published version breaks the promise of repeatability, and causes digest mismatches for anyone who cached the old file. If a version is deleted from the repository, pipelines that pinned it will fail to build, which is why many teams mirror what they depend on.
When a catalogue is out of date
Users see old versions or cannot find a new chart. Refreshing fixes it. Automated pipelines should refresh before searching.
When a version must be withdrawn
Publish a fixed version, mark the bad one as deprecated where the repository allows it, and tell users. Deleting is a last resort.
When the repository moves
Users must change the address they added. Keeping old addresses redirecting for a while eases the move.
Think of a publisher who discovers a typo in a printed cookbook. They do not sneak into every kitchen to fix the copies. They print a corrected edition with a new number, and tell readers. The old edition remains on some shelves, clearly labelled as the earlier edition.
Treat every published chart version as immutable. If you need to change anything, raise the version. This one habit prevents a huge class of confusing, hard-to-reproduce problems.
7The Kinds of Repository
There are several ways to host charts. Each has its own personality, strengths and traps.
flowchart TB
subgraph A["Style A: Classic web repository"]
A1["Catalogue file plus archives on a web server or bucket"] --> A2["Helm adds it by address and caches the catalogue"]
end
subgraph B["Style B: Registry-based storage"]
B1["Charts stored in a container registry as artefacts"] --> B2["Helm addresses each chart by registry path and version"]
end
subgraph C["Style C: Chart-hosting product"]
C1["A product with an interface, access control and upload features"] --> C2["Speaks the classic style, the registry style, or both"]
end
subgraph D["Style D: Local folder or source repository"]
D1["Chart folder used directly from disk or from version control"] --> D2["No catalogue at all"]
end
Reading Figure 5
Each box shows a different way of hosting. In style A, a catalogue file and the archives sit on any web server or storage bucket, and Helm adds the address and caches the catalogue. In style B, charts are stored in a container registry beside your images, and each chart is addressed by a registry path and a version. In style C, a dedicated product adds a web interface, access control and upload features, and may speak both styles. In style D, there is no repository at all: you point Helm directly at a chart folder on disk or in version control.
Style A: the classic web repository
This is the original and simplest style. The publisher packages charts, places the archives on a web location, and runs a small step that builds or updates the catalogue file. Users add the address and can then search and install. It works with static hosting, which is cheap and reliable. Access control is limited to whatever the web host supports, such as basic credentials or signed addresses.
Very simple to host
Any static file host works. There is nothing special to install or operate.
Searchable catalogue
One file lists everything, so searching is quick and offline-friendly.
Catalogue grows
A huge catalogue is slow to download and refresh.
Basic access control
You depend on what the web host offers.
Style B: registry-based storage
Modern Helm can store charts in the same kind of registry that holds container images. Each chart name lives at a registry path, and each version is a tag. There is no catalogue file to refresh, so there is no add or update step; you refer to the chart’s full address when you install. Organisations that already run a registry get charts, authentication and permissions with the same system that holds their images. Listing and searching across a registry work differently, because there is no single catalogue.
Reuses your registry
One system, one login model and one set of permissions for images and charts.
Immutability options
Many registries can lock tags, protecting published versions from change.
Signing and scanning support
Registry ecosystems offer signing and vulnerability scanning tools.
No built-in search across charts
You need to know the chart’s address, or use a discovery service or registry interface.
Style C: chart-hosting products
Some products are built specifically for chart hosting or for general artefact hosting, including charts. They add a web interface, users and teams, access rules, upload features, replication between sites and security scanning. They usually speak the classic style, the registry style, or both, so that different users can use whichever their tooling prefers.
Style D: no repository at all
Helm can install straight from a chart folder or archive on disk, and pipelines often keep a chart in the same source repository as the application. This is fine for a chart used by one project. It stops scaling when many teams need the same chart, because there is no shared numbered catalogue.
Think of four ways to share recipes. Pinning them on a village noticeboard with an index card is the classic repository. Storing them in the town’s main library beside all the other books is registry-based storage. Subscribing to a recipe club with membership cards and a librarian is a hosting product. Keeping one recipe in your own kitchen drawer is a local folder. All work, and each suits a different community.
This article was written without live web research. Helm’s support for registries, the names of hosting products and the details of the commands have changed across releases, so confirm them in the official documentation for the Helm version you use.
8Side by Side, and Where to Host
A single table cannot decide for you, but it shows the shape of the differences at a glance.
| Question | Classic web repository | Registry-based storage | Hosting product | Local folder or source repository |
|---|---|---|---|---|
| Setup effort | Very low | Low if you already run a registry | Moderate | None |
| Catalogue | One index file | None, addressed by path and tag | Provided by the product | None |
| Refresh step needed | Yes | No | Depends on style used | No |
| Access control | Whatever the web host offers | The registry’s permissions | Rich, product-specific | File or source repository permissions |
| Searching | Local search of cached catalogues | Needs a discovery service or interface | Product interface | Not applicable |
| Immutability of versions | By discipline | Often lockable tags | Often configurable | By source control history |
| Best fit | Public sharing and small teams | Organisations with a registry already | Larger organisations needing governance | Single-project charts |
Testing a repository before you trust it
A short experiment beats a long debate. From a clean machine, add the repository, refresh, search for a known chart, list its versions and install one into a test cluster. Then try to break things on purpose. Request a version that does not exist and confirm the error is clear. Use an expired or wrong credential and confirm that access is refused. Rename nothing, yet republish the same version in a test copy and watch how caches and digests react. Verify a signed chart with the right key and again with the wrong one. Block the repository’s address and confirm that pipelines fail fast with a readable message. Keep the results in your team’s notes together with the Helm version, and rerun the same experiment after every upgrade of the host or the client. Ten minutes of testing here saves hours of guessing during a real incident.
Places charts commonly live
Static page hosting
A free hosting service attached to a code repository can serve a classic repository at no cost. Popular for open-source projects.
Object storage with a web address
A storage bucket serving files is a cheap, durable home for a classic repository, with access rules from your cloud.
Managed cloud registries
Major clouds offer registries that accept charts, with the cloud’s own identity and permissions.
Dedicated open-source servers
Small servers built just for charts, and general artefact platforms, are common in companies that self-host.
Project-run repositories
Many open-source projects publish official charts in their own repositories or registries. Check the project’s own documentation for the current address.
Artifact discovery websites
Search sites index charts from many hosts and point you to where each one lives.
Naming and organising charts
Good names make a repository easy to live with. Choose short, clear chart names that describe the application, not the team that wrote it. Keep one chart per application or per closely related bundle, and split unrelated things apart. Write a useful description and keywords in each chart’s metadata, because they power searching. Decide on a convention for repository names and stick to it, so that everyone adds the same repository under the same friendly name, which keeps documentation and pipelines consistent. Mark charts that are experimental or deprecated clearly, and explain in the description where users should go instead. A little discipline here keeps a catalogue readable when it holds hundreds of charts.
Public versus private
Public repositories are open to everyone, which suits open-source software and shared examples. Private repositories restrict access to a company or team, which suits internal applications and charts containing organisation-specific defaults. Many companies use both: they consume public charts from projects, often through a mirror they control, and publish their own charts to a private repository. Private hosts typically ask for credentials, which the Helm command can store or receive from a pipeline.
Choose the classic style when
You want the simplest possible hosting, you share charts publicly, or your tooling expects a catalogue file.
Choose registry-based storage when
You already run a registry, you want one permission model for images and charts, and your users can use full chart addresses.
Choose a hosting product when
You need a user interface, teams, replication, scanning and governance for many charts and many publishers.
Selling handmade goods, you might start with a simple market stall, move to a shelf in an existing shop, or open a fully staffed store. The stall is cheapest, the shelf reuses someone else’s shop, and the store gives you every service at the price of running it. Repositories grow the same way with your needs.
9Security of Helm Repositories
A chart is a set of instructions that will run with real permissions in your cluster. Trusting a repository means trusting the instructions it hands you.
What can go wrong
Malicious or careless charts
A chart can request powerful permissions, run privileged containers or open network access. Installing it grants those requests.
Tampered packages
An attacker who controls the repository or the network path could replace an archive with a changed one.
Version drift
Unpinned versions mean an install today and an install next month may deploy different things.
Vanishing dependencies
A repository that disappears or deletes a version can break every build that relied on it.
Leaked credentials
Repository passwords stored in files or logs give outsiders access to private charts.
Secrets in values
Passwords supplied as settings can end up in release records and pipeline logs.
Layers of protection
| Layer | What it protects against | How to apply it |
|---|---|---|
| Encrypted connections | Eavesdropping and tampering on the network | Use secure web addresses only and verify server certificates |
| Digest check | Corruption and accidental change | Helm does this automatically against the catalogue |
| Signing and verification | Packages altered or published by the wrong party | Sign charts, publish the public key, verify on install |
| Version pinning | Unexpected changes between installs | Name exact versions and keep dependency lock files |
| Mirroring | Vanishing or changed upstream charts | Copy approved charts to a repository you control |
| Access control | Unauthorised reading or publishing | Require credentials, use least-privilege accounts for publishing |
| Chart review and scanning | Dangerous requests inside charts | Render and inspect, run policy and security checks in pipelines |
| Cluster-side policy | Objects that break your rules | Admission policies that reject privileged or unsafe objects |
Who is allowed to publish?
Reading charts and publishing charts are very different powers. A person who can publish to a repository can put instructions in front of every consumer who trusts it, including automated pipelines that install without a human looking. Treat publish rights as a sensitive permission. Limit them to a small set of pipelines and a few named people, require review before anything is published, log every upload, and alert on unexpected changes to the catalogue. Consider separate repositories for stable and experimental charts, so that a trial upload can never reach production consumers by accident. Consumers should know exactly which repositories are approved, and pipelines should refuse to install from anywhere else.
Signing charts
A provenance file is a small signature stored beside a chart archive. The publisher signs the package with a private key, and users verify it with the matching public key. This proves two things: the package was signed by the holder of that key, and it has not changed since. Unlike the digest in the catalogue, the signature does not depend on trusting the repository host, so it defends against a compromised or malicious host. Signing only helps if users actually verify, and if they trust the right public keys. Registry ecosystems also offer their own signing approaches.
Trust the chart, then check the images
Verifying a chart tells you the recipe is genuine. It does not tell you the recipe is wise. A chart can point at container images from anywhere. A careful pipeline renders the chart into plain objects, inspects them for images, permissions and settings, scans the images, and only then allows installation. Many teams also enforce rules in the cluster itself, so that even an approved chart cannot create a privileged container by accident.
Buying medicine from a pharmacy involves several checks: a sealed package, a batch number, a pharmacist who knows the supplier, and a doctor who decides whether it suits you. The seal is the digest, the pharmacist’s stamp is the signature, and the doctor is your review and policy. Skipping any check leaves a gap.
Handling repository credentials
Private repositories need credentials, and credentials are secrets. Give each person or pipeline its own account, so that access can be revoked individually and every download is attributable. Prefer short-lived tokens issued through your company’s login system over long-lived passwords. Give pipelines that only install charts read-only access, and give the far smaller set of publishing pipelines write access. Keep credentials in a proper secrets system, and never in chart folders, values files, shell history or chat messages. Helm stores logins in a local configuration file on the machine where they were entered, so protect build machines, and clean up after temporary jobs. When someone leaves the team, remove their account, and rotate any shared credential they knew.
Hardening checklist
For consumers
Add only repositories you trust. Use secure addresses. Pin versions and keep lock files. Verify signatures where offered. Mirror what production depends on. Render and review charts before installing. Never pass real secrets as plain settings.
For publishers
Sign charts and publish the public key. Never change a published version. Restrict who can upload. Scan charts and images in the pipeline. Keep credentials in a proper secrets system. Keep old versions available for users who pinned them.
For platform teams
Offer an approved internal repository or registry. Block installs from unknown sources in pipelines. Enforce cluster policies. Monitor for charts and images that fall outside the approved set.
Adding a public repository and installing whatever it offers is like running a stranger’s script with administrator rights. Read what a chart will create before it reaches a real cluster.
10Choosing the Right Approach
There is no single best repository, only the best fit for your team, your tools and your risk. A few questions get you most of the way.
flowchart TD
A["Where should my charts live?"] --> B{"Is the chart used by only one project?"}
B -->|"Yes"| C["Keep it beside the application source"]
B -->|"No, many teams share it"| D{"Do I already run a container registry?"}
D -->|"Yes"| E["Registry-based storage"]
D -->|"No"| F{"Do I need a web interface, teams and governance?"}
F -->|"Yes"| G["Chart-hosting product"]
F -->|"No"| H["Classic web repository on static hosting"]
Reading Figure 6
Begin with the top question: is the chart used by only one project? If yes, keeping it beside the application’s source is simplest, and no repository is needed. If many teams share it, ask whether you already run a container registry. If yes, registry-based storage reuses what you have, including permissions. If not, ask whether you need a web interface, teams and governance. If yes, a chart-hosting product fits. If not, a classic repository on static hosting is the cheapest, simplest answer.
The questions behind the chart
Who consumes the charts?
Public users, other teams or one pipeline? Public sharing favours the classic style. Internal use favours whatever your organisation already runs.
How private must they be?
Private charts need reliable access control. Check what your host offers.
What tooling do we use?
Continuous delivery tools and dashboards differ in how well they support each style. Check before committing.
How many charts and versions?
Large catalogues favour registry-style storage or products over one huge index file.
What are our supply-chain rules?
Signing, scanning and mirroring needs steer you towards registries and products.
What can we operate?
A static host needs little care. A product needs upgrades, backups and monitoring.
An open-source project sharing charts
Static page hosting with a classic repository is free and understood by everyone. Signing the charts helps users trust them.
A company with a registry already
Store charts in the same registry, reuse its permissions, and enable tag immutability and scanning.
A large enterprise with governance rules
A hosting product with teams, approvals, replication between sites and audit trails, plus a mirror of approved public charts.
A single team with one chart
Keep the chart in the application’s source repository and package it in the pipeline. Add a repository only when a second team needs it.
Choosing where to store recipes is like choosing where to keep tools. A single tool for one job stays in the drawer next to it. Tools shared by the street go into a shared shed. A large workshop with many tradespeople needs a managed tool store with a register.
You can change hosts later. Charts are just archives, so moving them means uploading them somewhere new and telling users the new address. Start simple and grow when you need to.
11Performance and Availability
A repository is on the critical path of every installation and every pipeline that uses it. Its speed and uptime shape your delivery.
Where the time goes
Catalogue download
A large index file takes noticeable time to download on every refresh, in every pipeline run that refreshes.
Archive download
Charts are small compared with images, but hundreds of installs from a slow host add up.
Dependency resolution
Charts with many dependencies trigger many downloads from possibly several hosts.
Rendering and validation
Large charts with heavy templates take longer to render, especially in tight pipelines.
Authentication round trips
Token-based logins add a little delay to each connection to a private registry.
Distance
A repository far from your build machines is slower than one nearby.
Ways to go faster and stay safer
Cache catalogues and archives in your pipelines, and refresh them only when needed. Mirror the public charts you rely on into a repository near your builds. Keep catalogues small by splitting unrelated charts into separate repositories, or by moving to registry-style storage where there is no big index. Put a content delivery network or caching layer in front of busy public repositories. Vendor critical dependencies into your own chart folders when you need builds that never touch the outside world.
| Concern | Symptom | Typical remedy |
|---|---|---|
| Huge catalogue file | Slow refresh, slow pipelines | Split repositories, or use registry-style storage |
| Upstream repository outage | Builds fail at the download step | Mirror upstream charts and cache in pipelines |
| Deleted upstream version | Pinned builds stop working | Mirror, or vendor dependencies into your own chart |
| Slow distant host | Long install times in far-away regions | Replicate or cache near consumers |
| Rate limits on public hosts | Sporadic failures under heavy pipeline use | Use a mirror with your own credentials |
| Expired certificates | Sudden failures with certificate errors | Monitor and renew certificates on schedule |
Availability: what depends on the repository
Once a release is running, the repository is not needed for the application to keep working. The pods, services and configuration live in the cluster. What depends on the repository is the act of installing, upgrading and rebuilding. If the repository is down, you cannot deploy new versions or spin up new environments from scratch, which can be serious during an incident. Treat the repository as part of your delivery infrastructure and give it a matching level of reliability, backups and monitoring.
Running a mirror
A mirror is a repository you control that holds copies of the public charts you depend on. To run one, list the charts and versions your systems actually use, download the archives, scan and review them, and upload them to your own repository or registry under names your teams recognise. Point pipelines at the mirror instead of the public source. When a team needs a new chart or a new version, they request it, someone reviews it, and it is added to the mirror. This adds a small step to adoption and gives you a permanent, private copy, a place to enforce security rules, protection from upstream deletions and renames, and faster downloads from a nearby host. Automate the copying and the scanning so that the mirror is a convenience rather than a chore.
A restaurant can keep serving meals even if the cookbook shop is closed for a week. But if the chef needs a new recipe for tomorrow’s banquet, the closure matters a lot. The shop’s uptime matters most exactly when you need something new.
Do not let an emergency rollback depend on a public repository that you do not control. Keep the charts for your running releases in a place you own, so that recovery does not depend on someone else’s uptime.
12Advantages, Disadvantages and Trade-offs
Every choice buys something and costs something. Here is an honest ledger for using Helm repositories.
One place for shared recipes
Teams find, version and reuse charts instead of copying files.
Repeatable installs
A name and version identify one package, so environments match.
Simple hosting options
Static hosting or an existing registry is enough to get started.
Ecosystem
Thousands of ready-made charts save enormous effort on common software.
Supply-chain exposure
Third-party charts and repositories are dependencies you must vet.
Weak built-in access control
Classic repositories rely on the host for permissions.
Two styles to understand
Classic and registry-based storage behave differently for searching and refreshing.
Immutability by discipline
Nothing in the classic style stops a publisher from changing a published version.
Trade-offs in plain words
The first trade-off is simplicity against governance. A static classic repository is the simplest thing that works, but offers little control over who publishes or reads. A hosting product adds control and audit, at the price of running and paying for it.
The second is convenience against safety. Pulling charts straight from a public repository is quick. Mirroring, pinning and reviewing them is slower, and it protects you from upstream surprises. Most teams begin quick and add safety as their systems matter more.
The third is freshness against stability. Version ranges bring in fixes automatically, and they also bring in changes you did not test. Exact pins are stable and need someone to update them deliberately, which is why many teams pair pinning with automated update proposals that go through review.
The fourth is catalogue against registry. A single catalogue file makes discovery easy and grows unwieldy. Registry-style storage scales and integrates with your existing permissions, and makes browsing less convenient.
Borrowing from a friendly neighbour’s shelf is quick and free, but you can’t be sure the book will still be there next month. Buying your own copy costs more and is always on your shelf. Serious cooks keep their own copies of the recipes they depend on.
13Monitoring and Troubleshooting
When a chart cannot be found or downloaded, the message usually names the stage that failed. A calm routine finds the cause quickly.
Symptoms and where to look
| What you see | Likely meaning | Where to look first |
|---|---|---|
| Repository not found or catalogue cannot be downloaded | Wrong address, network problem or the host is down | The address, network access, the host’s status |
| Chart not found | Stale catalogue, wrong name or wrong repository name | Refresh the catalogue, check the chart name and the repository it belongs to |
| No matching version | The requested version or range does not exist | List the available versions, check version ranges and pre-release rules |
| Unauthorised or forbidden | Missing or expired credentials, or insufficient permissions | Login state, token expiry, account permissions |
| Certificate errors | Untrusted, expired or mismatched certificate | Certificate validity, trusted authorities, address spelling |
| Digest mismatch | The archive changed after publication, or was corrupted | Whether the version was republished, caches and proxies |
| Dependency cannot be resolved | The dependency’s repository is not added or unreachable | Dependency section of the chart, added repositories, lock file |
| Signature verification fails | Wrong key, missing signature file or a changed package | Public key used, presence of the provenance file |
A calm troubleshooting routine
First, check the address. A single wrong character in the repository address is the most common cause of failure. Second, check reachability from the same machine that failed, since pipeline machines often sit behind proxies or firewalls that laptops do not. Third, refresh the catalogue and list what versions Helm now sees. Fourth, check credentials for private hosts, including expiry. Fifth, check certificates. Sixth, compare the requested version or range with the versions actually listed, remembering that pre-release versions are usually hidden unless requested. Seventh, check the chart’s dependencies and their repositories. Eighth, look at the host itself: is it up, is disk space available, are rate limits being hit?
Address and network
Correct address, reachable from the failing machine, no blocking proxy.
Identity
Valid credentials with permission to read, or to publish.
Catalogue
Fresh cached catalogue that lists the chart and version.
Version
The requested version or range exists and matches the pre-release rules.
Integrity
Digest and signature match what the publisher intended.
Dependencies
Every required chart is reachable from its listed repository.
A second worked example: the private repository that stopped working
A pipeline that installed charts from a private repository begins failing with an unauthorised error. The address and network are fine, so the team turns to identity. The pipeline uses a token issued three months ago, and tokens expire after ninety days. Nobody had noticed because the token was created by a colleague who has since changed teams. The fix is a fresh token, stored in the secrets system and issued to a dedicated pipeline account, with an alert set for seven days before expiry. The team also writes down who owns the pipeline account. The lesson is that many repository outages are really credential lifecycles that nobody owned.
What to monitor all the time
Track the repository’s availability and response time, certificate expiry dates, storage capacity, failed authentication attempts, and pipeline failures at the download step. For publishers, track whether the catalogue is updated after each publish and whether uploads succeed. Alert on certificate expiry weeks in advance, because a lapsed certificate stops every installer at once. Synthetic checks that add the repository and fetch a small chart from a pipeline machine catch problems before real deployments do.
A worked example
A pipeline that installed a chart yesterday now fails with “chart not found”. Nothing in the pipeline changed. The team checks the address: correct. Reachability: fine. They refresh the catalogue and list versions, and find the chart is listed under a new name, because the project renamed it and published the new name in a new repository. The old repository still exists, with the old chart frozen. Updating the pipeline to the new repository and name fixes the failure, and the team adds a pin and a mirror to avoid future surprises.
When an order from a mail-order catalogue fails, a good customer service agent asks in order: is the address right, is the catalogue current, does this item number exist, is the payment valid, is the parcel damaged? Guessing at the parcel before checking the address wastes time.
Always try the failing step from the failing machine. Many repository problems are really network or credential problems that only exist inside a pipeline.
14Design Patterns and Anti-patterns
A pattern is a proven way of solving a repeated problem. An anti-pattern is a tempting habit that keeps causing pain.
Patterns worth adopting
Immutable versions
Never change a published version. Fix problems by publishing a higher one.
An internal mirror
Copy the public charts you use into a repository you control, and install from there.
Pin and lock
Name exact versions for charts and keep dependency lock files under review.
Automated publishing
A pipeline checks, packages, signs and publishes on every approved change, so publishing is never a manual step.
Library charts for shared logic
Put common template pieces in a reusable chart that other charts depend on, so every team’s chart behaves consistently.
Separate repositories by audience
Keep public, internal and experimental charts apart, with different access and different rules.
Anti-patterns to avoid
Overwriting a published version
Breaks repeatability and causes digest mismatches for anyone who cached the old file.
Installing the latest by default
Whatever is newest today is deployed tomorrow, untested, into production.
Depending directly on a public repository in production builds
An upstream outage or deletion halts your deployments.
Real secrets in values files
Passwords committed beside charts or passed as plain settings end up in history and release records.
One giant chart for everything
A single chart that deploys the whole company is impossible to version, review or roll back sensibly.
Unreviewed third-party charts
Installing without reading what will be created hands unknown instructions cluster permissions.
Context
A company has thirty teams, each writing charts kept in application repositories. Platform engineers want shared, versioned charts, signing, scanning and one permission model. The company already runs a container registry with strong access control.
Options considered
A classic repository on static hosting. A dedicated chart-hosting product. Registry-based storage in the existing registry.
Decision
Use registry-based storage in the existing registry, with locked tags, scanning and signing in the publishing pipeline. Mirror approved public charts into the same registry. Keep a single static classic repository only for a small set of legacy consumers.
Consequences
Teams share one login model for images and charts, and published versions cannot be changed. Discovery relies on an internal catalogue page maintained by the platform team, because there is no single index file. Legacy consumers are migrated over time.
A good publisher never quietly rewrites a printed book and keeps the same edition number. A good bookshop stocks its own copies of the books it depends on. A good chef reads a recipe through before starting. These habits are unglamorous, and they are the difference between a reliable kitchen and a chaotic one.
15Best Practices and Common Mistakes
This chapter gathers the advice into checklists you can keep beside your desk.
Best practices
Consuming charts
Add only trusted repositories. Use secure addresses. Pin exact versions and keep lock files. Verify signatures where offered. Render and review a chart before installing. Mirror what production depends on. Never pass real secrets as plain settings.
Publishing charts
Follow semantic versioning honestly: breaking changes deserve a major number. Never change a published version. Write clear descriptions and keep change notes. Sign your charts. Keep old versions available. Publish through an automated pipeline with restricted credentials.
Operating repositories
Back up the repository. Monitor availability, capacity and certificate expiry. Control who can publish. Keep the catalogue tidy and mark deprecated versions. Document the address, the login method and the support contact.
Pipelines
Cache downloads. Refresh catalogues before searching. Fail clearly when a chart cannot be fetched. Run policy and security checks on rendered output before applying it.
Common mistakes
| Mistake | Why it hurts | Better approach |
|---|---|---|
| Forgetting to refresh the catalogue | New versions and charts appear missing | Refresh before searching, especially in pipelines |
| Republishing the same version | Caches disagree and digests fail | Always raise the version |
| Confusing chart version with application version | Wrong package requested or published | Remember each has its own meaning |
| Using version ranges in production | Untested changes slip in | Pin exact versions and update deliberately |
| Storing repository passwords in shared files | Credentials leak | Use a secrets system and short-lived tokens |
| Ignoring certificate expiry | Sudden fleet-wide failures | Monitor and renew ahead of time |
| Trusting the digest alone | A compromised host can change both file and digest | Sign charts and verify signatures |
| No backup of the repository | Loss of published versions breaks pinned builds | Back up and test restores |
| Installing without reading the output | Surprises in permissions and images | Render, review and apply policy checks |
Managing dependencies well
Charts often depend on other charts, such as a database or a cache. Each dependency names a chart, a version or range, and the repository where it lives. Helm downloads dependencies into the chart’s own folder and records exact versions in a lock file. Treat the lock file like any other important file: commit it, review changes to it, and rebuild from it in pipelines so every build resolves the same versions. Prefer to keep dependency repositories inside your organisation, mirrored from upstream, so that a single external outage does not stop every build. And keep dependency trees shallow; a chart that depends on five charts that each depend on five more is hard to reason about and hard to secure.
A publishing checklist
Before publishing a new chart version, walk through a short list. Raise the version according to semantic versioning. Update the application version if the software edition changed. Lint the chart and render it against several sets of values. Run policy and security checks on the rendered output. Update the change notes. Package and sign. Upload the archive. Update the catalogue or push to the registry. Verify by adding the repository from a clean machine and installing the new version into a test cluster. Announce the release to users. Ten minutes on this list prevents most of the problems described in this article.
Whenever you review a change to a chart repository, ask three things: is the version raised, can consumers still reproduce their old installs, and who is allowed to publish this?
16Real-World Usage Stories
These generic stories, based on common patterns rather than any specific company, show how the ideas play out.
The chart that changed under everyone’s feet
A team republished a fix under the same version number. Pipelines that had cached the earlier archive suddenly disagreed with the fresh catalogue and failed with digest errors, while machines with no cache installed the new file. Two environments ran subtly different releases under the same version. The team adopted immutable versions, locked tags in their registry, and a rule that a fix always gets a new number.
The upstream repository that moved
A popular project moved its charts to a new location and renamed some of them. Pipelines that installed straight from the old address started failing on a Monday morning. The team that had mirrored and pinned its dependencies was unaffected. Everyone else learned an expensive lesson about depending on somebody else’s address.
The catalogue that took a minute to download
A company put every chart from every team into one classic repository. After a few years, the index file grew so large that every pipeline run spent a minute refreshing it. Splitting it into a few repositories by team, and moving the busiest charts to registry-style storage, cut the delay to seconds.
The credentials in the chat
A developer pasted the repository password into a team chat so a colleague could add the private repository. Weeks later, the password was still in the chat history, readable by dozens of people. The team moved to per-person, short-lived tokens issued through the company’s login system, and rotated the exposed password.
The chart that asked for too much
A third-party chart, installed without review, created a container running with full privileges and a broad cluster role. A routine review after a security scan caught it. The team began rendering every third-party chart in a pipeline, checking the output against policy, and blocking risky requests before they reached any cluster.
Three worked scenarios: thinking like a designer
Scenario one: a small team with one application
Three developers, one application, one chart. Keeping the chart beside the application source and packaging it in the pipeline is enough. No repository is needed until a second team wants the same chart. Adding a full hosting product now would be effort spent on a problem the team does not yet have.
Scenario two: an open-source project sharing a chart
The project wants anyone in the world to install its software easily. A classic repository on free static hosting fits, with signed charts, a clear version history and documentation of the address. The project also lists itself on a discovery website so users can find it by searching.
Scenario three: a regulated company with strict supply-chain rules
Auditors demand proof of who published what, and no dependency on outside hosts at deployment time. The company stores its charts in an internal registry with locked tags, signs everything, scans images and charts in the pipeline, mirrors approved public charts, and blocks installs from any other source. Deployments never touch the public internet.
A short mental checklist for a new repository
Before creating a repository, pause and walk through a short list. State who will consume the charts and how private they must be. Decide the style: classic, registry or product. Decide who may publish and how credentials will be issued. Decide how versions are numbered and that they are immutable. Decide how charts are signed and verified. Decide how public dependencies are mirrored. Decide how you will back up and monitor the repository. Decide how users discover charts. Write it all on one page. Ten minutes on this list prevents most of the problems in this article.
17Frequently Asked Questions
Quick answers to the questions beginners ask most often.
This post was written without live web research. Please verify version-sensitive details, such as registry support, command names and the current addresses of public repositories, against the official documentation for the Helm version you use.
18Summary and Key Takeaways
Let us close the loop, returning to the cookbook shop from the start of this article.
Just as a good cookbook shop keeps numbered editions, a clear catalogue and reliable stock, a Helm repository keeps numbered chart versions, a catalogue that Helm can read and packages that never change once published. Helm consults the catalogue, downloads the exact package you asked for, checks it, and installs it into your cluster, and the repository itself never touches the cluster.
You met the problem of sharing recipes by hand, the building blocks of charts, catalogues and versions, and the architecture that connects authors, repositories, the Helm client and the cluster. You followed a chart’s life, compared classic and registry-style hosting, and learned about security, performance, trade-offs, troubleshooting and the mistakes that trap teams most often.
Version drift and things to verify
The Helm ecosystem changes steadily. Registry support arrived after the original repository style, command details and defaults have shifted between releases, popular public repositories have moved, been renamed or been retired, and hosting products have come and gone. Because this article was written without live web research, treat version-specific statements as a starting point. Before relying on a feature in production, read the official documentation for the Helm version you use, try the behaviour in a test cluster, confirm the current address of any public repository, and record the versions in your team’s notes so upgrades prompt a re-check.
A small glossary to keep nearby
Chart
A Helm package describing everything an application needs on Kubernetes.
Release
One installed instance of a chart in a cluster.
Repository
A place that stores charts and lets Helm find and download them.
Index file
The catalogue of a classic repository, listing charts, versions and digests.
Digest
A fingerprint of a file that changes if the file changes at all.
Provenance file
A signature stored beside a chart, used to verify publisher and integrity.
Semantic versioning
A three-part numbering scheme where major, minor and patch numbers signal the size of a change.
Mirror
A copy of upstream charts kept in a repository you control.
Key takeaways
A repository is a passive shelf
It stores charts and a catalogue. The Helm client does the work and the repository never touches the cluster.
Versions are promises
A published name and version must always mean the same package. Never change one.
Two styles, one tool
Classic repositories use a catalogue file. Registry-based storage uses paths and tags. Choose by what you already run.
Trust needs layers
Secure connections, digests, signatures, pinning, mirrors and review work together.
Own what production depends on
Mirror upstream charts so outages and renames elsewhere cannot stop your deployments.
Troubleshoot in layers
Address, identity, catalogue, version, integrity and dependencies, in that order.
List the repositories your pipelines use today. For each one, note who owns it, whether you mirror it, and whether your versions are pinned. That small review shows you exactly where your delivery depends on someone else.