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
KubeServicenow throw the uncheckedJhelmExceptionhierarchy instead ofthrows Exception. -
No leaked client types — the kubernetes-client
ApiException/ApiClientare wrapped behindKubeClient, and the BouncyCastle PGP types behindSigningKey/VerificationKeyring. -
Options objects — the action API now takes immutable
InstallOptions,UpgradeOptions,UninstallOptions, andRollbackOptionsobjects instead of long parameter lists. -
Immutable result models —
Release,ReleaseInfo, andMapConfigare now immutable; releasestatusis a typedReleaseStatusenum and the lifecycle phase aLifecyclePhaseenum.
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. AREAD_ONLY/FULLaccess mode (jhelm.mcp.mode, defaultREAD_ONLY) gates the cluster-mutating tools.
1.3. REST library/starter split
-
Pure library —
jhelm-restis now a pure library; the newjhelm-rest-startercarries the auto-configuration (Spring-Boot-Admin style). -
Access mode — a
READ_ONLY/FULLmode (jhelm.rest.mode, defaultFULL) 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-valuesare now implemented. These were listed as a known limitation in0.2.0.
1.5. New flags
-
Value flags —
--setnow 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
TemplateRenderExceptioninstead of baking anERROR:string into the manifest. -
gotmpl4j 1.1.0 — the engine dependency moves to
gotmpl4j 1.1.0(perf wave: double formatting withoutBigDecimal, cached property accessors, an allocation-free lexer).
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, anddurationTruncateTo, as faithful ports of Go’stime.Duration(parsing, rounding, andString()formatting). -
fromerror reporting* —fromJson/fromYamlandfromJsonArray/fromYamlArraynow return Helm’smap[Error:<message>]/[<message>]with Go’sjson.Unmarshaltype-mismatch text when handed valid input of the wrong shape, instead of silently returning an empty container. -
toTomltable 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 upgradevalue-retention flags (--reset-values,--reuse-values,--reset-then-reuse-values) remain unimplemented. -
One
fromTomlconformance 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 templateacross a CI-enforced suite of 346 real-world charts (Bitnami, Grafana, GitLab, Kubernetes-monitoring, and others). -
Go template engine — the full Go
text/templatelanguage 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 upgradevalue-retention flags —--reset-values,--reuse-values, and--reset-then-reuse-valuesare not yet implemented.upgradeapplies 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/fromJsonerror-map format, and nestedtoTomltables. 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).