That's a Lot of YAML

Hacker News Top News

Summary

A satirical article pointing out various flaws and quirks of YAML in DevOps and programming contexts, such as parsing errors and configuration errors in tools like Kubernetes.

No content available
Original Article
View Cached Full Text

Cached at: 08/28/26, 09:47 AM

# 🚨🚨 That's a lot of YAML 🚨🚨 Source: [https://noyaml.com/](https://noyaml.com/) \# Made with πŸ’– by https://ghuntley\.com after one too many CustomResourceDefinitions \# Improvements welcome, mash the ↗️ Octocat ↗️ and share how YAML makes your life better\. No: Body: Wants: To: Write: \- YAML \# πŸ€” Why YAML is the right devops technology for you πŸ€” \# \# \- 100% test coverage, always compiles just fine with no errors or warnings, always shippable \# \- no enforced error handling during development because runtime "panic at the disco" in production is dope \# \- "something broke" is way better than stack traces with line numbers \# \- you need to burn hours as part of setting up a new CI pipeline \# \- safe choice with unquestionable industry adoption, "used by kubernetes" \# \- is marginally better than windows\.ini \# \- unlike json \[1\]\[2\], YAML supports comments \# \- no official documentation \(other than a specification for implementers\) is totally fine \# \- you need a super safe way to "execute this code" \# 🍿 wait a sec, did you say "executable yaml"?? 🍿 \# \- https://ruby\-doc\.org/stdlib\-2\.4\.0/libdoc/yaml/rdoc/YAML\.html\#module\-YAML\-label\-Security \# \- https://www\.php\.net/manual/en/function\.yaml\-parse\.php\#refsect1\-function\.yaml\-parse\-notes \# \- https://securitylab\.github\.com/research/swagger\-yaml\-parser\-vulnerability/ \# \- https://github\.com/yaml/pyyaml/wiki/PyYAML\-yaml\.load\(input\)\-Deprecation \# 🚨 Anyone who uses YAML long enough will eventually get burned when attempting to abbreviate Norway 🚨 \# \`NO\` is parsed as a boolean type, which with the YAML 1\.1 spec, there are 22 options to write "true" or "false\." \# You have to wrap "NO" in quotes to get the expected result\. NI: Nicaragua NL: Netherlands NO: Norway \# πŸ’£\! \# 🚨 Anyone wondering why their first seven Kubernetes clusters deploy just fine, and the eighth fails? 🚨 \- 07 \- 08 \# Results in \[ 7, "08" \] \# YAML knows that, when you have something that looks like the time of day, \# what you \_really\_ wanted is the time of seconds since midnight timeOfDay: whatYouWrote: 04:30 \# And when you parse this file and serialize it again, you may get before YAML 1\.2 \.\.\. whatYouSurelyMeant: 16200 \# Have fun debugging this one\! whatYouShouldHaveWritten: \!\!str 04:30 \# YAML is the super best way to encode Octal \(tm\) and learning the hard way that Kubernetes uses YAML 1\.1 \# is a DevOps rite of passage\. Below YAML 1\.2 a large integer is automatically converted to octal\.\[3\] \- YAML 1\.1 uses \`0666\` notation\. \- YAML 1\.2 uses \`0o666\` notation \# YAML is great for specifying package versions, as long as you like versions being parsed as floating point\. versions: foo: 1\.7 \# These two packages have the same version\. bar: 1\.70 \# These two packages have the same version\. fizz: 1\.7\.0 \# But these two packages have different versions\. buzz: 1\.70\.0 \# But these two packages have different versions\. \# 🀒 I have recently been learning GitHub Actions \# \# I just made 8 commits/pushes in one hour, and the last commit message, in its entirety, was: \# \# "I don't really like yml" \- https://twitter\.com/eric\_sink/status/1430954572848287744 \# 😭 If SQL were built on YAML 😭 SELECT: \- num \- name FROM: \- customers WHERE EXISTS: SELECT: \- name FROM: \- orders WHERE: AND: \- EQUALS: \- customers\.num \- orders\.customer\_num \- LT: \- price \- 50 \# Speaking of CI, did you know that 8\-character SHAs could be all numbers? \# If the system that parses \`my\.flaky\_version\` is typed, it will happily explode 2% of the time\. my: \# this will be a string ~98% of the time flaky\_version: $\{GIT\_SHORT\_SHA\} \# this will be a string ~100% of the time string\_version: "$\{GIT\_SHORT\_SHA\}" \# him: "Look, I bought a box of DevOps" \# her: "You can't just buy a box of DevOps" \# 🀣 https://twitter\.com/mike\_kaufmann/status/1454712996933025794 \# "Don't forget the extra line break otherwise all shit goes to hell" \# πŸ‘‰ https://github\.com/IronScheme/IronScheme/commit/2f847793946935bd9143cdfb064f9006f763df68 \# 🀑 Doing the same thing with different CI providers 🀑 \# Azure devops jobs: \- job: job1 steps: \- script: chmod \+x \./script\.sh \- script: \./script\.sh \# CircleCI jobs: job1: steps: \- checkout \- run: "execute\-script\-for\-job1" \# Some future CI system, probably jobs: \- steps: job1 \- step1: \- script: chmod \+x \./script\.sh \- step2: \- run: "execute\-script\-for\-job1\-inside\-step2" \# If you're building a YAML file for Cloudformation for a DashboardBody for Cloudwatch \# and theres a SEARCH function? you need to escape the already\-escaped and close the \# whole JSON with double\-quotes: "\{ \\"search\(' var=\\\\\\"blue\\\\\\" \. \# 🍻 Overheard in a pub \- The problem with YAML they did one thing well\. Shitty boiler plate\. Then everyone thought it was a good idea\. \# πŸ’Š Mega twitter thread of pain \# πŸ‘‰ https://twitter\.com/brunoborges/status/1098472238469111808 πŸ‘ˆ \# πŸ“’ Mandatory reading πŸ“’ \# \# "Today we’re going to look at some general problems with the YAML format" \# πŸ‘‰ https://arp242\.net/yaml\-config\.html πŸ‘ˆ \# \# "We replaced 1,000 lines of YAML with 10 structs and people started contributing again" \# πŸ‘‰ https://tinyurl\.com/lessons\-in\-over\-engineering πŸ‘ˆ \# \# "What if you used the same language and tools you use to define your app to define your infrastructure?" \# πŸ‘‰ https://twitter\.com/ellism/status/1008728148131733504 πŸ‘ˆ \# \# "A YAML file is almost always still 'valid' even if it is trunca" \# πŸ‘‰ https://twitter\.com/colmmacc/status/1057316977457324032 πŸ‘ˆ \# \# "the bug was that the YAML parser ignored the negative signs \.\.\. so negative GPS coordinates became positive ones" \# πŸ‘‰ https://twitter\.com/colmmacc/status/1063470541464461312 πŸ‘ˆ \# \# "Every YAML parser is a custom YAML parser" \# πŸ‘‰ https://matrix\.yaml\.info/valid\.html πŸ‘ˆ \# \# "There are 63 different ways to write multi\-line strings in YAML" \# πŸ‘‰ https://stackoverflow\.com/a/21699210/1094085 πŸ‘ˆ \# \# "Toolchain version 1\.70 is parsed as 1\.7" \# πŸ‘‰ https://github\.com/dtolnay/rust\-toolchain/issues/112 πŸ‘ˆ \# \# "StrictYAML Design Justifications" \# πŸ‘‰ https://hitchdev\.com/strictyaml/why/ πŸ‘ˆ \# πŸ’­ Alternative options and approaches to DevOps \(cough yamlops cough\) πŸ’­ \# \- https://media\.ccc\.de/v/36c3\-11172\-leaving\_legacy\_behind \# \- https://nickel\-lang\.org/ \# \- https://dhall\-lang\.org/ \# \- https://cuelang\.org/ \# \- https://jsonnet\.org/ \# \- https://www\.youtube\.com/watch?v=tl9I\-R83lKo \# \- https://github\.com/xtruder/kubenix/tree/kubenix\-2\.0/examples/nginx\-deployment \# \- https://github\.com/nin\-jin/tree\.d \# 🏁 If you are vendor of developer tooling that is configurable via YAML, please do this 🏁 \# \- https://twitter\.com/kzu/status/1163864030911578112 \# \- https://twitter\.com/timeyoutakeit/status/1431052862138769408 \# πŸ“– Footnotes πŸ“– \# \[1\] You can do comments in json by \`\{"//": "A way to use comments in json"\}\` but it's icky\. \# \[2\] "Does ansible have a json schema? Yaml aint so bad with a schema\."? \# \[3\] Also see \`python2 \-c 'print 011' && echo $\(\(011 \+ 1\)\)\` \# and finally, here's some ⭐️⭐️⭐️⭐️⭐️ feedback from reddit\.com: \- I need to burn the very motherboard this site runs from\. It’s that awful\. \- This is the worst website I've ever seen \- I agree with the author in principle but that website is inexcusable\. I'm going to add YAML config to my projects on Monday just to spite that horrific "website"\. \- Wtf is this website and why does it repeatedly pop up my phone's keyboard \- This Website is a giant editable textfield \- Why?\!? \- Because it’s a good idea to demonstrate good standards while standing on one’s soapbox \- The author of THAT website wants to tell the rest of us how to program\. \- While I agree with the spirit of the website \(fuck yaml\), the design decisions of the author are questionable to say the least\. \- The good news \(I realised\) was that you can select all the text of the site, and then delete it\. Problem solved\. \- Fuck this website\. Maybe if this person stopped bitching about yaml their website wouldn't blow\. \- Yeah, I’m not going to take advice on best practices from a guy whose website is a giant editable text field with unclickable hyperlinks\. \# ps\. By design, this website is as usable as YAML\. πŸ’• [https://github.com/ghuntley/noyaml](https://github.com/ghuntley/noyaml)

Similar Articles

In Defense of YAML

Lobsters Hottest

A blog post from Posit defends YAML against the prevailing consensus that TOML is superior, tracing the history of configuration formats and arguing that YAML's specification and tooling have evolved to address past criticisms.

YAML? That's Norway Problem

Hacker News Top

Explores the infamous YAML 'Norway problem' where the country code 'NO' is parsed as a boolean false, tracing its history and offering solutions like quoting.

"Respectful" YAML patching in Rust

Lobsters Hottest

The article evaluates various Rust libraries to identify the best tools for programmatically patching YAML files while preserving original formatting and comments.