> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/artifact-registry/new-to-artifact-registry/quickstart/helm-http-quickstart.md).

# Helm HTTP

{% @harness-package-selector/package-selector platforms="%5B%7B%22label%22%3A%22Docker%22%2C%22slug%22%3A%22docker%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fdocker-quickstart%22%7D%2C%7B%22label%22%3A%22Helm%22%2C%22slug%22%3A%22helm%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fhelm-quickstart%22%7D%2C%7B%22label%22%3A%22Helm%20HTTP%22%2C%22slug%22%3A%22helm-http%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fhelm-http-quickstart%22%7D%2C%7B%22label%22%3A%22Generic%22%2C%22slug%22%3A%22generic%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fgeneric-quickstart%22%7D%2C%7B%22label%22%3A%22Raw%20File%22%2C%22slug%22%3A%22raw-file%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fraw-file-quickstart%22%7D%2C%7B%22label%22%3A%22Maven%22%2C%22slug%22%3A%22maven%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fmaven-quickstart%22%7D%2C%7B%22label%22%3A%22Python%22%2C%22slug%22%3A%22python%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fpython-quickstart%22%7D%2C%7B%22label%22%3A%22NPM%22%2C%22slug%22%3A%22npm%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fnpm-quickstart%22%7D%2C%7B%22label%22%3A%22Nuget%22%2C%22slug%22%3A%22nuget%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fnuget-quickstart%22%7D%2C%7B%22label%22%3A%22RPM%22%2C%22slug%22%3A%22rpm%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Frpm-quickstart%22%7D%2C%7B%22label%22%3A%22Debian%22%2C%22slug%22%3A%22debian%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fdebian-quickstart%22%7D%2C%7B%22label%22%3A%22Alpine%22%2C%22slug%22%3A%22alpine%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Falpine-quickstart%22%7D%2C%7B%22label%22%3A%22Wolfi%22%2C%22slug%22%3A%22wolfi%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fwolfi-quickstart%22%7D%2C%7B%22label%22%3A%22Cargo%22%2C%22slug%22%3A%22cargo%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fcargo-quickstart%22%7D%2C%7B%22label%22%3A%22Conan%22%2C%22slug%22%3A%22conan%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fconan-quickstart%22%7D%2C%7B%22label%22%3A%22Go%22%2C%22slug%22%3A%22go%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fgo-quickstart%22%7D%2C%7B%22label%22%3A%22Hugging%20Face%22%2C%22slug%22%3A%22hugging-face%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fhugging-face-quickstart%22%7D%2C%7B%22label%22%3A%22Conda%22%2C%22slug%22%3A%22conda%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fconda-quickstart%22%7D%2C%7B%22label%22%3A%22Dart%22%2C%22slug%22%3A%22dart%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fdart-quickstart%22%7D%2C%7B%22label%22%3A%22PHP%20Composer%22%2C%22slug%22%3A%22php-composer%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fphp-composer-quickstart%22%7D%2C%7B%22label%22%3A%22Swift%22%2C%22slug%22%3A%22swift%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fswift-quickstart%22%7D%2C%7B%22label%22%3A%22Puppet%22%2C%22slug%22%3A%22puppet%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fpuppet-quickstart%22%7D%2C%7B%22label%22%3A%22Terraform%22%2C%22slug%22%3A%22terraform%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fterraform-quickstart%22%7D%2C%7B%22label%22%3A%22R%20(CRAN)%22%2C%22slug%22%3A%22r-cran%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fr-cran-quickstart%22%7D%2C%7B%22label%22%3A%22RubyGems%22%2C%22slug%22%3A%22rubygems%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Frubygems-quickstart%22%7D%5D" selectedPlatform="helm-http" %}

Use a **Helm HTTP** registry to host, push, and pull Helm charts using the classic `helm repo add` / `helm pull` workflow. Harness Artifact Registry supports the HTTP-based Helm chart repository protocol and optional upstream proxying from external chart repositories.

***

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

