Skip to content
Back to Blog
informational

¿Qué es YAML? El lenguaje de datos amigable para humanos

2026-05-17 9 min read

YAML en términos sencillos

El nombre completo de YAML es 'YAML Ain't Markup Language' (YAML no es un lenguaje de marcado), una broma recursiva que te dice lo que no es. No está diseñado para marcar documentos como HTML. En cambio, YAML es un formato de serialización de datos diseñado para ser legible y editable por una persona sin necesidad de tener un manual abierto en otra pestaña. Apareció por primera vez en 2001, una creación de Clark Evans, Ingy döt Net y Oren Ben-Kiki. Desde entonces, se ha convertido en el lenguaje de configuración predeterminado para herramientas esenciales como Kubernetes, Ansible, GitHub Actions, Docker Compose y Ruby on Rails. En esencia, YAML utiliza la indentación para representar estructuras de datos como pares clave-valor y listas. Aquí no encontrarás corchetes angulares ni llaves. Un archivo Docker Compose simple lo demuestra claramente: version: '3.9' services: web: image: nginx:latest ports: - '80:80' Compara eso con el JSON equivalente y el atractivo es obvio. Sin comas, sin comillas en las claves y sin llaves de cierre que puedan desajustarse. La contrapartida es que la indentación se vuelve significativa. Equivócate por un solo espacio y el archivo podría no ser parseado o, peor aún, significar silenciosamente algo completamente distinto. Esta tensión entre la facilidad de lectura y la estructura estricta define la experiencia YAML. Familiarizarse con él es la clave para usar bien el formato.

Cómo YAML estructura los datos: Los tres bloques de construcción

Cada documento YAML se compone de las mismas partes básicas: escalares, secuencias y mapeos. Un escalar es simplemente un valor único, como una cadena de texto, un número, un booleano o nulo. YAML es inteligente al inferir el tipo, lo cual es útil en su mayor parte, pero a veces puede ser contraproducente. La cadena 'yes' se interpreta como un booleano `true` en el estándar YAML 1.1 más antiguo, que todavía es utilizado por PyYAML y otras herramientas heredadas. YAML 1.2, sin embargo, lo trata correctamente como una cadena de texto simple. Esa brecha de versiones ha causado errores de producción en el mundo real, por lo que necesitas saber absolutamente qué analizador están usando tus herramientas. Una secuencia es simplemente una lista ordenada. La escribes con un guion inicial y un espacio: fruits: - apple - banana - mango Un mapeo es un conjunto de pares clave-valor, que es lo que verás más a menudo en los archivos de configuración. Puedes anidar mapeos a cualquier profundidad, y la estructura se define puramente por una indentación consistente. La especificación YAML es clara al respecto: debes usar espacios, nunca tabulaciones. YAML también ofrece potentes características para reducir la repetición. Los anclajes (&) y alias (*) te permiten definir un bloque de datos una vez y reutilizarlo en otros lugares. Esto es un salvavidas en los pipelines de CI/CD donde múltiples trabajos pueden compartir exactamente el mismo bloque de variables de entorno. Para cadenas largas, YAML tiene dos estilos de bloque: el escalar de bloque literal (|) conserva los saltos de línea exactamente, mientras que el escalar de bloque plegado (>) los colapsa en espacios. Esto es perfecto para comandos de shell largos que quieres mantener legibles en el archivo sin añadir saltos de línea reales al propio comando.

Dónde se utiliza realmente YAML

YAML prospera en el mundo de la infraestructura y las herramientas para desarrolladores. Los números no mienten. A partir de 2024, GitHub Actions procesa más de 100 millones de ejecuciones de flujos de trabajo diariamente, cada una impulsada por un archivo .yml en el directorio .github/workflows de un proyecto. Kubernetes, el motor detrás de la mayoría de las aplicaciones nativas de la nube, se basa en YAML para definir cada recurso: Deployments, Services, ConfigMaps, lo que sea. Una aplicación de microservicios típica puede acumular fácilmente cientos de archivos YAML. Ansible, la herramienta de automatización de TI utilizada por más de 25,000 organizaciones (según Red Hat), utiliza YAML para todos sus playbooks. Una tarea estándar en un playbook de Ansible se ve así: - name: Install nginx ansible.builtin.package: name: nginx state: present Más allá de la esfera DevOps, encontrarás YAML en generadores de sitios estáticos como Jekyll, que utiliza el front matter YAML para almacenar metadatos en archivos Markdown. Herramientas de prueba de API como Hoppscotch e Insomnia lo usan para la configuración del entorno. Incluso los pipelines de ciencia de datos lo utilizan; herramientas como DVC (Data Version Control) rastrean los parámetros de los experimentos en archivos YAML. Un lugar donde no verás mucho YAML es en el intercambio de datos entre servicios web. Las API REST utilizan casi universalmente JSON para los cuerpos de solicitud y respuesta. ¿Por qué? Porque los analizadores JSON están integrados en cada navegador y la estrictez del formato no deja lugar a ambigüedades. Esta es la distinción clave: YAML es para humanos que editan archivos en disco; JSON es para máquinas que pasan datos a través de una red. Recordar esa simple regla evitará mucha confusión sobre qué formato elegir.

