A native Java implementation of the Helm package manager for Kubernetes. Render templates, manage charts, and deploy releases from the JVM — as an embeddable library, a Spring Boot starter, a REST API, or a standalone CLI — without shelling out to the Go-based Helm binary.
-
Helm-faithful rendering, in pure Java — jhelm renders chart templates identically to
helm template(same charts, default values, pinned--kube-version v1.35.0) across a continuously-run suite of 540+ real-world charts (Bitnami, Grafana, GitLab, Kubernetes-monitoring, and more), with no Go orhelmbinary. The comparison is byte-for-byte apart from a small set of documented, non-semantic differences (generated secrets/certs andtoYamlkey-ordering inchecksum/*annotations). This is template-rendering parity;install/upgradereuse the same renderer but talk to the cluster through the Kubernetes Java client. Parity is enforced in CI on every change. -
Pure JVM, no native binary — no
helmexecutable, noexec, no platform-specific distribution. Just a Maven dependency. -
MCP-native — the same operations are exposed as Model Context Protocol tools, so an AI agent can render charts and manage releases directly. See the MCP guide.
-
Designed to be embedded — a clean programmatic API (
TemplateAction,InstallAction, …), Spring Boot auto-configuration, and a REST module, in addition to the CLI. -
Go template engine on Maven Central — the template/Sprig engine is the standalone gotmpl4j library, reusable on its own.
-
Go template engine — the full Go
text/templatelanguage with Helm’s Sprig function set and Helm-specific functions (include,tpl,required,lookup,toYaml, …), matched against Helm’s own conformance tests. -
Chart lifecycle — install, upgrade, rollback, uninstall, list, status, history, test.
-
Repository & registry management — add/remove repos, search, pull, push over both classic HTTP repositories and OCI registries.
-
Dependency management — list, update, and build chart dependencies (
Chart.yamldependencies,charts/vendoring, conditions/tags). -
Packaging & provenance — package charts to
.tgz, sign and verify with PGP provenance files. -
Spring Boot integration — auto-configured beans,
@ConfigurationProperties, and a programmatic action API. -
REST API — a Spring MVC library exposing chart and template operations over HTTP, with OpenAPI/Swagger documentation. Split into a pure
jhelm-restlibrary and ajhelm-rest-starterthat carries the auto-configuration, with aREAD_ONLY/FULLaccess mode gating the cluster-mutating endpoints. -
MCP server —
jhelm-mcp/jhelm-mcp-starterexpose jhelm operations as Model Context Protocol tools for AI agents (built on Spring AI), mirroring the REST operation set with the sameREAD_ONLY/FULLaccess mode. -
JSON Schema validation — validates chart values against
values.schema.json(Draft-07). -
Async Kubernetes operations — Java 21 virtual threads via
AsyncKubeService. -
Value management beyond Helm — Spring-Boot-style value profiles (per-environment overlays via
-P/--profile), values sourced from a central Spring Cloud Config Server, and{cipher}-encrypted secret values decrypted at render time (withjhelm encrypt/jhelm decrypt). All opt-in; charts that don’t use them render byte-for-byte as Go Helm.
| Module | Description |
|---|---|
|
Chart model, loader, repository manager, rendering engine, and action API. The main entry point for library users. |
|
Helm-specific template functions ( |
|
Kubernetes client integration — apply/delete resources, Helm-compatible Secret-based release storage, async operations. |
|
Spring MVC REST API over jhelm operations, with OpenAPI documentation (pure library — bring your own auto-configuration). |
|
Spring Boot starter that auto-configures the |
|
Model Context Protocol server exposing jhelm operations as AI-agent tools (built on Spring AI), mirroring the REST operation set. |
|
Spring Boot starter that auto-configures the |
|
Maven plugin for packaging charts as part of a build. |
|
Standalone CLI (Spring Boot + Picocli) — 22 Helm-compatible commands plus |
The Go template + Sprig engine lives in the separate gotmpl4j project (on Maven Central) and is consumed as a dependency.
Java |
21 |
Spring Boot |
4.0.7 |
Kubernetes Client |
26.0.0 |
Template engine |
gotmpl4j 1.3.0 |
CLI framework |
Picocli 4.7.7 |
Add jhelm-core to your pom.xml:
org.alexmond
jhelm-core
1.3.0For Kubernetes operations (install/upgrade/rollback against a cluster), also add:
org.alexmond
jhelm-kube
1.3.0Render a chart programmatically (Spring Boot auto-configures the action beans):
@Autowired
TemplateAction templateAction;
// Render with default values
String manifest = templateAction.render(
"/path/to/chart", "my-release", "default");
// Render with value overrides
String manifest = templateAction.render(
"/path/to/chart", "my-release", "default",
Map.of("replicaCount", 3, "image", Map.of("tag", "1.2.3")));See the Spring Boot Starter guide for the full action API and configuration properties.
./mvnw clean install -DskipTests
java -jar jhelm-cli/target/jhelm-1.3.0.jar template my-release ./my-chartThe CLI mirrors the Helm command surface:
jhelm template my-release ./my-chart # render manifests locally
jhelm install my-release ./my-chart -n prod # install into a cluster
jhelm upgrade my-release ./my-chart # upgrade an existing release
jhelm repo add bitnami https://charts.bitnami.com/bitnami
jhelm pull bitnami/nginx --untarAdd the jhelm-rest-starter to a Spring Boot web application:
org.alexmond
jhelm-rest-starter
1.3.0The API is read-only by default; cluster-mutating endpoints are deny-by-default behind an
API key (jhelm.security.mode=FULL + jhelm.security.api-key). See the REST
API guide.
Add the jhelm-mcp-starter to expose jhelm operations as MCP tools for AI agents:
org.alexmond
jhelm-mcp-starter
1.3.0Run it locally (see jhelm-mcp-sample) and point an agent at the STREAMABLE HTTP transport.
See the MCP guide.
Full documentation — getting started, architecture, CLI reference, configuration, the REST API, the MCP server, the security model, and the Helm function catalogue — is published at https://www.alexmond.org/jhelm/current/.
./mvnw clean install # build + run tests
./mvnw test -pl jhelm-core # test a single moduleHelm-parity tests (rendering jhelm against helm template over the chart suite) require a
local helm binary on the PATH.