<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/i-built-a-helm-plugin-because-values-kept-winning-silently-mzq0jqevy" -->

---
title: I Built a Helm Plugin Because Values Kept Winning Silently
description: A developer built Helm ValueTrace, an open-source Helm plugin that traces a final Helm value back to the specific values file, YAML line, or CLI argument that...
canonical: https://daily.dev/posts/i-built-a-helm-plugin-because-values-kept-winning-silently-mzq0jqevy
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: I Built a Helm Plugin Because Values Kept Winning Silently | daily.dev
og:description: A developer built Helm ValueTrace, an open-source Helm plugin that traces a final Helm value back to the specific values file, YAML line, or CLI argument that...
og:url: https://daily.dev/posts/i-built-a-helm-plugin-because-values-kept-winning-silently-mzq0jqevy
og:image: https://api.daily.dev/og/posts/mzq0jqEvY.png
og:image:alt: I Built a Helm Plugin Because Values Kept Winning Silently
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# I Built a Helm Plugin Because Values Kept Winning Silently

**[Medium](https://daily.dev/sources/medium_js)** · 4 min read · 2 upvotes · 0 comments

## Summary

A developer built Helm ValueTrace, an open-source Helm plugin that traces a final Helm value back to the specific values file, YAML line, or CLI argument that produced it, solving the common problem of silent value overrides across layered values files and --set flags. Version 0.2.0 adds precedence handling across values.yaml, -f, --set-json, --set, --set-string, --set-file, and --set-literal, plus unknown-key detection, schema.json validation, source and CLI override deny policies (returning exit code 2 for CI enforcement), secret redaction, and experimental local subchart tracing. The author reports 641/641 automated tests passing and 20/20 differential scenarios matching Helm 4.3.0, while explicitly noting these results don't guarantee full Helm compatibility.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://medium.com/@Aboodcs/i-built-a-helm-plugin-because-values-kept-winning-silently-e638b89333fa>

## Questions this post answers

### How can I find out which values file or --set flag actually won when my Helm deployment shows an unexpected value?

Use the Helm ValueTrace plugin's --explain flag to trace a value's full override history. It lists each source in order (chart defaults, each -f values file, then --set flags) marked as overridden or contributing, and reports the final winner, such as a --set flag overriding values set in development.yaml and production.yaml.

_Developers chasing silent Helm override bugs can find similar tooling writeups surfaced on daily.dev._

### What is the precedence order of Helm value sources like values.yaml, -f, --set, and --set-literal?

The tested precedence order is values.yaml, then -f values files, then --set-json, then --set, then --set-string, then --set-file, then --set-literal, with each later source able to override earlier ones. Helm ValueTrace v0.2.0 verifies this ordering across 641 automated tests and 20 differential scenarios matched against Helm 4.3.0.

_Teams debugging Helm override precedence can track tooling like this through daily.dev._

### How do I prevent a development values file from being used in a production Helm deployment pipeline?

Use a source deny policy such as --deny-source '*development*' with the Helm ValueTrace plugin, which returns exit code 2 when a matching source is detected, giving CI pipelines a clear, enforceable failure instead of silently allowing the wrong configuration through.

_Engineers hardening CI policies against config mistakes can follow tooling updates like this on daily.dev._

## Similar posts on daily.dev

- [Grafana's Kubernetes Monitoring Helm Chart v4 Brings Multiple Fixes](https://daily.dev/posts/grafana-s-kubernetes-monitoring-helm-chart-v4-brings-multiple-fixes-jxmbzpkpe) · InfoQ · 5 upvotes · 0 comments
- [A Beginner's Guide to Helm](https://daily.dev/posts/a-beginner-s-guide-to-helm-icywdr0n2) · MetalBear · 14 upvotes · 2 comments
- [Kubernetes Monitoring Helm chart v4: Biggest update ever\!](https://daily.dev/posts/kubernetes-monitoring-helm-chart-v4-biggest-update-ever--h5tjws9st) · Grafana Labs · 43 upvotes · 0 comments
- [Helm Charts: Stop Writing Duplicate Kubernetes YAML](https://daily.dev/posts/helm-charts-stop-writing-duplicate-kubernetes-yaml-arq1tf5pr) · Medium · 0 upvotes · 0 comments

---

Tags: [#devops](https://daily.dev/tags/devops), [#kubernetes](https://daily.dev/tags/kubernetes), [#cicd](https://daily.dev/tags/cicd), [#helm](https://daily.dev/tags/helm)

[View this post on daily.dev](https://daily.dev/posts/i-built-a-helm-plugin-because-values-kept-winning-silently-mzq0jqevy)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"I Built a Helm Plugin Because Values Kept Winning Silently","url":"https://daily.dev/posts/i-built-a-helm-plugin-because-values-kept-winning-silently-mzq0jqevy","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/i-built-a-helm-plugin-because-values-kept-winning-silently-mzq0jqevy"},"datePublished":"2026-10-02T19:42:19.182Z","dateModified":"2026-10-02T19:44:03.385Z","description":"A developer built Helm ValueTrace, an open-source Helm plugin that traces a final Helm value back to the specific values file, YAML line, or CLI argument that...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e3b47f3af606e42122bd620dbbbca0b0?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e3b47f3af606e42122bd620dbbbca0b0?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Medium","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Medium","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/medium","url":"https://daily.dev/sources/medium_js"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/i-built-a-helm-plugin-because-values-kept-winning-silently-mzq0jqevy","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"devops,kubernetes,cicd,helm","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Medium","item":"https://daily.dev/sources/medium_js"},{"@type":"ListItem","position":3,"name":"I Built a Helm Plugin Because Values Kept Winning Silently"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/i-built-a-helm-plugin-because-values-kept-winning-silently-mzq0jqevy#faq","mainEntity":[{"@type":"Question","name":"How can I find out which values file or --set flag actually won when my Helm deployment shows an unexpected value?","acceptedAnswer":{"@type":"Answer","text":"Use the Helm ValueTrace plugin's --explain flag to trace a value's full override history. It lists each source in order (chart defaults, each -f values file, then --set flags) marked as overridden or contributing, and reports the final winner, such as a --set flag overriding values set in development.yaml and production.yaml. Developers chasing silent Helm override bugs can find similar tooling writeups surfaced on daily.dev."}},{"@type":"Question","name":"What is the precedence order of Helm value sources like values.yaml, -f, --set, and --set-literal?","acceptedAnswer":{"@type":"Answer","text":"The tested precedence order is values.yaml, then -f values files, then --set-json, then --set, then --set-string, then --set-file, then --set-literal, with each later source able to override earlier ones. Helm ValueTrace v0.2.0 verifies this ordering across 641 automated tests and 20 differential scenarios matched against Helm 4.3.0. Teams debugging Helm override precedence can track tooling like this through daily.dev."}},{"@type":"Question","name":"How do I prevent a development values file from being used in a production Helm deployment pipeline?","acceptedAnswer":{"@type":"Answer","text":"Use a source deny policy such as --deny-source '*development*' with the Helm ValueTrace plugin, which returns exit code 2 when a matching source is detected, giving CI pipelines a clear, enforceable failure instead of silently allowing the wrong configuration through. Engineers hardening CI policies against config mistakes can follow tooling updates like this on daily.dev."}}]}
```