YAML vs. JSON vs. TOML: Eligiendo el formato correcto

Al elegir un formato de configuración, generalmente estás decidiendo entre YAML, JSON y TOML. Cada uno tiene una personalidad distinta. JSON (JavaScript Object Notation) es el más estricto. Cada cadena debe ir entre comillas, cada lista y objeto debe cerrarse explícitamente, y no tiene soporte para comentarios. Este último punto es una fuente importante de frustración para los desarrolladores que desean anotar la configuración. Pero la fortaleza de JSON es su análisis rígido e inequívoco; cualquier par de analizadores compatibles producirá estructuras de datos idénticas a partir de la misma entrada. El tamaño de sus archivos es generalmente comparable al de YAML para configuraciones típicas. TOML (Tom's Obvious, Minimal Language) fue creado para solucionar la falta de comentarios de JSON y las complicadas reglas de espacios en blanco de YAML. Utiliza una sintaxis estilo INI y ha sido adoptado por el gestor de paquetes Cargo de Rust y el estándar pyproject.toml de Python. TOML es fantástico para configuraciones planas o con anidamiento superficial, pero se vuelve torpe y verboso cuando necesitas representar datos profundamente anidados. ¿Entonces, dónde encaja YAML? YAML es el claro ganador cuando tu configuración tiene una profundidad de anidamiento significativa, cuando puedes usar anclajes y alias para eliminar la repetición, o cuando personas no técnicas necesitan editar el archivo. Es la elección equivocada cuando tu equipo está constantemente luchando contra errores de indentación o cuando la inferencia de tipos crea sorpresas (como el infame problema de Noruega, donde el código de país 'NO' se interpretó como el booleano `false`). Si necesitas convertir entre formatos, CocoConvert ofrece conversiones fiables de YAML a JSON y de JSON a YAML. Sin embargo, no soporta TOML como formato de salida. Si necesitas pasar de YAML a TOML, tendrás que recurrir a una herramienta de línea de comandos como `yq`. Es mejor saberlo de antemano.

Errores comunes de YAML y cómo evitarlos

La fuente más común de errores YAML es la indentación inconsistente. Cualquiera que haya pasado una hora depurando un pipeline de CI solo para encontrar un solo espacio mal colocado conoce este dolor. A diferencia de Python, que acepta cualquier ancho de indentación consistente, YAML requiere que las claves hermanas en el mismo nivel tengan exactamente la misma indentación. Mezclar indentación de dos y cuatro espacios en un mismo archivo causará un error de análisis o, mucho peor, reestructurará silenciosamente tus datos. La única forma segura de trabajar es configurar tu editor para que use espacios en lugar de tabulaciones y aplique un tamaño de indentación consistente. Dos espacios es el estándar de facto para Kubernetes y GitHub Actions. Los caracteres especiales sin comillas son otra trampa. Dos puntos seguidos de un espacio son un separador clave-valor, por lo que una cadena como 'http://example.com:8080' debe ir entre comillas. Olvídate de las comillas y obtendrás un error de análisis. De igual manera, los valores que comienzan con `{`, `[` o `%` necesitan comillas porque tienen un significado especial en la sintaxis YAML. Luego están las sorpresas de coerción de tipos. Ya mencionamos cómo 'no' puede convertirse en `false`. ¿Pero sabías que los números con ceros iniciales pueden interpretarse como enteros octales? El valor 0755, un permiso de archivo Unix común, se convierte en decimal 493 a menos que lo cites. Las fechas son otro campo minado; 2024-01-01 sin comillas se convierte en un objeto de fecha, no en una cadena, lo que puede romper herramientas que esperan una cadena. La mejor defensa es 'lint-ear' tu YAML antes de confirmarlo. `yamllint` es una herramienta de línea de comandos esencial que detecta errores de indentación, espacios en blanco al final de línea y otros problemas comunes. Tu pipeline de CI debería incluir absolutamente un paso de `yamllint`. Para una verificación rápida y única, pegar tu archivo en el convertidor de YAML a JSON de CocoConvert es una excelente prueba de cordura. Si la estructura JSON resultante no se parece a lo que pretendías, tu YAML tiene un problema.

Conversión de archivos YAML: lo que CocoConvert puede hacer

CocoConvert ofrece herramientas para las dos necesidades de conversión más comunes: YAML a JSON y JSON a YAML. El proceso es simple: pega tu contenido o sube un archivo .yaml, elige tu formato de destino y descarga el resultado. El convertidor preserva con precisión la estructura anidada de tus datos. También maneja correctamente archivos YAML multidocumento (donde los documentos están separados por ---), convirtiendo cada uno en un objeto JSON separado dentro de un array más grande. Al convertir YAML a JSON, la salida se formatea con una indentación estándar de dos espacios, haciéndola legible y compatible con casi todas las herramientas JSON. Si necesitas una cadena JSON compacta de una sola línea —quizás para una variable de entorno o para reducir el tamaño de la carga útil—, hay una opción de 'minificar' disponible en la página de resultados. Al pasar de JSON a YAML, el convertidor utiliza una indentación de dos espacios y omite el marcador de inicio de documento (---) para documentos individuales. Si la entrada contiene múltiples objetos JSON, cada uno se convierte en un documento YAML distinto separado por el marcador `---`. Fundamentalmente, cita automáticamente los valores de cadena que podrían malinterpretarse como booleanos, nulos o números, para que no tengas que preocuparte de que una cadena como 'true' o '1.0' cause problemas. Seamos directos sobre las limitaciones. CocoConvert no conserva los comentarios YAML durante la conversión. Esto no es una deficiencia de la herramienta; los comentarios no forman parte del modelo de datos formal de YAML, por lo que son eliminados por el analizador. Los anclajes y alias también se resuelven, lo que significa que la salida final contendrá valores repetidos en lugar de referencias. Finalmente, archivos muy grandes (más de 10 MB) podrían agotar el tiempo de espera en el nivel gratuito. Para esos trabajos grandes, una herramienta de línea de comandos como `yq` es la mejor opción.

Cuándo usar YAML y cuándo dar un paso atrás

YAML es la herramienta adecuada para el trabajo cuando se cumplen algunas condiciones. El archivo será leído y editado por humanos, los datos tienen una estructura anidada significativa y el ecosistema circundante ya utiliza YAML. Los manifiestos de Kubernetes, los pipelines de CI/CD y los playbooks de Ansible son los ejemplos perfectos de esto. Intentar usar JSON en estos escenarios solo complica la vida sin un beneficio real. Por el contrario, YAML es la elección equivocada cuando un archivo solo es manipulado por máquinas. Para la comunicación de máquina a máquina, usa JSON o un formato binario más eficiente como MessagePack o Protocol Buffers. También es una mala elección si tu equipo lucha constantemente con errores de indentación y carece de la disciplina para usar un linter. En esa situación, la sintaxis más simple de TOML, o incluso un archivo JSON preprocesado, conducirá a menos incidentes de producción. Si estás usando YAML en proyectos de Python, existe un riesgo de seguridad crítico que debes entender. La función predeterminada `yaml.load()` de PyYAML puede ejecutar código arbitrario incrustado en un archivo YAML. Si estás analizando YAML de una fuente no confiable, siempre debes usar `yaml.safe_load()`. Esta no es una vulnerabilidad teórica; ha sido explotada en ataques reales a la cadena de suministro. El formato nos ha acompañado durante más de dos décadas y no va a desaparecer. La especificación YAML 1.2, que corrigió la mayoría de los molestos problemas de coerción de tipos de la versión 1.1, ahora es ampliamente compatible con analizadores modernos como PyYAML 6.0+, js-yaml 4.x y yaml.v3 de Go. Mi recomendación más firme: si estás trabajando en un proyecto que depende en gran medida de YAML, migrar a un analizador compatible con 1.2 es la mejora más impactante que puedes hacer. Eliminará toda una clase de errores sutiles sin que tengas que cambiar una sola línea de configuración.

¿Qué es YAML? El lenguaje de datos amigable para humanos | CocoConvert Blog