Configuration

jhelm uses Spring Boot @ConfigurationProperties for all configuration. Properties can be set in application.yaml, application.properties, environment variables, or system properties.

The section below is the practical "how do I set this" guide for operators; the property reference tables further down list every available setting.

The repository, registry, and kubeconfig paths default to Helm’s own locations and honor Helm’s HELM_* environment variables, so a Helm setup drops in with no jhelm configuration. See Shared configuration with Helm for the full mapping.

1. Configuring jhelm (for operators)

The jhelm CLI is a Spring Boot application, so it reads the settings on this page from three sources — no Spring knowledge required. Pick whichever fits your environment; they can be combined, and later ones in this list win:

  1. a config file (application.yaml or .properties),

  2. an environment variable,

  3. a JVM system property (-D).

The command line itself is reserved for helm-style subcommands and flags (jhelm install …, -n, --set). Do not pass settings as --jhelm.config-path=… on the command line — that is a Spring option, not a jhelm flag, and the CLI rejects it as unknown. Use one of the three sources below.

1.1. 1. A YAML (or properties) file

Put an application.yaml next to where you run jhelm (the current directory, or a config/ subdirectory) and it is picked up automatically:

jhelm:
  config-path: /etc/jhelm/repositories.yaml
  insecure-skip-tls-verify: false
  kubernetes:
    kubeconfig-path: /home/deploy/.kube/config

The same settings in application.properties form:

jhelm.config-path=/etc/jhelm/repositories.yaml
jhelm.kubernetes.kubeconfig-path=/home/deploy/.kube/config

To keep the file anywhere else, point at it with an environment variable (trailing slash for a directory, or give the full file path):

export SPRING_CONFIG_ADDITIONAL_LOCATION=/etc/jhelm/
jhelm list -n production

1.2. 2. Environment variables

Every property maps to an environment variable: uppercase it and replace . and - with _. This is usually the simplest option for CI and containers:

export JHELM_CONFIG_PATH=/etc/jhelm/repositories.yaml
export JHELM_KUBERNETES_KUBECONFIG_PATH=/home/deploy/.kube/config
jhelm list -n production
Property Environment variable

jhelm.config-path

JHELM_CONFIG_PATH

jhelm.registry-config-path

JHELM_REGISTRY_CONFIG_PATH

jhelm.insecure-skip-tls-verify

JHELM_INSECURE_SKIP_TLS_VERIFY

jhelm.template-cache-enabled

JHELM_TEMPLATE_CACHE_ENABLED

jhelm.template-cache-max-size

JHELM_TEMPLATE_CACHE_MAX_SIZE

jhelm.kubernetes.kubeconfig-path

JHELM_KUBERNETES_KUBECONFIG_PATH

1.3. 3. JVM system properties (-D)

When you launch the jar directly, pass -D<property>=<value> before -jar:

java -Djhelm.config-path=/etc/jhelm/repositories.yaml -jar jhelm.jar list -n production

If jhelm is a wrapper or alias (so you cannot control the java arguments), put the same -D flags in the standard JVM environment variable instead — the JVM applies them and they never reach the command parser:

export JAVA_TOOL_OPTIONS="-Djhelm.config-path=/etc/jhelm/repositories.yaml"
jhelm list -n production

1.4. Profiles (environment-specific config)

A profile is a named set of overrides — one file per environment (dev, staging, prod) layered on top of the base application.yaml. Create application-prod.yaml beside your base file, then activate it by name:

# application-prod.yaml — only used when the "prod" profile is active
jhelm:
  config-path: /etc/jhelm/prod-repositories.yaml
  insecure-skip-tls-verify: false
export SPRING_PROFILES_ACTIVE=prod          # or: java -Dspring.profiles.active=prod -jar jhelm.jar …
jhelm list -n production

You can also keep every environment in a single file, separated by ---, gating each block with spring.config.activate.on-profile:

jhelm:
  template-cache-enabled: true      # shared by all profiles
---
spring:
  config:
    activate:
      on-profile: prod
jhelm:
  insecure-skip-tls-verify: false

1.5. Spring Boot references

These external pages cover the mechanics in more depth (jhelm uses them unchanged):

2. Core Properties (jhelm.*)

Provided by JhelmCoreAutoConfiguration when jhelm-core is on the classpath.

Property Type Default Description

jhelm.config-path

String

null

Path to the Helm repository configuration file. Defaults to ~/.config/helm/repositories.yaml when not set.

jhelm.registry-config-path

String

null

Path to the OCI registry auth configuration file. Uses a platform-specific default location when not set.

jhelm.insecure-skip-tls-verify

boolean

false

Skip TLS certificate verification when downloading charts over HTTP.

jhelm.template-cache-enabled

boolean

true

Enable caching of parsed template ASTs in an LRU cache. Improves rendering performance for repeated chart renders.

jhelm.template-cache-max-size

int

256

Maximum number of parsed templates to keep in the LRU cache. Only applies when template-cache-enabled is true.

3. Kubernetes Properties (jhelm.kubernetes.*)

Provided by JhelmKubeAutoConfiguration when jhelm-kube is on the classpath.

Property Type Default Description

jhelm.kubernetes.kubeconfig-path

String

null

Path to the kubeconfig file. When not set, uses standard Kubernetes auto-detection: ~/.kube/config or in-cluster credentials.

4. Precedence

When the same setting is supplied in more than one place, Spring Boot resolves it in this order (highest wins): JVM system properties (-D) > environment variables > profile-specific file (application-<profile>.yaml) > base application.yaml. So a -D flag or an environment variable always overrides a value baked into a config file — handy for a one-off override in CI without editing the file.