* **Helm CLI:** Installed and configured on your local machine. Go to the [Helm install guide](https://helm.sh/docs/intro/install/) to get started.
* **Harness permissions:** Access to create registries and connectors in your Harness project. Go to [RBAC in Harness](/harness-ai/use-harness-platform/platform-access-control.md) to configure roles.

***

### Create a Helm HTTP Artifact Registry <a href="#create-a-helm-http-artifact-registry" id="create-a-helm-http-artifact-registry"></a>

{% tabs %}
{% tab title="Interactive Guide" %}
Coming soon.
{% endtab %}

{% tab title="Step-by-Step" %}

1. Navigate to the Artifact Registry module in your Harness project.
2. Click on **New Artifact Registry**.
3. In the Registry Type list, select **Helm HTTP Registry**.
4. Provide a Registry Name.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>REGISTRY NAME REQUIREMENTS</strong></p><p>This registry name must start with a letter and can only contain lowercase alphanumerics, <code>_</code>, <code>.</code> and <code>-</code>, and <strong>must be unique to your Harness Account</strong>.</p></div>
5. Optionally, add a Description and Labels for better organization.
6. Choose visibility between **Public** and **Private**.
7. Click **Create Registry** to finalize.
   {% endtab %}
   {% endtabs %}

{% hint style="info" %}
**HELM HTTP VS OCI HELM**

Helm HTTP registries use the classic HTTP-based Helm chart repository protocol (`index.yaml` + `.tgz` archives served over HTTP). This is separate from the existing OCI Helm registry type, which uses the `helm push oci://` protocol. Choose Helm HTTP when your workflow uses `helm repo add` and `helm pull` commands.
{% endhint %}

***

### Configure an Upstream Proxy (Optional) <a href="#configure-an-upstream-proxy-optional" id="configure-an-upstream-proxy-optional"></a>

An upstream proxy allows your registry to fetch Helm charts from external chart repositories (such as the Prometheus Community Helm charts or other public Helm repositories that still publish over HTTP) if they are not available locally.

{% tabs %}
{% tab title="Interactive Guide" %}
Coming soon.
{% endtab %}

{% tab title="Step-by-Step" %}

#### Create an upstream proxy <a href="#create-an-upstream-proxy" id="create-an-upstream-proxy"></a>

1. In the Artifact Registry module, click the dropdown next to **New Artifact Registry** and select **Upstream Proxy**.
2. Choose **Helm HTTP Registry** as the proxy type.
3. Enter an upstream proxy name.
4. Enter your remote chart repository URL (for example, `https://prometheus-community.github.io/helm-charts`).
5. Choose your Authentication method (`Anonymous` by default).
6. Click **Create Proxy** to establish the connection.

#### Configure the upstream proxy in your registry <a href="#configure-the-upstream-proxy-in-your-registry" id="configure-the-upstream-proxy-in-your-registry"></a>

1. In the Artifact Registry module, select an existing Artifact Registry.
2. Select the **Configuration** tab.
3. Under **Advanced (Optional)**, select **Configure Upstream**.
4. Select from the list of compatible proxies to add them to your registry.
5. Click **Save** to save the configuration.
   {% endtab %}
   {% endtabs %}

{% hint style="info" %}
**UPSTREAM PROXY BEHAVIOR**

When you pull a chart through the upstream proxy, it fetches the chart from the configured external repository and caches it locally. Subsequent pulls for the same chart version are served from the local cache.
{% endhint %}

***

### Set up the client <a href="#set-up-the-client" id="set-up-the-client"></a>

With your Helm HTTP registry created, you can now authenticate and interact with your Harness registry using the Helm CLI.

#### 1. Configure authentication <a href="#id-1-configure-authentication" id="id-1-configure-authentication"></a>

In your Harness Helm HTTP Artifact Registry, click **Setup Client** and then **Generate Token** to generate an identity token for authentication.

#### 2. Add the Helm repository <a href="#id-2-add-the-helm-repository" id="id-2-add-the-helm-repository"></a>

Add the Helm repository with authentication:

```bash
helm repo add <REGISTRY_NAME> https://pkg.harness.io/pkg/<ACCOUNT_ID>/<REGISTRY_NAME>/helm-http --username <USERNAME> --password <TOKEN>
```

#### 3. Install a chart <a href="#id-3-install-a-chart" id="id-3-install-a-chart"></a>

Update the local Helm repository cache:

```bash
helm repo update <REGISTRY_NAME>
```

Pull a specific chart version:

```bash
helm pull <REGISTRY_NAME>/<ARTIFACT> --version <VERSION>
```

#### 4. Push a chart <a href="#id-4-push-a-chart" id="id-4-push-a-chart"></a>

Push a chart archive to the registry:

```bash
curl -u <USERNAME>:<TOKEN> -X PUT --data-binary @<ARTIFACT>-<VERSION>.tgz https://pkg.harness.io/pkg/<ACCOUNT_ID>/<REGISTRY_NAME>/files/<ARTIFACT>-<VERSION>.tgz
```

{% hint style="warning" %}
**FILENAME MUST MATCH THE CHART METADATA**

The `<ARTIFACT>` and `<VERSION>` in the `.tgz` filename must exactly match the `name` and `version` fields in the `Chart.yaml` packaged inside the archive. If they do not match, the push is rejected. For example, if `Chart.yaml` contains `name: my-chart` and `version: 1.2.3`, the file must be named `my-chart-1.2.3.tgz` and the URL path must end with `/files/my-chart-1.2.3.tgz`.
{% endhint %}

Optionally, push a provenance file for the chart (the chart `.tgz` must be pushed first):

```bash
curl -u <USERNAME>:<TOKEN> -X PUT --data-binary @<ARTIFACT>-<VERSION>.tgz.prov https://pkg.harness.io/pkg/<ACCOUNT_ID>/<REGISTRY_NAME>/files/<ARTIFACT>-<VERSION>.tgz.prov
```
