CLI Flag Parity with Helm

The jhelm CLI mirrors the Helm command set and, for the common lifecycle commands, the common flags — so most helm scripts run against jhelm with little or no change. This page maps the flags Helm users reach for most to their jhelm equivalent, and lists the gaps honestly.

Status legend: ✅ same flag · ✎ supported but differs (see note) · ✗ not yet supported.

1. install / upgrade

Helm flag jhelm Notes

-n, --namespace

Defaults to default (Helm uses the kube-context namespace).

-f, --values

--set, --set-string, --set-file, --set-json

--dry-run[=client|server|none]

Bare --dry-run = client. client renders locally; server also validates the manifest against the API server via a server-side dry-run apply (admission/defaulting/quota, persists nothing); none disables the dry run.

--wait

Waits for all resources, including Jobs (Helm needs --wait-for-jobs for that).

--timeout

Takes seconds (e.g. --timeout 300); Helm takes a duration (5m0s).

--atomic

--no-hooks

--create-namespace (install)

--install (upgrade -i)

--reset-values, --reuse-values, --reset-then-reuse-values (upgrade)

--history-max (upgrade)

--verify, --keyring

--post-renderer

--force (upgrade)

Delete-and-recreate strategy: existing resources are deleted before the new manifest is applied. May cause downtime or data loss for stateful resources — use with care.

--wait-for-jobs

Accepted for Helm compatibility; implies --wait. jhelm’s --wait already waits for Job completion.

-o, --output

table (default human summary), json, yaml. JSON/YAML emit the Helm-shaped release object (nested info, snake_case keys).

--version, --repo, --username/--password (install/upgrade from a repo)

Fetch the chart by name with --version and an ad-hoc --repo <url> (--username/--password + TLS --cert-file/--key-file/--ca-file/--insecure-skip-tls-verify/--pass-credentials). A repo/chart or oci:// ref resolves via the registered repositories; local chart paths are unchanged.

-g, --generate-name (install)

Omit the NAME positional and pass -g to auto-generate <chart>-<timestamp> (like Helm). Errors if both a name and -g are given, or if neither is.

--description (install)

Custom release description stored on the release (falls back to Install complete).

--labels (install)

key=value labels (comma-separated or repeatable) added to the release Secret; the reserved owner/name/status/version labels are never overridden.

--description (upgrade)

Custom description for the new revision (falls back to Upgrade complete).

--labels (upgrade)

key=value labels for the new revision; without it, the previous release’s labels are carried forward (like Helm).

--set-literal

Sets a fully literal string value (no coercion/comma/escape handling), applied last; also on template and lint.

--dependency-update

Updates a local chart’s charts/ from Chart.yaml before the operation; also on template. No-op for repo refs / .tgz.

2. uninstall

Helm flag jhelm Notes

-n, --namespace

--no-hooks

--keep-history

--dry-run

Reports what would be uninstalled without deleting resources or touching history.

--wait, --timeout

Blocks until the release’s resources are gone from the cluster (polls each resource).

--cascade

background (default), foreground, or orphan — the Kubernetes deletion propagation policy.

--description

Custom description stored on the release when --keep-history is set.

3. list

Helm flag jhelm Notes

-n, --namespace

-o, --output

table (default), json, yaml. JSON/YAML use Helm’s snake_case keys.

-A, --all-namespaces

List is per-namespace for now.

-a, --all; status filters (--deployed, --failed, …); --max, --filter

4. rollback / status / history

Command Helm flag jhelm

rollback

-n, --no-hooks, --wait, --timeout, --dry-run

rollback

--force, --cleanup-on-fail, --recreate-pods, --wait-for-jobs

status

-n, --show-resources, -o/--output

status

--revision

history

-n, -o/--output, --max

On rollback: --force delete-and-recreates the target revision’s resources, --cleanup-on-fail deletes any resources created during a failed rollback, and --recreate-pods triggers a rolling restart of the release’s workloads (Deployments/StatefulSets/DaemonSets) via a restart annotation. --wait-for-jobs extends --wait to also block on Job completion.

status -o json|yaml emits the Helm-shaped release object (nested info, plus a resources array when --show-resources is set); history -o json|yaml emits the Helm history array.

5. get

get values, get manifest, get notes, get hooks, get metadata, get all all take -n/--namespace and --revision; get values and get metadata take -o/--output (yaml/json), and get values takes -a/--all. This mirrors Helm’s get subcommands.

6. template

jhelm template renders to stdout like helm template, and emits a Helm-style # Source: <chart>/templates/<file> marker before each document, so the output records which template produced each manifest.

Helm flag jhelm Notes

-s, --show-only

Repeatable; keeps only documents rendered from the named template(s) (e.g. templates/deployment.yaml), matched by trailing path segment. Errors if a requested template matches nothing, like Helm.

--output-dir

Writes each document to <dir>/<chart>/templates/<file> (grouped by source) instead of stdout, printing one wrote <path> line per file.

--skip-tests

Drops documents carrying a helm.sh/hook: test annotation.

--include-crds

Prepends the chart’s top-level crds/ manifests (un-templated, as Helm renders them), each with its own # Source: marker. Helm excludes CRDs from template by default.

--is-upgrade

Renders with .Release.IsUpgrade=true / .Release.IsInstall=false (the default posture is install).

