TSON (Typed Schema Object Notation) es un sistema de esquemas con una particularidad central: las definiciones son inmutables y se identifican mediante hashes criptográficos. Cada documento declara el esquema que lo valida y ese esquema, a su vez, nombra a su meta-esquema; un único hash permite verificar toda la cadena de confianza.
El proyecto se apoya en dos pilares. El primero es la propia notación de datos, un superconjunto de JSON pensado desde el primer momento para Unicode y para una escritura más legible: comillas opcionales en muchos contextos, fechas como tipo nativo, sintaxis declarativa con ! para tipos y átomos, y arrays, tuplas y conjuntos bajo una misma sintaxis de corchetes. El segundo pilar son los esquemas, que comparten lexer, herramientas y verificación con los datos, lo que permite tratarlos como mapas con una gramática compacta y fácil de editar.
La especificación cubre los mecanismos habituales en sistemas de tipos: estados de campo (requerido por defecto, opcional con ?, por defecto con ~, fijado con =), composición por intersección con campos disjuntos, refinamiento que solo estrecha contratos, sustracción explícita, tipos suma con derivación estructural del discriminador, grupos de campos exactly-one-of y plantillas con parámetros de tipo y de valor. La implementación de referencia es tson-java, una herramienta CLI escrita en Java sobre Gradle que ofrece init-example para generar un esquema y un documento de ejemplo, y validate para comprobar la validez, informando de cada error con ruta y motivo.
El versionado es donde TSON marca más distancia frente a JSON Schema o Protobuf: como cada versión de un esquema es un documento nuevo con su propio hash, añadir un campo requerido deja de estar prohibido. Las API guidelines de Google, Microsoft y Zalando prohíben esta práctica porque un único esquema mutable debe servir a todos los documentos históricos; TSON elimina esa restricción y permite que dos contratos coexistan con plena vigencia, enrutar por versión mediante el hash y calcular migraciones como diffs estructurales entre dos esquemas-dato.
