YAML — que recursivamente significa "YAML Ain't Markup Language" — representa datos mediante sangrías en lugar de corchetes o llaves. Todo se construye a partir de tres primitivas: valores escalares (cadenas, números, booleanos), secuencias (listas ordenadas, marcadas con -), y mapeos (pares clave-valor, marcados con :). Anidas cosas al indentarlas más. Una sangría de dos espacios bajo una clave significa "esto pertenece a esa clave". Esto es lo que hace que YAML sea legible a primera vista y también lo que lo hace frustrante cuando algo falla. Más allá de lo básico, YAML admite anclas (&name) y alias (*name) para reutilizar bloques de configuración, archivos de múltiples documentos separados por ---, e incluso etiquetas personalizadas para sugerencias de tipo. La mayoría de la gente nunca toca las características avanzadas, pero solo las anclas pueden ahorrarte tener que mantener el mismo bloque de configuración en cinco lugares.
Si trabajas cerca de la infraestructura de IA, YAML es inevitable. Las tarjetas de modelos de Hugging Face son metadatos YAML que describen la licencia, conjuntos de datos, métricas y uso previsto de un modelo — es cómo el Hub sabe qué es tu modelo y cómo mostrarlo. Los archivos Docker Compose que levantan tu servidor de inferencia, tu base de datos vectorial y tu pila de monitoreo son todos YAML. Los manifiestos de Kubernetes que despliegan y escalan tus pods de servicio de modelos son YAML. Las configuraciones de entrenamiento para marcos como Hydra, MMEngine y Axolotl son YAML. Las tuberías CI/CD en GitHub Actions, GitLab CI y CircleCI son YAML. Incluso las reglas de alerta de Prometheus y los playbooks de Ansible son YAML. El formato ganó las guerras de configuración no porque sea perfecto, sino porque es la forma menos dolorosa de leer cuando estás mirando un esquema de despliegue de 200 líneas a las 2:00 AM.
La coerción de tipos implícita de YAML es su trampa más famosa. El valor no se analiza como falso booleano. El valor 3.10 se convierte en el flotante 3.1, lo que es un problema si es una versión de Python. El código de país NO para Noruega se convierte en falso booleano — esto se llama literalmente "el problema de Noruega" y ha causado errores reales en conjuntos de datos de producción. Luego está el problema de tabuladores versus espacios: YAML prohíbe los tabuladores para la sangría, punto final. Un solo carácter de tabulador en un archivo de 500 líneas hace que todo falle al analizar, a menudo con un mensaje de error que apunta a la línea incorrecta. Las cadenas de múltiples líneas añaden otra capa de confusión con | (bloque literal, preserva saltos de línea), > (bloque plegado, une líneas) y sus variantes con - y + para controlar los saltos de línea finales. La mayoría de la gente elige un estilo y lo memoriza en lugar de aprender todas las combinaciones.
JSON es estricto, inambiguo y ampliamente compatible — pero es incómodo de escribir a mano debido a toda la comilla y llaves, y no admite comentarios. YAML es un superconjunto de JSON (el JSON válido es válido en YAML) que intercambia estrictura por legibilidad: obtienes comentarios, sintaxis más limpia y anclas, pero también obtienes coerción de tipos implícita y sensibilidad al espacio en blanco. TOML se sitúa entre ellos — tipado explícito, comentarios, sin sensibilidad a la sangría — y funciona bien para configuraciones planas o poco profundas como pyproject.toml y Cargo.toml de Rust. La regla práctica: usa JSON para comunicación máquina a máquina y payloads de API, TOML para configuraciones de aplicaciones que permanecen poco profundas, y YAML para configuraciones profundamente anidadas que los humanos necesitan leer y editar regularmente. Si tu configuración es más de tres niveles, YAML probablemente es tu mejor opción. Si es dos niveles o menos, TOML te ahorrará dolores de cabeza.
La mejor inversión que puedes hacer es un linter de YAML. yamllint detecta no solo errores de sintaxis sino también problemas de estilo como sangrías inconsistentes y espacios finales. Ejecútalo en tu pipeline de CI para que el YAML malo nunca llegue a producción. Extensiones de IDE — el plugin de YAML para VS Code de Red Hat es el estándar — te dan validación en tiempo real, autocompletado contra JSON Schema y retroalimentación inmediata cuando tu sangría se desvía. Para configuraciones grandes con bloques repetidos, aprende anclas y alias: define una configuración predeterminada una vez con &defaults y fusiona en entradas específicas con <<: *defaults, sobrescribiendo solo lo que cambia. Si trabajas con Kubernetes o Docker Compose, herramientas como kubeval y docker compose config validarán tu YAML contra el esquema real, atrapando errores que un linter genérico no detecta. Y cuando todo lo demás falle, recuerda que siempre puedes convertir YAML a JSON, verificarlo allí y convertirlo de vuelta — porque al final del día, representan los mismos datos.