Helm · Schema

Helm Plugin Descriptor

Schema for the plugin.yaml file that describes a Helm CLI plugin. The plugin.yaml file defines the plugin's name, version, command to execute, hooks, and platform-specific binaries. Helm plugins are installed into a single directory and extend the Helm CLI with additional subcommands.

ChartsCloud NativeContainer OrchestrationDevOpsKubernetesPackage Manager

Properties

Name Type Description
name string The name of the plugin. This becomes the subcommand name (e.g., 'helm name'). Must be lowercase letters, numbers, and hyphens.
version string The SemVer 2 version of the plugin.
usage string A short usage description shown in the 'helm help' output and 'helm plugin list' command.
description string A longer description of the plugin's functionality shown in 'helm --help'.
command string The command to run when the plugin is invoked. Can reference the plugin directory with $HELM_PLUGIN_DIR. On Windows, use a batch file path.
ignoreFlags boolean When true, Helm will not pass global flags to the plugin command. Useful for plugins that handle their own flag parsing.
useTunnel boolean Deprecated in Helm 3. Previously used to create a tunnel to Tiller. Has no effect in Helm 3.
hooks object
downloaders array Custom protocol downloaders provided by this plugin. Allows the plugin to handle custom repository URL schemes.
platformCommand array Platform-specific command overrides. Helm selects the matching entry based on the current OS and architecture.
View JSON Schema on GitHub

JSON Schema

helm-plugin-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://helm.sh/schemas/plugin.json",
  "title": "Helm Plugin Descriptor",
  "description": "Schema for the plugin.yaml file that describes a Helm CLI plugin. The plugin.yaml file defines the plugin's name, version, command to execute, hooks, and platform-specific binaries. Helm plugins are installed into a single directory and extend the Helm CLI with additional subcommands.",
  "type": "object",
  "required": [
    "name",
    "version",
    "usage",
    "description",
    "command"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The name of the plugin. This becomes the subcommand name (e.g., 'helm name'). Must be lowercase letters, numbers, and hyphens.",
      "pattern": "^[a-z][a-z0-9-]*$",
      "examples": [
        "diff",
        "secrets",
        "push"
      ]
    },
    "version": {
      "type": "string",
      "description": "The SemVer 2 version of the plugin.",
      "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-[\\da-zA-Z-]+(\\.[\\da-zA-Z-]+)*)?(\\+[\\da-zA-Z-]+(\\.[\\da-zA-Z-]+)*)?$",
      "examples": [
        "3.9.0",
        "1.0.0-beta.1"
      ]
    },
    "usage": {
      "type": "string",
      "description": "A short usage description shown in the 'helm help' output and 'helm plugin list' command."
    },
    "description": {
      "type": "string",
      "description": "A longer description of the plugin's functionality shown in 'helm <plugin> --help'."
    },
    "command": {
      "type": "string",
      "description": "The command to run when the plugin is invoked. Can reference the plugin directory with $HELM_PLUGIN_DIR. On Windows, use a batch file path.",
      "examples": [
        "$HELM_PLUGIN_DIR/bin/helm-diff",
        "sh $HELM_PLUGIN_DIR/plugin.sh"
      ]
    },
    "ignoreFlags": {
      "type": "boolean",
      "description": "When true, Helm will not pass global flags to the plugin command. Useful for plugins that handle their own flag parsing.",
      "default": false
    },
    "useTunnel": {
      "type": "boolean",
      "description": "Deprecated in Helm 3. Previously used to create a tunnel to Tiller. Has no effect in Helm 3.",
      "default": false
    },
    "hooks": {
      "$ref": "#/$defs/Hooks"
    },
    "downloaders": {
      "type": "array",
      "description": "Custom protocol downloaders provided by this plugin. Allows the plugin to handle custom repository URL schemes.",
      "items": {
        "$ref": "#/$defs/Downloader"
      }
    },
    "platformCommand": {
      "type": "array",
      "description": "Platform-specific command overrides. Helm selects the matching entry based on the current OS and architecture.",
      "items": {
        "$ref": "#/$defs/PlatformCommand"
      }
    }
  },
  "$defs": {
    "Hooks": {
      "type": "object",
      "description": "Lifecycle hooks for the plugin. Hooks run shell commands at defined points in the plugin lifecycle.",
      "properties": {
        "install": {
          "type": "string",
          "description": "Shell command to run when the plugin is installed with 'helm plugin install'.",
          "examples": [
            "bash install.sh"
          ]
        },
        "update": {
          "type": "string",
          "description": "Shell command to run when the plugin is updated with 'helm plugin update'.",
          "examples": [
            "bash install.sh"
          ]
        },
        "delete": {
          "type": "string",
          "description": "Shell command to run when the plugin is removed with 'helm plugin uninstall'."
        }
      }
    },
    "Downloader": {
      "type": "object",
      "description": "A custom downloader definition that enables the plugin to handle a custom URL scheme when Helm resolves chart repositories.",
      "required": [
        "command",
        "protocols"
      ],
      "properties": {
        "command": {
          "type": "string",
          "description": "The command to run for downloading. Receives the URI as the final argument."
        },
        "protocols": {
          "type": "array",
          "description": "List of URI scheme prefixes this downloader handles.",
          "items": {
            "type": "string"
          },
          "examples": [
            ["s3://"],
            ["gs://"],
            ["oci://"]
          ]
        }
      }
    },
    "PlatformCommand": {
      "type": "object",
      "description": "A platform-specific command override. Helm matches the current OS and architecture against all entries and uses the first match.",
      "required": [
        "command"
      ],
      "properties": {
        "os": {
          "type": "string",
          "description": "The operating system this entry applies to. Matches GOOS values.",
          "enum": [
            "linux",
            "darwin",
            "windows",
            "freebsd"
          ]
        },
        "arch": {
          "type": "string",
          "description": "The CPU architecture this entry applies to. Matches GOARCH values.",
          "enum": [
            "amd64",
            "arm64",
            "arm",
            "386",
            "s390x",
            "ppc64le"
          ]
        },
        "command": {
          "type": "string",
          "description": "The command to run on this platform. Overrides the top-level command field.",
          "examples": [
            "$HELM_PLUGIN_DIR/bin/helm-diff-linux-amd64"
          ]
        }
      }
    }
  }
}