Fundamentos de YAML
YAML es un formato de datos cuyo ámbito lo marca la indentación, estandarizado como YAML 1.2 y pensado para archivos de configuración que las personas escriben y los programas leen. El anidamiento viene de los espacios en lugar de las llaves, los escalares sin comillas reciben un tipo por inferencia y los comentarios empiezan con #. Esas tres comodidades provocan casi todos los errores de YAML del mundo real, así que esta guía enseña las reglas y las trampas juntas.
Fundamentos de YAML: explicación
YAML es el formato en el que llega la configuración. Los manifiestos de Kubernetes, los workflows de GitHub Actions, los archivos de docker-compose y los playbooks de Ansible son todo YAML: mapas anidados escritos con espacios, listas escritas con guiones y apenas un corchete a la vista. El nombre significó originalmente Yet Another Markup Language; sus autores lo resignificaron como YAML Ain't Markup Language — la lectura más exacta, porque describe datos, no documentos.
El estándar vigente es YAML 1.2 (2009), y su cambio más importante pasa desapercibido: en 1.1 las palabras sueltas yes, no, on y off se tipaban como booleanos, y en 1.2 no. La mayoría del software sigue cargando las reglas de 1.1 por defecto, así que la misma línea de texto puede significar cosas distintas en herramientas distintas. YAML 1.2 también hizo que casi todos los documentos JSON fueran YAML válido — el resumen de la gramática más limpio que cabe en una frase.
Esta guía cubre lo que necesita alguien que empieza — reglas de indentación, tipado de escalares, comillas, escalares en bloque, anclas y comentarios — y termina con una lista exacta de lo que los convertidores de este sitio aceptan y rechazan. Todo se ejecuta en tu navegador y no se sube nada, así que puedes pegar los ejemplos y probarlos sin riesgo.
Como YAML 1.2 trata casi todos los documentos JSON como YAML válido, cualquier configuración que puedas reducir a llaves tiene herramientas al instante: pégala en el formateador de JSON y dará formato, validará e informará de la línea y la columna exactas de cada error de sintaxis.
Cuando un archivo nuevo podría ser honestamente de cualquiera de los dos formatos, la comparación de JSON y YAML reúne las ventajas e inconvenientes en una única tabla de decisión y te dice qué formato le conviene a cada tipo de documento.
La indentación es la sintaxis
En YAML, los espacios en blanco no son decoración — son toda la estructura. Un mapeo es una clave, dos puntos, un espacio y un valor; un valor anidado se escribe en la línea siguiente, con más indentación, y dos líneas con la misma indentación son hermanas. Los tabuladores están prohibidos sin matices: la especificación no puede decidir cuánto mide un tabulador, así que los parsers los rechazan en lugar de adivinar. Los editores siguen insertando tabuladores al copiar y pegar, y por eso hay tantos archivos que parecen perfectos y se niegan a parsearse.
La convención es dos espacios por nivel. Cuatro o seis son igual de válidos — la especificación solo prohíbe los tabuladores — pero dos es lo que usan Kubernetes y Compose, lo que espera cualquier linter y lo que evita que los manifiestos profundos se salgan por la derecha. Mezclar anchuras dentro de un archivo es así como nacen los errores de indentación, así que elige dos y deja que el editor lo imponga.
- Un nivel = cualquier número fijo de espacios; dos es la convención.
- Los tabuladores en la indentación los rechazan los parsers; no se convierten.
- Un elemento de secuencia puede quedar a la altura de la indentación de su clave padre — el guion es la marca.
- Los valores también pueden escribirse en línea con estilo de flujo: ports: [8080].
Un mapeo anidado con una secuencia
services:
web:
image: nginx:1.27
ports:
- "8080:80"
cache:
image: redis:7El árbol que construye un parser
services ├─ web │ ├─ image: "nginx:1.27" │ └─ ports: ["8080:80"] └─ cache └─ image: "redis:7"
Los escalares y el problema de Noruega
Los valores entre comillas son cadenas, siempre. Los valores sin comillas reciben un tipo por inferencia, y la inferencia es de donde viene la reputación de YAML: un 8080 suelto se convierte en el número 8080 y un valor vacío se convierte en null, lo cual ayuda — hasta que la inferencia asigna un tipo a algo que tú querías como texto, como un código de país o una cadena de versión.
El fallo clásico es una lista de códigos de país ISO en la que NO — Noruega — se parsea como el booleano false: el problema de Noruega, gracioso hasta que desactiva en silencio un flag de despliegue. La versión 1.1 fue mucho más lejos, como muestra la tabla. El esquema central de 1.2 solo resuelve true y false como booleanos y lee el resto de la tabla de abajo como cadenas de texto o números decimales — pero como muchísimo software desplegado sigue aplicando las reglas de 1.1, el hábito defensivo es entrecomillar todo lo que deba seguir siendo una cadena.
| Lo que escribes | YAML 1.1 lo parsea como | El esquema central de YAML 1.2 lo parsea como |
|---|---|---|
| no | el booleano false | la cadena "no" |
| on / off | el booleano true / false | las cadenas "on" / "off" |
| 12:30 | el entero 750 (sexagesimal) | la cadena "12:30" |
| 0640 | el entero 416 (octal) | el entero 640 (decimal) |
| 2026-09-19 | un objeto de fecha | la cadena "2026-09-19" |
| ~ | null | null |
Comillas y escalares en bloque
YAML ofrece tres formas de escribir una cadena. Sin comillas es la opción por defecto y vale para la mayoría de los valores. Las comillas simples son literales — el único escape es duplicar la comilla ('it''s fine'). Las comillas dobles admiten escapes con barra invertida como \n y \t, el estilo que usa JSON. La regla defensiva sigue en pie: si un valor contiene algo que pudiera confundirse con estructura — dos puntos, signos #, palabras reservadas — entrecomíllalo a propósito.
El texto multilínea usa escalares en bloque. Un bloque literal, escrito con |, conserva cada salto de línea tal como se escribe — la forma adecuada para scripts de shell y certificados. Un bloque plegado, escrito con >, une las líneas en un solo párrafo fluido — la forma adecuada para una descripción larga. Ambos aceptan un indicador de recorte: |- elimina el salto de línea final, |+ conserva todos los del final y un | normal conserva exactamente uno.
Dos estilos de escalar en bloque
script: | set -e make build make deploy summary: > Deploys finish in under a minute.
A qué resuelven los escalares
script: "set -e\nmake build\nmake deploy\n" summary: "Deploys finish in under a minute.\n"
Anclas, alias y reutilización
YAML permite que un nodo lleve un nombre que otros nodos referencian. Escribe &name después de una clave para anclar su valor; escribe *name en cualquier otro sitio para crear un alias, y el parser sustituye una copia del nodo anclado. Varios jobs que comparten una política de reintentos apuntan así a una sola definición, y el cambio se aplica una sola vez.
Dos extensiones se apoyan en este mecanismo. Las claves de fusión, escritas <<: *name, insertan todas las claves de un mapeo anclado en el actual — algo común en archivos de Compose y Ansible, y una convención de la era 1.1 que nunca entró en la gramática central de 1.2. Las anclas también pueden abusarse: alias anidados dentro de alias permiten que diez definiciones se expandan a un millón de nodos — el ataque billion laughs — así que los parsers en los que confías presupuestan la expansión e informan del límite en lugar de quedarse colgados.
Un ancla y dos alias
defaults: &base retries: 3 timeout: 30s staging: retries: 3 timeout: 30s log: *base
Lo que recibe el consumidor
defaults: { retries: 3, timeout: "30s" }
log alias: { retries: 3, timeout: "30s" } (staging.log)Comentarios y múltiples documentos
Los comentarios empiezan con # y llegan hasta el final de la línea; una # dentro de una cadena entre comillas no cuenta. Esta es la mayor ventaja ergonómica de YAML frente a JSON, que eliminó los comentarios a propósito, y la razón por la que la configuración mantenida por personas gravita hacia aquí: el archivo se explica a sí mismo en línea, y en las revisiones se cita una línea y su comentario en el mismo fragmento del diff.
Un archivo también puede contener varios documentos, separados por líneas de tres guiones; un --- inicial es la marca opcional de comienzo y ... cierra un documento. Así es como un mismo artefacto lleva una configuración de staging y una de producción lado a lado. Los convertidores de este sitio parsean todos los documentos y operan sobre el último, igual que el comportamiento habitual de las CLI.
Dos documentos, un archivo
env: staging region: eu-1 --- env: production region: us-2
Lo que usan los convertidores
env: production region: us-2 (the last document)
Lo que aceptan los convertidores de este sitio
Todo parser de YAML es el parser de un subconjunto — la gramática completa de 1.2 es famosamente enorme — y un convertidor gana confianza declarando su subconjunto en lugar de dejarte descubrirlo a base de fallos. La librería YAML de este sitio implementa el esquema central de 1.2 sobre las construcciones de bloque y de flujo que aparecen en archivos de configuración reales, con límites deliberados donde la especificación permite trabajo ilimitado. La tabla es el contrato.
| Característica | Estado aquí | Comportamiento |
|---|---|---|
| Mapeos y secuencias en bloque | Aceptado | Anidados a cualquier profundidad, dos espacios o cualquier indentación consistente |
| Estilo de flujo [1, 2] y {a: 1} | Aceptado | Incluidos documentos JSON completos pegados tal cual |
| Comentarios y escalares entrecomillados | Aceptado | Ambos estilos de comillas, todos los estilos de escalar en bloque |
| Tabuladores en la indentación | Rechazado | Se rechazan indicando el número de la línea problemática |
| Claves explícitas (? key) | Rechazado | Sin equivalente en JSON — las claves de JSON deben ser cadenas |
| Claves de fusión (<<) | Rechazado | Expande la fusión a mano, o crea alias de los valores directamente |
| Directiva %YAML 1.1 | Con aviso | Se aplica el esquema central de 1.2; yes y no siguen siendo cadenas |
| Múltiples documentos | Parseado | Los convertidores operan sobre el último documento |
| Expansión de alias | Con presupuesto | Las cadenas de alias profundas se acotan y se informa del límite; nunca se desenrollan |
Preguntas frecuentes
¿Se sube mi YAML cuando uso estos convertidores?
No. Cada convertidor de este sitio se ejecuta como JavaScript dentro de tu pestaña del navegador; no hay ningún paso de subida ni backend que lo reciba. Compruébalo en DevTools: abre el panel de red, convierte un archivo y observa que la lista de peticiones se queda vacía. La Content-Security-Policy del sitio también bloquea las conexiones salientes de los scripts de la página.
¿Por qué mi archivo no se parsea cuando parece correcto?
Tres culpables explican la mayoría de los casos: un tabulador escondido en la indentación (los parsers rechazan los tabuladores sin matices), una costumbre de YAML 1.1 como un no suelto o una clave de fusión que un parser de 1.2 no va a adivinar, o un escalar sin comillas al que la inferencia asignó un tipo que no querías. Un buen convertidor señala la línea; el de este sitio lo hace.
¿Es YAML un superconjunto de JSON?
En YAML 1.2, casi siempre sí: un documento JSON con sus llaves y corchetes intactos se parsea como YAML sin cambios. Al revés nunca es cierto. Los comentarios, las anclas, las claves sin comillas, los escalares en bloque multilínea y los múltiples documentos en un archivo no tienen representación en JSON, así que convertir YAML a JSON es una puerta de sentido único para cualquier archivo que los use.
¿Cómo evito el problema de Noruega?
Entrecomilla cada escalar cuyo tipo te importe. Un NO suelto se parsea como el booleano false bajo las reglas de YAML 1.1, y on, off, yes y no van detrás; el esquema central de 1.2 los mantiene como cadenas, pero mucho software desplegado sigue cargando 1.1. Entrecomillar códigos de país, feature flags y cadenas de versión es el hábito de coste cero.
¿Debería usar anclas o simplemente repetir los valores?
Repite los valores cuando las copias pueden divergir; ancla y crea alias cuando de verdad son un solo hecho definido una vez. Las anclas mantienen la configuración DRY, pero cuestan legibilidad local — el lector tiene que saltar a la definición. Las claves de fusión son la parte menos portable: muchos parsers, incluidos los convertidores de este sitio, las rechazan en lugar de adivinar el orden de inserción.
¿Dos espacios o cuatro espacios para la indentación de YAML?
Ambos son válidos — la especificación prohíbe los tabuladores, no cualquier número de espacios — así que esto es convención, no corrección. Ganaron los dos espacios: Kubernetes y Compose los usan, cualquier linter los trae por defecto y el anidamiento profundo sigue siendo legible. Lo que importa es no mezclar nunca anchuras en un mismo archivo.
¿Dónde puedo leer las normas citadas aquí?
¿Qué herramientas relacionadas debería usar después?
- Qué es JSONGuía en lenguaje sencilloAbrir
- JSON vs YAMLComparativa directaAbrir
- Formatear JSONIndenta, ordena claves y quita comentariosAbrir
- Sintaxis de expresiones cronGuía en lenguaje sencilloAbrir
- Expresión cronLee una programación y mira cuándo se ejecuta de verdadAbrir
- Herramientas de textoCompara, convierte y transforma texto plano y código.Abrir