A hands-on project demonstrating Nelm โ the modern Helm 4 alternative โ on a local Minikube cluster. Built with a simple NBA Scores API to showcase terraform plan-like diffs, continuous deployment logging, save/apply plan workflows, auto-rollback, and more โ all running on your laptop.
๐ Read the full walkthrough on Medium: Nelm in Action: The Modern Helm Alternative on Your Laptop
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Minikube Cluster โ
โ (nelm-demo profile) โ
โ โ
NBA Fan โโโโโโโโโบ โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
localhost:9080 โ โ Scores API v1 โ โ Scores API v2 โ โ
โ โ (basic scores) โ โ (+ play-by-play)โ โ
โ โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโ โ
โ โ โ โ
โ Nelm Deployment Engine โ
โ โโโโโโโโโโโโโโโโโโโโโ โ
โ ๐ plan โ see diffs before deploying โ
โ ๐ install โ deploy with live logging โ
โ ๐พ save-plan โ review โ apply later โ
โ โฉ๏ธ auto-rollback โ revert on failure โ
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโ โ
โ โ ConfigMap โ โ Secret Values โ โ
โ โ (welcome) โ โ (encrypted) โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Scores API v1 โ Returns basic NBA box scores (team, score, quarter, arena). The stable "production" version.
Scores API v2 โ Same box scores plus live play-by-play data (player actions, timestamps). The new version you deploy and plan against.
| Nelm Feature | What It Does | Demo Scenario |
|---|---|---|
| Plan (terraform plan) | See exact resource diffs before deploying | Scale replicas, change image tag โ review diff first |
| Save Plan โ Apply Plan | Two-stage deployment: save to file, apply later | --save-plan=plan.gz then --use-plan=plan.gz |
| Continuous Logging | Stream pod logs and events during deployment | Watch real-time output as pods start |
| Auto-Rollback | Automatically revert on deployment failure | Deploy broken image โ Nelm rolls back |
| Chart Render | Template rendering (like helm template) |
Render chart locally without deploying |
| Remote Charts | Deploy charts from remote repos directly | Plan install of bitnami/nginx from OCI registry |
| Release List | List all managed releases | Native Nelm implementation of helm list |
| Helm Compatibility | Deploy standard Helm charts unchanged | Our chart uses standard Chart.yaml + templates/ |
git clone https://github.com/23seriy/nelm-in-action.git
cd nelm-in-action- macOS (scripts use Homebrew; adapt for Linux)
- Docker Desktop running
- ~4 GB RAM available for the Minikube cluster
chmod +x scripts/*.sh
./scripts/01-install-prerequisites.shThis installs minikube and kubectl via Homebrew if not already present.
./scripts/02-start-cluster.shCreates a Minikube cluster (nelm-demo profile) with 2 CPUs and 4 GB RAM, then downloads and installs the Nelm CLI to ~/.local/bin.
Note: If you want to run
nelmcommands directly in your terminal (outside the scripts), make sure~/.local/binis on your PATH:export PATH="${HOME}/.local/bin:${PATH}"Add the line above to your
~/.zshrc(or~/.bashrc) to make it permanent.
./scripts/03-deploy.shBuilds Docker images inside Minikube's Docker daemon (no registry needed), creates the namespace, and deploys the Scores API using nelm release install. Watch the continuous logging in action.
In a separate terminal:
kubectl port-forward svc/scores-api 9080:8080 -n nelm-demoOpen http://localhost:9080 to see the Scores API.
./scripts/04-demo-scenarios.shThis walks you through each Nelm feature interactively.
nelm release plan install -n nelm-demo -r scores-api ./charts/scores-api \
--set replicaCount=3 --set image.tag=v2See the exact diff: replica count change, image tag update, configmap modification โ all shown before anything touches the cluster. Uses Server-Side Apply dry-runs for accuracy.
# Save the plan
nelm release plan install -n nelm-demo -r scores-api ./charts/scores-api \
--set replicaCount=2 --save-plan=plan.gz
# Review, then apply
nelm release install -n nelm-demo -r scores-api ./charts/scores-api \
--use-plan=plan.gzTwo-stage deployment workflow, just like terraform plan -out=plan.gz + terraform apply plan.gz.
nelm release install -n nelm-demo -r scores-api ./charts/scores-api \
--set config.welcomeMessage="Hello from Nelm!"Nelm streams pod logs and Kubernetes events in real-time as the deployment rolls out. The werf.io/show-service-messages: "true" annotation enables event streaming.
nelm chart render ./charts/scores-api --set replicaCount=5 --set image.tag=v2Equivalent to helm template. Renders the chart locally and outputs the resulting manifests.
NELM_FEAT_REMOTE_CHARTS=true nelm release plan install -n nelm-demo -r nginx-remote \
--chart-version 19.1.1 oci://registry-1.docker.io/bitnamicharts/nginxDeploy charts directly from remote OCI registries. No helm repo add needed. Remote chart support requires the NELM_FEAT_REMOTE_CHARTS=true feature flag.
nelm release install -n nelm-demo -r scores-api ./charts/scores-api \
--auto-rollback --resource-readiness-timeout=30s --values nelm/values-broken.yamlDeploy a broken image intentionally. Nelm detects the failure within the readiness timeout and automatically reverts to the previous working state. Like helm upgrade --atomic, but more reliable.
Tip: Use
--resource-readiness-timeout(not--timeout) with--auto-rollback. The global--timeoutkills the entire process without triggering rollback, while--resource-readiness-timeoutfails the readiness check and lets the rollback logic run.
nelm-in-action/
โโโ apps/
โ โโโ scores-api/ # NBA Scores API (Flask)
โ โโโ app.py # v1: basic scores, v2: + play-by-play
โ โโโ Dockerfile
โ โโโ requirements.txt
โโโ charts/
โ โโโ scores-api/ # Helm chart (standard, Nelm-compatible)
โ โโโ Chart.yaml
โ โโโ values.yaml
โ โโโ templates/
โ โโโ _helpers.tpl
โ โโโ configmap.yaml
โ โโโ deployment.yaml # werf.io/show-service-messages annotation
โ โโโ service.yaml
โโโ k8s/ # Kubernetes manifests
โ โโโ namespace.yaml
โโโ nelm/ # Nelm-specific value overrides
โ โโโ values-v2-upgrade.yaml # Upgrade to v2 with play-by-play
โ โโโ values-scale-up.yaml # Scale to 5 replicas + more resources
โ โโโ values-broken.yaml # Broken image for auto-rollback demo
โโโ scripts/ # Automation scripts
โ โโโ 01-install-prerequisites.sh
โ โโโ 02-start-cluster.sh
โ โโโ 03-deploy.sh
โ โโโ 04-demo-scenarios.sh
โ โโโ 05-teardown.sh
โโโ docs/
โ โโโ medium-story.md # Medium article draft
โโโ .gitignore
./scripts/05-teardown.shUninstalls all Nelm releases, deletes the namespace, and removes the Minikube cluster. Your system is back to clean state.
-
Plan before you deploy โ
nelm release plan installshows the exact diff of what will change, using Server-Side Apply dry-runs. No more "deploy and hope" โ you see the impact before committing. -
Two-stage deployments โ Save a plan to a file, pass it through a review/approval gate, then apply it. This brings the terraform workflow to Kubernetes.
-
Real-time visibility โ Nelm streams pod logs and events during deployment. No more switching terminals to run
kubectl logswhile waiting for a rollout. -
Automatic rollback โ
--auto-rollbackreverts to the previous state on failure, more reliably than Helm's--atomic. -
Zero migration cost โ Nelm deploys standard Helm charts unchanged. It uses Helm Releases for state, so you can switch between Helm and Nelm interchangeably.
-
Built-in secrets โ
nelm chart secretmanages encrypted values files natively, no external plugins needed.
| Helm Command | Nelm Equivalent |
|---|---|
helm upgrade --install --atomic -n ns myrls ./chart |
nelm release install --auto-rollback -n ns -r myrls ./chart |
helm uninstall -n ns myrls |
nelm release uninstall -n ns -r myrls |
helm template ./chart |
nelm chart render ./chart |
helm dependency build |
nelm chart dependency download |
helm list |
nelm release list |
| (no equivalent) | nelm release plan install |
| (needs helm-secrets plugin) | nelm chart secret values-file edit |
- Nelm Repository โ Source code and documentation
- werf โ The CI/CD tool that Nelm powers
- Helm Documentation โ For comparison with Nelm features
- Minikube Documentation
MIT โ Use freely for learning, demos, and presentations.