Working with Helm Plugins
1. Installing Helm Plugins
| Command | Description | Notes |
|---|---|---|
| helm plugin install | Installs a Helm plugin from a Git repository or local path | Supports local paths and Git URLs |
| helm plugin install --version | Installs a specific version of a Helm plugin | Useful for stable environments |
Example: Install a Specific Version of a Plugin
helm plugin install --version v2.0.0 https://github.com/helm/helm-2to3
Note: Helm plugins must be compatible with the installed version of Helm.
Warning: Installing plugins from untrusted sources can pose security risks.
2. Listing Installed Plugins
| Command | Description | Flags |
|---|---|---|
| helm plugin list | Lists all installed Helm plugins | --output, --short |
Example: Listing Helm Plugins
helm plugin list
NAME VERSION ENABLED PATH
diff 3.8.0 true /home/user/.local/share/helm/plugins/diff
secrets 3.12.0 true /home/user/.local/share/helm/plugins/secrets
Note: The
helm plugin list command shows plugins installed in the default Helm home directory ($HELM_HOME/plugins).
3. Updating Plugins
| Command | Description | Notes |
|---|---|---|
| helm plugin update | Updates all installed plugins to their latest versions | Uses the plugin's helm plugin install command internally |
| helm plugin update <plugin-name> | Updates a specific plugin to its latest version | Only updates the specified plugin, not all plugins |
Note: Plugin updates require the plugin to support versioning and have a valid update mechanism defined in its
plugin.yaml.
4. Removing Plugins
| Command | Description | Notes |
|---|---|---|
| helm plugin remove <plugin-name> | Uninstalls a Helm plugin | Removes plugin files and entries from Helm's plugin registry |
Note: The plugin directory is removed from
$HELM_HOME/plugins and the plugin is unregistered from Helm's plugin list.
5. Using helm-diff Plugin
The helm-diff plugin provides a way to preview changes before upgrading a Helm release. It compares the current state of a release with the new values and displays a diff.
| Command | Description | Flags |
|---|---|---|
| helm diff upgrade | Compares the current release with a new chart or values | --values, --reuse-values, --allow-unreleased |
| helm diff rollback | Compares the current release with a previous revision | --revision |
Example: Using helm-diff to preview an upgrade
helm diff upgrade my-release ./my-chart --values values.yaml</code>
</pre>
</div>
</div>
<div class="example">
<h2 id="example-using-helm-diff-with-a-specific-revision">Example: Using helm-diff with a specific revision<a href="#example-using-helm-diff-with-a-specific-revision" class="toc__headingLink" aria-label="Link to this section"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<div class="codeBlock" data-language="bash">
<pre><code>helm diff rollback my-release --revision 2</code>
</pre>
</div>
</div>
<div class="note">
<strong>Note:</strong> The <code>helm-diff</code> plugin requires Helm 3.0 or higher and is compatible with Helm charts that use the <code>helm.sh/chart</code> annotation.
</div>
<div class="warning">
<strong>Warning:</strong> The diff output does not show all changes, particularly those made by hooks or custom resources. Always verify the actual changes before applying them.
</div>
<h2 id="6-using-helm-secrets-plugin">6. Using helm-secrets Plugin<a href="#6-using-helm-secrets-plugin" class="toc__headingLink" aria-label="Link to this section"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<table>
<tbody>
<tr>
<th>Property</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td class="property">helm secrets</td>
<td>Command to manage encrypted values in Helm charts</td>
<td>None</td>
</tr>
</tbody>
</table>
<div class="example">
<h2 id="example-encrypting-a-secret-value">Example: Encrypting a secret value<a href="#example-encrypting-a-secret-value" class="toc__headingLink" aria-label="Link to this section"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<div class="codeBlock" data-language="bash"><pre><code>helm secrets encrypt secret.yaml
Note: The
helm-secrets plugin requires sops to be installed and configured.
Warning: Ensure that the encryption keys are securely stored and managed to prevent unauthorized access.
Key Features of helm-secrets
- Supports multiple encryption methods (AES, GPG)
- Integrates seamlessly with Helm charts
- Manages secrets in a version-controlled manner
7. Using helm-git Plugin
| Property | Value | Description |
|---|---|---|
| plugin.name | helm-git |
Name of the Helm plugin for Git repository support |
| plugin.version | v0.12.0 |
Latest stable version as of 2026 |
| plugin.source | https://github.com/aslafy-z/helm-git |
Repository URL for the plugin |
Example: Using helm-git to fetch chart from Git
helm install my-app git+https://github.com/example/my-chart.git?ref=main
Note: The
helm-git plugin allows fetching Helm charts directly from Git repositories using the git+ protocol. It supports branch, tag, and commit references.
Warning: Ensure that the Git repository is accessible and that required credentials (e.g., for private repos) are configured properly.
8. Using helm-s3 Plugin
| Command | Description | Flags |
|---|---|---|
| helm s3 push | Pushes a chart to an S3 bucket | --bucket, --region, --endpoint |
| helm s3 repo add | Adds an S3-based repository to Helm | --bucket, --region, --endpoint |
| helm s3 repo list | Lists all S3-based repositories | None |
Example: Pushing a chart to S3
helm s3 push my-chart-1.0.0.tgz --bucket my-helm-charts --region us-east-1
Example: Adding an S3 repository
helm repo add my-s3-repo s3://my-helm-charts --bucket my-helm-charts --region us-east-1
9. Creating Custom Plugins
Creating custom Helm plugins allows extending Helm's functionality with your own commands. Plugins are executed as separate processes and can be written in any language that supports command-line execution.
| Plugin Structure | Description | Notes |
|---|---|---|
| plugin.yaml | Configuration file for the plugin | Required for all plugins |
| plugin.sh | Shell script to execute the plugin | Must be executable and located in the plugin directory |
Note: The plugin must be executable (
chmod +x plugin.sh) to run correctly.
Warning: Helm plugins execute in the context of the user's environment, so care must be taken to avoid security risks.
10. Configuring Plugin Environment
| Environment Variable | Description | Default Value | Notes |
|---|---|---|---|
| HELM_PLUGINS | Directory where Helm plugins are installed | $HOME/.helm/plugins |
Can be overridden to install plugins in a custom location |
| HELM_CACHE_HOME | Directory for Helm cache files | $HOME/.helm/cache |
Used to store downloaded chart files and metadata |
| HELM_DATA_HOME | Directory for Helm data files | $HOME/.helm |
Contains plugin binaries and configuration files |
Example: Setting Plugin Environment Variables
export HELM_PLUGINS=/opt/helm/plugins
export HELM_CACHE_HOME=/opt/helm/cache
export HELM_DATA_HOME=/opt/helm/data
Note: Ensure that the directories specified in
HELM_PLUGINS, HELM_CACHE_HOME, and HELM_DATA_HOME exist and have appropriate permissions for Helm to read/write.