# flux create helmrelease: Deploy a Helm Chart

> flux create helmrelease deploys a Helm chart through Flux. Reference for --source, --chart, --values, --target-namespace, and the HelmRelease errors in CI.

Source: https://latchkey.dev/learn/command-reference/flux-create-helmrelease  
Updated: 2026-06-30

flux create helmrelease creates a HelmRelease that installs and upgrades a Helm chart from a source via Flux.

HelmRelease is how Flux manages Helm charts declaratively. create helmrelease wires a chart to a source and a target namespace.

## What it does

flux create helmrelease creates a HelmRelease custom resource that references a chart in a --source (a HelmRepository, GitRepository, or OCIRepository), installs it into --target-namespace, and applies value overrides from --values files. Flux's helm-controller reconciles installs and upgrades.

## Common usage

```Terminal
flux create helmrelease podinfo \
  --source=HelmRepository/podinfo \
  --chart=podinfo \
  --chart-version=">=6.0.0" \
  --target-namespace=apps \
  --values=./values-prod.yaml \
  --interval=10m
```

## Options

| Flag | What it does |
| --- | --- |
| --source <kind/name> | Chart source (HelmRepository/GitRepository/OCIRepository) |
| --chart <name> | Chart name or path within the source |
| --chart-version <range> | SemVer range to install |
| --target-namespace <ns> | Namespace to release into |
| --values <file> | Values file override (repeatable) |
| --interval <dur> | Reconcile interval |

## Common errors in CI

"✗ HelmRelease reconciliation failed: ... chart pull error: ... no chart name found" means the --chart or --source is wrong. "Helm install failed: ... timed out waiting for the condition" means workloads never became Ready. "values don't meet the specifications of the schema" means a values override violates the chart's values.schema.json.

## Using this in CI

A runner has no kubeconfig, no cached context, and no interactive auth. Every kubectl invocation in CI needs the context supplied explicitly, and most confusing CI failures here are the command running against the wrong cluster or no cluster at all.

```Terminal
# never rely on the ambient context on a runner
kubectl --context "$KUBE_CONTEXT" -n "$NAMESPACE" get pods

# confirm what you are actually connected to before mutating anything
kubectl config current-context
kubectl cluster-info

# fail fast instead of hanging on an unreachable API server
kubectl --request-timeout=30s get nodes
```

> Always set `--request-timeout` in CI. Without it an unreachable API server hangs until the job times out, which turns a thirty-second failure into a twenty-minute one.

## FAQ

### flux create helmrelease: Deploy a Helm Chart?

HelmRelease is how Flux manages Helm charts declaratively. create helmrelease wires a chart to a source and a target namespace.

### What it does?

flux create helmrelease creates a HelmRelease custom resource that references a chart in a --source (a HelmRepository, GitRepository, or OCIRepository), installs it into --target-namespace, and applies value overrides from --values files. Flux's helm-controller reconciles installs and upgrades.

### Common errors in CI?

"✗ HelmRelease reconciliation failed: ... chart pull error: ... no chart name found" means the --chart or --source is wrong. "Helm install failed: ... timed out waiting for the condition" means workloads never became Ready.

---

Latchkey runs CI/CD that repairs its own failures. Agent entry points: https://latchkey.dev/agent.txt, https://latchkey.dev/openapi.json, https://latchkey.dev/llms.txt
