Declaratively deploy your Kubernetes manifests, Kustomize configs, and Charts as Helm releases in one shot
Go to file
Dominik Schmidt ad45f0a1b9 feat: add dir= selector for path-based release filtering and traversal skip
Introduce a new selector key `dir=<path>` to the -l/--selector flag with two
effects: it filters releases by the directory of their defining helmfile
relative to the root helmfile (using directory-prefix matching, so
dir=apps/foo matches both apps/foo and apps/foo/sub), and it short-circuits
sub-helmfile traversal when paired with positive dir= constraints, so
non-matching branches in the helmfiles: tree are not parsed, templated, or
fetched.

The motivation is consuming aggregator-style upstreams that the operator
does not control (opendesk being the immediate example), where the user
cannot restructure the helmfile layout but still wants to act on a subset.

The dir label is auto-populated at filter time only; user-facing label
output is unchanged. The label key "dir" is reserved at state load.
Selectors that escape the root via .. or absolute paths, and the bare ".",
are rejected at parse time.

Signed-off-by: Dominik Schmidt <dev@dominik-schmidt.de>
2026-05-22 17:20:52 +02:00
.github bump helm-diff to v3.15.7 (#2591) 2026-05-17 22:19:57 +08:00
cmd feat: add dir= selector for path-based release filtering and traversal skip 2026-05-22 17:20:52 +02:00
docs feat: add dir= selector for path-based release filtering and traversal skip 2026-05-22 17:20:52 +02:00
examples fix: configure kubedog rate limiter to prevent context cancellation (#2446) 2026-03-03 19:24:28 +08:00
hack
logo Add logo as .png and .ai (Adobe Illustrator) files (#263) 2022-08-24 07:37:52 +09:00
pkg feat: add dir= selector for path-based release filtering and traversal skip 2026-05-22 17:20:52 +02:00
skills/helmfile docs: update helmfile skill to reflect v1.1 documentation (#2577) 2026-05-04 14:20:17 +08:00
test feat: add defaultInherit for automatic release template inheritance (#2600) 2026-05-20 18:21:03 +08:00
.dockerignore rework dockerfiles (#519) 2022-11-25 10:14:27 +09:00
.editorconfig
.gitignore feat: add duration to failed releases summary (#1066) 2023-10-12 18:49:07 -05:00
.golangci.yaml refactor(filesystem): add CopyDir method and optimize Fetch function (#2111) 2025-07-28 16:10:25 -04:00
.goreleaser.yml feat: add helmfile archive configuration in goreleaser (#2000) 2025-04-19 12:11:39 +08:00
.readthedocs.yaml update python3 version for mkdoc.yaml (#1712) 2024-09-18 07:11:12 +08:00
AGENTS.md Update Go from 1.25.8 to 1.26.2 (#2535) 2026-04-10 11:27:16 +08:00
CHANGELOG.md Add CHANGELOG.md (#2457) 2026-03-05 09:50:08 +08:00
CODEOWNERS Add @aditmeno to CODEOWNERS (#2413) 2026-02-20 15:27:21 +08:00
CONTRIBUTING.md chore: update go version to 1.25.8 (#2514) 2026-04-03 18:34:48 +08:00
Dockerfile Bump Helm support to 3.21.0 and 4.2.0 (#2588) 2026-05-15 13:14:02 +08:00
Dockerfile.debian-stable-slim Bump Helm support to 3.21.0 and 4.2.0 (#2588) 2026-05-15 13:14:02 +08:00
Dockerfile.ubuntu Bump Helm support to 3.21.0 and 4.2.0 (#2588) 2026-05-15 13:14:02 +08:00
KUBEDOG_CONFIG.md fix: configure kubedog rate limiter to prevent context cancellation (#2446) 2026-03-03 19:24:28 +08:00
LICENSE
Makefile feat: add Helm 4 support while maintaining Helm 3 compatibility (#2262) 2025-11-19 07:49:30 +08:00
README-zh_CN.md docs: restructure documentation and improve newcomer experience (#2573) 2026-05-03 19:33:33 +08:00
README.md docs: restructure documentation and improve newcomer experience (#2573) 2026-05-03 19:33:33 +08:00
SECURITY.md
USERS.md Add RightCapital to USERS.md (#1676) 2024-08-24 05:14:38 +08:00
go.mod fix: refresh Chart.lock after rewriting file:// dependencies (#2587) 2026-05-19 05:41:41 +08:00
go.sum fix: restore kubedog status progress output during tracking (#2602) 2026-05-20 20:53:03 +08:00
main.go Make helmfile respect signals send by kill command (not only Ctrl+C in terminal) (#750) 2023-04-29 15:25:29 +09:00
mkdocs.yml docs: restructure documentation and improve newcomer experience (#2573) 2026-05-03 19:33:33 +08:00

README.md

Helmfile

Tests Container Image Repository on GHCR Go Report Card Slack Community #helmfile Documentation Gurubase zread

Deploy Kubernetes Helm Charts

English | 简体中文

About

Helmfile is a declarative spec for deploying helm charts. It lets you...

  • Keep a directory of chart value files and maintain changes in version control.
  • Apply CI/CD to configuration changes.
  • Periodically sync to avoid skew in environments.

To avoid upgrades for each iteration of helm, the helmfile executable delegates to helm - as a result, the following must be installed

Highlights

Declarative: Write, version-control, apply the desired state file for visibility and reproducibility.

Modules: Modularize common patterns of your infrastructure, distribute it via Git, S3, etc. to be reused across the entire company (See #648)

Versatility: Manage your cluster consisting of charts, kustomizations, and directories of Kubernetes resources, turning everything to Helm releases (See #673)

Patch: JSON/Strategic-Merge Patch Kubernetes resources before helm-installing, without forking upstream charts (See #673)

Status

May 2025 Update

  • Helmfile v1.0 and v1.1 has been released. We recommend upgrading directly to v1.1 if you are still using v0.x.
  • If you haven't already upgraded, please go over this v1 proposal here to see a small list of breaking changes.

Installation

1: Binary Installation

download one of releases

2: Package Manager

  • Archlinux: install via pacman -S helmfile
  • openSUSE: install via zypper in helmfile assuming you are on Tumbleweed; if you are on Leap you must add the kubic repo for your distribution version once before that command, e.g. zypper ar https://download.opensuse.org/repositories/devel:/kubic/openSUSE_Leap_\$releasever kubic
  • Windows (using scoop): scoop install helmfile
  • macOS (using homebrew): brew install helmfile
  • Linux/macOS/Windows (using mise): mise use -g helmfile@latest

3: Container

For more details, see run as a container

Make sure to run helmfile init once after installation. Helmfile uses the helm-diff plugin.

4: Build from source

requirements: Go

go install github.com/helmfile/helmfile@latest

Getting Started

Let's start with a simple helmfile and gradually improve it to fit your use-case!

Generate a project scaffold with best-practice directory structure:

helmfile create my-project && cd my-project

Or create a helmfile.yaml manually. Suppose the helmfile.yaml representing the desired state of your helm releases looks like:

repositories:
- name: prometheus-community
  url: https://prometheus-community.github.io/helm-charts

releases:
- name: prom-norbac-ubuntu
  namespace: prometheus
  chart: prometheus-community/prometheus
  set:
  - name: rbac.create
    value: false

Sync your Kubernetes cluster state to the desired one by running:

helmfile apply

Congratulations! You now have your first Prometheus deployment running inside your cluster.

Iterate on the helmfile.yaml by referencing:

More complex examples

See: multi-env-helmfile

Docs

Please read complete documentation

Contributing

Welcome to contribute together to make helmfile better: contributing doc

Attribution

We use:

  • semtag for automated semver tagging. I greatly appreciate the author(pnikosis)'s effort on creating it and their kindness to share it!

Users

Helmfile has been used by many users in production:

For more users, please see: Users

License

MIT

Star History

Star History Chart