IT Pro is supported by its audience. When you purchase through links on our site, we may earn an affiliate commission. Learn more

What is YAML?

We look at the pros, the cons, and the syntax structure of the YAML programming language

YAML is a programming language that's primarily used for coding configuration files, and is commonly used in tandem with many other languages. Languages such as the Google-developed Flutter framework for Dart and Python both use YAML (.yaml) when writing configuration files for application projects. YAML is also popular among cloud engineers due to its applicability in formatting containerised files.

The language itself is popular thanks to its human-readable nature, with a syntax that's highly intuitive. It’s deemed a more readable and developer-friendly version of JSON or XML.

Unfortunately, it's not the most welcoming for new users, and slight formatting errors can completely break the code. For example, YAML requires a very precise number of spaces across multiple lines to show how data sits in a hierarchy. It’s not always easy for a newcomer to detect where there is a spacing error since most integrated developer environments don’t throw errors for broken YAML code, disrupting the development process, at times.

YAML is actually an initialism, it originally stood for 'Yet Another Markup Language’ but was later renamed to ‘YAML Ain’t Markup Language’ to better emphasise the fact YAML is a language used for data configuration, rather than for documentation.

How does YAML work?

YAML includes features inspired by various patterns and tools embedded in other programming languages in order to ease the process of reading and writing code.

For instance, indentations and new lines may be used to structure code so the way it appears on your screen reflects how it works in practice, such as in Python. You can also configure how deep indentations are to ensure it’s as readable for you as possible, as long as you retain consistency across the code you’re writing. You won’t be able to use a tab character, however, which does dodge the compatibility issue of different operating systems processing tabs in different ways. This also negates the tabs versus spaces issue.

Coders may use YAML to adopt tighter formatting in which the two main data types, lists and arrays, also known as maps, are signified by the [ ] and { } figures. Effectively, this renders YAML a superset of JSON, though it’s outlined for machines, and not people, to read. This language also includes features absent from JSON, such as comments, which it hasn’t been created to support.

The data types might also be nested, as in Pearl, to show more complex structures. There are also features taken from C, HTML and MIME, as well as mail headers, with colons used to denote key:value pairs.

The space function is also included so you wouldn’t need to encase strings and numbers with quotation marks. Types such as integers, clots and Booleans are automatically detected, and there’s support for ISO-formatted dates and times, although you can also establish your own data types.

Structures let you store multiple documents in a single file or refer to content in one part of the document from elsewhere using an anchor (which also lets you duplicate or inherent properties).

That means it's much more flexible than JSON where the hierarchy is fixed, with each child node having only one parent node and while there's a similar option in XML the YAML parse automatically expands the references. That way you get a file that's easier to read and you avoid potential errors copying and pasting parameters where only a handful of things change between different instances, but external systems don't need to be told about the structure of the YAML file.

Lines of code

What are the benefits of YAML?

Related Resource

Powering through to innovation

IT agility drive digital transformation

Whitepaper cover with city scape image and cheetah running through the streetsFree Download

Because the formatting is straightforward and you don't have to worry about closing tags, brackets or quote marks, you can edit YAML in simple text editing tools, and subsections of YAML files are often valid YAML. But there are also plugins to add YAML support to common IDEs like Visual Studio Code and Atom; these can use the YAML Language Server provide autocomplete and Intellisense, and there are several YAML linters to check code for correctness.

You can't write YAML that validates itself the way XML documents can do, based on schema, but if you need to define a schema for your YAML there are languages that let you do that. The combination of YAML and JSON Schema can be powerful: VS Code, the DocFX static web site generator and even the schema for Microsoft's Q# Quantum Chemistry library use them together to achieve a more human-readable version of JSON.

Using YAML files has advantages over typing in command line options: you can create much more complex structures in YAML and you don't have to deal with long and unwieldy strings of parameters. And because they're files, you can check them into source control systems, track versions and changes. Because YAML treats lines as information, it works better with git-based systems for tracking changes than JSON. That makes it easier to treat configuration as code that you manage, test and consume the same way you do all your other code.

Are there any downsides to YAML?

As mentioned previously, very small mistakes made when typing YAML code can lead to file-breaking errors. It was designed to be more easily readable by humans and its syntax reflects that, but developers often run into annoying cases where they have to spend time looking for the slight formatting error that won’t allow them to compile their codebase.

Since YAML is more readable than JSON or XML, reading through a YAML file will more likely lead to finding errors than in other languages. With the kind of configuration you perform in YAML becoming more relevant to the adoption of DevOps, configurations you’re specifying may become more complex and may demand more expertise - regardless of the language you’re writing them in. Arguably, there are better languages, such as TOML, but these haven’t been adopted as widely, so YAML is the language more developers will face.

Higher-grade tools will always be easier to work with versus reading and writing YAML files, and there’s a swelling choice of those for Kubernetes. This choice of tools ranges such as Helm, which streamlines installing and managing Kubernetes apps to managed cloud services, to the kubectl command line. Tools such as Pulumi, which use familiar programming languages like JavaScript or PowerShell, also fall into this camp. YAML is a configuration format, however, used in so many widely-used tools and projects that it’s worth familiarising yourself with it, and understanding its benefits and drawbacks.

Featured Resources

IT best practices for accelerating the journey to carbon neutrality

Considerations and pragmatic solutions for IT executives driving sustainable IT

Free Download

The Total Economic Impact™ of IBM Spectrum Virtualize

Cost savings and business benefits enabled by storage built with IBMSpectrum Virtualize

Free download

Using application migration and modernisation to supercharge business agility and resiliency

Modernisation can propel your digital transformation to the next generation

Free Download

The strategic CFO

Why finance transformation propels business value

Free Download

Most Popular

The big PSTN switch off: What’s happening between now and 2025?

The big PSTN switch off: What’s happening between now and 2025?

13 Mar 2023
Why Amazon is cutting staff from AWS

Why Amazon is cutting staff from AWS

21 Mar 2023
Why – and how – IP can be the hero in your digital transformation success story

Why – and how – IP can be the hero in your digital transformation success story

6 Mar 2023