Changelog

1. 0.4.0

The pre-1.0 API freeze release, plus an MCP server, a REST library/starter split, and the upgrade value-handling fixes (including the value-retention flags listed as a known limitation in 0.2.0).

1.1. API freeze (breaking, pre-1.0)

  • Unchecked exceptions — the action layer and KubeService now throw the unchecked JhelmException hierarchy instead of throws Exception.

  • No leaked client types — the kubernetes-client ApiException/ApiClient are wrapped behind KubeClient, and the BouncyCastle PGP types behind SigningKey / VerificationKeyring.

  • Options objects — the action API now takes immutable InstallOptions, UpgradeOptions, UninstallOptions, and RollbackOptions objects instead of long parameter lists.

  • Immutable result models — Release, ReleaseInfo, and MapConfig are now immutable; release status is a typed ReleaseStatus enum and the lifecycle phase a LifecyclePhase enum.

1.2. MCP server

  • jhelm-mcp + jhelm-mcp-starter — a new Model Context Protocol server exposing jhelm operations as tools for AI agents, built on Spring AI 2.0 and mirroring the REST operation set. A READ_ONLY/FULL access mode (jhelm.mcp.mode, default READ_ONLY) gates the cluster-mutating tools.

1.3. REST library/starter split

  • Pure library — jhelm-rest is now a pure library; the new jhelm-rest-starter carries the auto-configuration (Spring-Boot-Admin style).

  • Access mode — a READ_ONLY/FULL mode (jhelm.rest.mode, default FULL) gates the cluster-mutating endpoints. Authentication is the embedding application’s responsibility (Spring Security).

1.4. Upgrade value handling

  • User values persisted — user-supplied values are now persisted as the release config, fixing a data-loss bug (and get values).

  • Value-retention flags implemented — --reset-values, --reuse-values, and --reset-then-reuse-values are now implemented. These were listed as a known limitation in 0.2.0.

1.5. New flags

  • Value flags — --set now type-coerces like Helm (int/bool/null; floats and leading-zero values stay strings), joined by --set-string, --set-file, and --set-json.

  • Lifecycle flags — --no-hooks (install/upgrade/uninstall/rollback), --history-max (release-history pruning, default 10), and --create-namespace.

1.6. Engine

  • Loud render failures — recursive / too-deep template rendering now fails with a TemplateRenderException instead of baking an ERROR: string into the manifest.

  • gotmpl4j 1.1.0 — the engine dependency moves to gotmpl4j 1.1.0 (perf wave: double formatting without BigDecimal, cached property accessors, an allocation-free lexer).

1.7. CLI

  • New commands — jhelm version and jhelm env.

  • Clean stdout — command output is now clean on stdout (banner and logs go to stderr), so jhelm template … > out.yaml produces valid YAML.

2. 0.2.0

Helm template-function conformance improvements, grinding jhelm-gotemplate-helm against Helm’s own pkg/engine/funcs_test.go suite (the divergence backlog drops from 37 cases to 1).

  • Helm 4 duration helpers — implemented mustToDuration, durationSeconds, durationMinutes, durationHours, durationDays, durationWeeks, durationMilliseconds, durationMicroseconds, durationNanoseconds, durationRoundTo, and durationTruncateTo, as faithful ports of Go’s time.Duration (parsing, rounding, and String() formatting).

  • from error reporting* — fromJson/fromYaml and fromJsonArray/fromYamlArray now return Helm’s map[Error:<message>] / [<message>] with Go’s json.Unmarshal type-mismatch text when handed valid input of the wrong shape, instead of silently returning an empty container.

  • toToml table output — now emits Go BurntSushi-style [table] / headers with the matching key ordering and indentation, instead of Jackson’s dotted keys.

All 346 reference charts continue to render byte-identically to helm template.

2.1. Known limitations

  • The helm upgrade value-retention flags (--reset-values, --reuse-values, --reset-then-reuse-values) remain unimplemented.

  • One fromToml conformance case (a malformed-input syntax error) still differs from Helm in the exact error wording, an inherent difference between the Jackson and Go (BurntSushi) TOML parsers.

3. 0.1.0 — first public prerelease

The first published release of jhelm, on Maven Central (marked pre-release).

  • Helm-faithful rendering — chart templates render byte-for-byte identically to helm template across a CI-enforced suite of 346 real-world charts (Bitnami, Grafana, GitLab, Kubernetes-monitoring, and others).

  • Go template engine — the full Go text/template language plus Helm’s Sprig function set, provided by the standalone gotmpl4j library (gotmpl4j 0.3.0). Renders absent/nil values as the empty string (missingkey=zero), matching Helm.

  • Helm template functions — include, tpl, required, lookup, toYaml/fromYaml, toJson/fromJson, toToml, and the chart/capabilities/files helpers.

  • Chart lifecycle — install, upgrade, rollback, uninstall, list, status, history, test.

  • Repositories & registries — classic HTTP repositories and OCI registries, with digest verification and content-based caching.

  • Dependency management — list, update, and build chart dependencies; recursive value coalescing across subcharts.

  • Packaging & provenance — package charts to .tgz; PGP sign and verify.

  • JSON Schema validation — chart values validated against values.schema.json (Draft-07).

  • Distribution surfaces — embeddable library, Spring Boot starter (auto-configured action beans), REST API (jhelm-rest, with OpenAPI docs), Maven packaging plugin (jhelm-plugin), and a 22-command CLI.

  • Built on Java 21, Spring Boot 4.0.7, Kubernetes Client 26.0.0, Picocli 4.7.7.

3.1. Known limitations

The following are out of scope for this first prerelease and are planned for 0.2.0:

  • helm upgrade value-retention flags — --reset-values, --reuse-values, and --reset-then-reuse-values are not yet implemented. upgrade applies the chart defaults merged with the values you pass on the command line.

  • Helm function fidelity — a small number of functions have documented partial-fidelity behaviour: the Helm 4 duration helpers, the fromYaml/fromJson error-map format, and nested toToml tables. See Function Coverage.

  • Subchart value coalescing — deeply-nested umbrella charts (GitLab-scale) may differ from Helm in rare value-coalesce edge cases; the common cases render byte-identically (the 346-chart parity suite).