Back to Blog
YAML
CUE
Kubernetes
DevOps
Configuration
CUE, Kyaml, and the Battle to Fix YAML: Devs Are Over It
March 15, 2025
7 min read read
YAML might still be the default in Kubernetes land, but among engineers in the trenches, there's a clear vibe shift: the love affair is over. Sure, YAML files are everywhere—writing deployments, managing secrets, orchestrating CI/CD pipelines. But behind that calm, indentation-sensitive surface, there's growing frustration. It's brittle, unpredictable, and in complex systems? Downright risky.
The good news? There's a wave of tools trying to fix YAML without throwing it out completely. Enter CUE, Kyaml, Jsonnet, and a rising number of alternatives that aim to give developers some much-needed breathing room.
Let's unpack why YAML's reign is being questioned—and how this new breed of tools is flipping the script.
## YAML: The Necessary Evil
Ask any DevOps engineer, and they'll tell you: YAML doesn't run the infrastructure, but it sure does configures most of it. From Kubernetes manifests to GitHub Actions, YAML has become the universal duct tape of declarative configuration. But it wasn't built for this scale.
It's whitespace sensitive. Miss one indentation, and you're in debugging trouble.
It lacks native validation or type checking. That typo in your config? You won't know until something breaks.
It's not DRY. Repetition is everywhere. Reusing config? Good luck with that.
It's not modular. Splitting logic across services or environments is a patchwork of scripts, templates, and wishful thinking.
These aren't minor annoyances—they're systemic headaches for teams managing dozens of microservices across multiple environments.
## The CUE Revolution: Structured, Validated, and Actually Usable
CUE (short for Configure, Unify, Execute) isn't trying to be YAML 2.0—it's a whole new paradigm. Think of it as a superset of declarative configuration that treats YAML like a second-class citizen (in a good way).
One developer in the thread put it bluntly: "Being able to just change one file to update config for a whole load of services, with minimal side effects, all tested, has completely changed my life."
Here's what CUE brings to the table:
**Built-in validation:** You define schemas and values together. No separate linter or pipeline step needed.
**Modular config:** Combine configs across files and directories without hacks.
**Type-safe transformations:** Generate YAML or JSON reliably. No more broken outputs.
**Integrated testing:** You can compile your configs and validate them before they even hit a cluster.
Oh, and it's fast. Really fast. Teams using CUE in production say they've massively reduced config bugs—and regained their sanity.
## Kyaml: YAML, but Cleaner (Sort Of)
If CUE is the bold new world, Kyaml is the minimalist trying to make YAML suck less. It wraps YAML in a structure that's actually maintainable, adding things like:
Structured comments
Programmatic edits
Schema-aware validation
Essentially, Kyaml keeps the YAML syntax but adds tooling so it doesn't feel like writing code in a landmine field. And for devs who want to stay close to the Kubernetes native ecosystem, it plays nicely with Kustomize and other CNCF tools.
That said, some engineers remain skeptical: "Just JSON in YAML syntax," as one user put it. The vibe? If you're going to reinvent YAML, why not just replace it?
## Jsonnet, Dhall, KDL, and the No-YAML Movement
Some devs aren't interested in fixes—they want out. Full stop. And they're turning to tools like:
**Jsonnet** – Think of it as JSON with functions, conditionals, and inheritance. Many teams use it to generate YAML templates cleanly.
**Dhall** – A total rethink of configuration: typed, programmable, and strongly validated.
**KDL (KDL.dev)** – A new structured markup that reads more like Markdown and less like XML or YAML. It's clean, readable, and modern.
**NoYAML** – Yes, it's a real site. And the name kind of says it all.
These tools offer one thing above all else: structure. YAML was built to be human-readable, but at scale, human-readable quickly turns into human-error-prone.
## GitHub Actions, CloudFormation, and the Worst Offenders
Developers weren't shy about calling out specific tools that've pushed YAML to its limit.
"The people who designed GitHub Actions certainly seem to think YAML is a programming language."
"Looking at you, CloudFormation."
These tools use YAML for everything from conditionals to loops to variable substitution—things YAML was never designed to do. It becomes a sort of pseudo-programming language without the benefits of actual programming languages like linting, typing, or composability.
It's no surprise that infrastructure engineers are pushing back.
## AI and YAML: A Love-Hate Relationship
One unexpected twist? AI models, including GPT-based tools, are surprisingly good at generating YAML. That's because YAML's structure, once understood, is extremely pattern-based.
In fact, one developer noted that the inclusion of compilation steps (via CUE or similar) makes AI-generated configs more reliable than hand-written ones in some environments. With proper schemas and validation layers, AI becomes less of a risk and more of a collaborator.
That doesn't mean YAML gets a free pass—but it does mean that the next phase of config tooling will likely have AI in the loop, whether we like it or not.
## So... Is YAML Dead?
Not yet. For better or worse, YAML is still everywhere. It's baked into CI/CD pipelines, Terraform wrappers, Kubernetes CRDs, Helm charts, and more. Replacing it won't be easy.
But the growing dissatisfaction is real. The tooling to escape it—or at least manage it better—is here and getting more powerful every month. CUE, Kyaml, Jsonnet, Dhall: they're not fringe tools anymore. They're survival kits for modern infrastructure.
In the end, YAML isn't going away tomorrow. But if you're building or maintaining complex systems, you've got options now. Better ones. Ones that treat your config not as a side project, but as code worth engineering well.
And if YAML wants to stay in the game? It's got some growing up to do.
Keep Exploring
It Works... But It Feels Wrong - The Real Way to Run a Java Monolith on Kubernetes Without Breaking Your Brain
A practical production guide to running a Java monolith on Kubernetes without fragile NodePort duct tape.
Kubernetes Isn’t Your Load Balancer — It’s the Puppet Master Pulling the Strings
Kubernetes orchestrates load balancers, but does not replace them; this post explains what actually handles production traffic.
Should You Use CPU Limits in Kubernetes Production?
A grounded take on when CPU limits help, when they hurt, and how to choose based on workload behavior.
We Have 2,000+ Service Accounts and No One Knows Who Owns Them - The Multi-Cloud IAM Crisis Nobody Wants to Admit
Why unmanaged machine identities across AWS, Azure, and GCP become a security and governance crisis at scale.