Skip to main content

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 Helm Plugin from Git

helm plugin install https://github.com/helm/helm-2to3

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

Example: Update all plugins

helm plugin update

Example: Update a specific plugin

helm plugin update my-plugin
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

Example: Removing a Plugin

helm plugin remove my-plugin
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

Example: Decrypting a secret value

helm secrets decrypt 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: Installing helm-git Plugin

helm plugin install https://github.com/aslafy-z/helm-git

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

Example: Basic plugin structure

my-plugin/
├── plugin.yaml
└── plugin.sh

Example: plugin.yaml content

name: "my-plugin"
version: "0.1.0"
hooks:
  pre-install: "./plugin.sh"

Example: plugin.sh content

#!/bin/bash
echo "Executing custom plugin logic"
helm version
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.

Was this article helpful?