--- sidebar_label: yamlencode description: The yamlencode function encodes a given value as a YAML string. --- # `yamlencode` Function `yamlencode` encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. This function maps [OpenTofu language values](../../language/expressions/types.mdx) to YAML tags in the following way: | OpenTofu type | YAML type | | -------------- | -------------------- | | `string` | `!!str` | | `number` | `!!float` or `!!int` | | `bool` | `!!bool` | | `list(...)` | `!!seq` | | `set(...)` | `!!seq` | | `tuple(...)` | `!!seq` | | `map(...)` | `!!map` | | `object(...)` | `!!map` | | Null value | `!!null` | `yamlencode` uses the implied syntaxes for all of the above types, so it does not generate explicit YAML tags. Because the YAML format cannot fully represent all of the OpenTofu language types, passing the `yamlencode` result to `yamldecode` will not produce an identical value, but the OpenTofu language automatic type conversion rules mean that this is rarely a problem in practice. YAML is a superset of JSON, and so where possible we recommend generating JSON using [`jsonencode`](../../language/functions/jsonencode.mdx) instead, even if a remote system supports YAML. JSON syntax is equivalent to flow-style YAML and OpenTofu can present detailed structural change information for JSON values in plans, whereas OpenTofu will treat block-style YAML just as a normal multi-line string. However, generating YAML may improve readability if the resulting value will be directly read or modified in the remote system by humans. ## Examples ``` > yamlencode({"a":"b", "c":"d"}) "a": "b" "c": "d" > yamlencode({"foo":[1, 2, 3], "bar": "baz"}) "bar": "baz" "foo": - 1 - 2 - 3 > yamlencode({"foo":[1, {"a":"b","c":"d"}, 3], "bar": "baz"}) "bar": "baz" "foo": - 1 - "a": "b" "c": "d" - 3 ``` `yamlencode` always uses YAML's "block style" for mappings and sequences, unless the mapping or sequence is empty. To generate flow-style YAML, use [`jsonencode`](../../language/functions/jsonencode.mdx) instead: YAML flow-style is a superset of JSON syntax. ## Related Functions - [`jsonencode`](../../language/functions/jsonencode.mdx) is a similar operation using JSON instead of YAML. - [`yamldecode`](../../language/functions/yamldecode.mdx) performs the opposite operation, _decoding_ a YAML string to obtain its represented value.