7. repo / registry / pull

Command jhelm Notes

repo add, repo list, repo remove

repo list -o table|json|yaml

Machine-readable repo listing (name, url).

search hub -o table|json|yaml

Machine-readable Artifact Hub results.

repo update [name…​]

Refreshes all repos, or the named ones.

repo add auth/TLS (--username, --password, --cert-file, --key-file, --ca-file, --insecure-skip-tls-verify, --pass-credentials)

Persisted into repositories.yaml; the stored credentials are host-gated and honored on every index refresh and chart pull.

repo add (--force-update, --no-update)

--force-update replaces an existing repo (adding a duplicate name otherwise fails); --no-update skips the immediate index fetch.

registry login (-u, -p, --password-stdin) / logout

Like Helm, registry login validates the credentials against the registry (a /v2/ ping and, on a Bearer challenge, a token exchange) before storing them; a bad password, TLS failure, or unreachable registry fails the login.

registry login TLS (--insecure, --plain-http, --ca-file, --cert-file, --key-file)

Configure the login-time validation handshake (skip TLS verify, plain HTTP, custom CA, and client mTLS). Matching Helm, they are used only for the handshake and are not persisted.

pull (--version, -d/--dest)

pull --repo URL + auth/TLS (--username, --password, --cert-file, --key-file, --ca-file, --insecure-skip-tls-verify, --pass-credentials)

Pull a chart directly from a repository URL with inline credentials, without a prior repo add.

pull (--untar, --untardir)

Unpacks the fetched chart into --untardir (default .) and removes the .tgz.

pull (--verify, --prov, --keyring)

Fetches the chart’s detached .prov and checks its PGP provenance before use (--prov keeps the file without verifying).

pull (--devel)

Prerelease/latest-version resolution is not yet implemented (jhelm requires an explicit --version).

8. package / show / lint / version

Command jhelm Notes

package (--version, --app-version)

Stamp the packaged chart’s version/app-version — rewrites the Chart.yaml inside the archive (and names the archive for the overridden version), not just the filename.

package (-u/--dependency-update)

Updates the chart’s charts/ from its Chart.yaml dependencies before packaging.

show chart|values|readme|crds|all (--version, --repo, --username/--password + TLS)

Show a chart pulled from a repository (registered repo/chart ref or ad-hoc --repo <url> with credentials/TLS) without a prior pull; local paths are unchanged.

show (--devel)

Prerelease/latest-version resolution is not yet implemented (needs an explicit --version).

lint (--quiet, --with-subcharts, --kube-version)

--quiet suppresses the linting header; --with-subcharts also lints each subchart (findings prefixed with the subchart name); --kube-version sets .Capabilities.KubeVersion for template rendering.

version (--template)

Go-templates the version output against .Version, .GitCommit, .GitTreeState, .GoVersion (jhelm has no git metadata, so GitCommit/GitTreeState are empty and GoVersion is the running Java version).

9. Global flags

Helm’s persistent flags are accepted on every command (before or after the subcommand), matching helm. They configure beans that are built at startup, so jhelm resolves them from the command line before the application context is created.

Flag jhelm Notes

--kubeconfig <path>

Path to the kubeconfig file.

--kube-context <name>

Select a context from the kubeconfig (loaded from --kubeconfig, $KUBECONFIG, or ~/.kube/config).

--kube-apiserver <url>

Override the Kubernetes API server address resolved from the kubeconfig.

--registry-config <path>

Path to the OCI registry auth file (config.json).

--repository-config <path>

Path to repositories.yaml.

--repository-cache <path>

Path to the repository index cache directory.

--debug

Enable verbose (debug) logging.

These flags are equivalent to the corresponding jhelm.* Spring properties / environment variables (e.g. --kubeconfigjhelm.kubernetes.kubeconfig-path); the inline flag takes precedence. Because they configure startup beans, an invalid value (e.g. a --kubeconfig pointing at a missing file, or an unknown --kube-context) fails at startup rather than when the cluster is first used.

10. Porting a Helm script to jhelm

Most scripts work unchanged. Watch for these deliberate differences:

  • Namespace — jhelm defaults to default; pass -n explicitly (jhelm does not read the kube-context namespace or $HELM_NAMESPACE).

  • --timeout — jhelm expects seconds (--timeout 300), not a Go duration (5m0s).

  • --dry-run — use the bare flag; the =client|server value form is not parsed.

  • Output-o table|json|yaml is supported on list, get values, get metadata, status, history, install, upgrade, repo list, and search hub, producing Helm-shaped output for scripts and agents. Commands where Helm has no -o (template, get manifest/notes/hooks) don’t add one.

11. Other known gaps

Beyond the per-command tables above, these commonly-used Helm options are not yet wired (tracked for follow-up):

  • install/upgradeupgrade --cleanup-on-fail. (install-from-repo --version/--repo/--username/--password + TLS is supported; -g/--generate-name on install; --description/--labels/--set-literal/--dependency-update on both.)

  • pull/show--devel (prerelease/latest-version resolution). pull --untar/--untardir and --verify/--prov/--keyring, and show --version/--repo/auth, are supported. (registry login now validates credentials against the registry and honors its TLS/transport flags, matching Helm.)

For sharing repositories, registry credentials, and releases with the helm binary itself, see Interoperability with Helm.