Saltar al contenido

Empezar aquí

Cómo encajan Figma, DTCG y Tailwind

Vista general del recorrido de un token, desde una variable de Figma hasta una clase de Tailwind CSS, pasando por la exportación de Figma y el formato DTCG.

Última revisión:

Esta página es el mapa del curso. Muestra el recorrido completo de un token, desde Figma hasta el código, sin entrar todavía en detalle. Cada paso tiene su módulo, y al final del curso volverás aquí con todas las piezas encajadas.

En esta página

El recorrido de un token

  1. Variables de Figma, Colecciones y modos
  2. JSON de Figma, Export modes: casi DTCG, un archivo por modo
  3. Normalización, Tipos, unidades y alias
  4. DTCG estricto, Archivos .tokens.json
  5. Terrazzo, Herramienta de traducción
  6. Variables CSS, Una por token, con un bloque por modo
  7. Clases de Tailwind CSS, Con @theme inline
El recorrido de un token en DesignToken101, desde la variable de Figma hasta la clase de Tailwind CSS.

La idea central es tener una sola fuente de verdad. Los tokens se definen una vez y todo lo demás se genera a partir de ahí, sin copiar valores a mano.

Recomendación

En DesignToken101, la fuente de verdad de los tokens visuales (color, espaciado, tipografía, radios) son las variables de Figma. Algunos tokens viven en código y no en Figma, porque Figma no los guarda como necesitamos: el interlineado, el espaciado negativo y el punto de corte entre móvil y escritorio. Lo verás en el módulo De Figma al código. Cada token tiene una única fuente.

1 Figma define las decisiones

En Figma, cada token es una variable. Las variables se organizan en colecciones, y cada colección puede tener varios modos, por ejemplo Light y Dark. Cada modo guarda un valor por variable (Figma: Modes for variables).

Cada variable puede tener además un code syntax: el nombre que tendrá en código para cada plataforma (Web, Android, iOS). Ese nombre aparece en Dev Mode (Figma: Variables in Dev Mode). Lo usaremos para que el nombre en Figma y el nombre en CSS coincidan.

Aviso

Los modos de variables requieren un plan Education, Professional, Organization o Enterprise. El número de modos por colección depende del plan (Figma: Modes for variables). Más detalles en Requisitos.

2 Figma exporta casi DTCG

Figma exporta cada modo como un archivo JSON: clic derecho sobre un modo → Export mode, o sobre la colección → Export modes. Según su ayuda, el archivo sigue el formato DTCG (Figma: Modes for variables). Qué contiene un archivo DTCG lo explicamos en Qué es DTCG.

Al exportar las variables de esta web comprobamos que el archivo de Figma no es DTCG completo. Tiene cuatro diferencias:

QuéQué exporta FigmaQué espera DTCG
AliasEl valor ya resuelto; la referencia va en la extensión com.figma.aliasDataUna referencia: "{color.neutral.950}"
Tamañosnumber sin unidad: 4dimension con unidad: { "value": 4, "unit": "px" }
Familia tipográficastringfontFamily
Peso tipográficonumberfontWeight

Lo que dicen las fuentes:

  • La propia ayuda de Figma reconoce que string no es un tipo DTCG oficial, y documenta la extensión com.figma.aliasData para los alias entre colecciones (Figma: Modes for variables).
  • La especificación DTCG prohíbe que una herramienta adivine el tipo de un token a partir de su valor (Format Module 2025.10). Por eso una herramienta no puede saber que 4 son píxeles.

Aviso

Si pasas la exportación tal cual a una herramienta de traducción, obtienes CSS inválido (--t101-space-100: 4, sin unidad) y pierdes los alias. Lo comprobamos con Style Dictionary 5.5.5 y Terrazzo 2.7.1 en octubre de 2026.

Recomendación

En DesignToken101 añadimos un paso de normalización: un script que recupera los alias, añade las unidades y pone el tipo DTCG correcto. El tipo se deduce del scope de cada variable en Figma (dónde se puede aplicar), que es una decisión de diseño, y no del valor. Lo construimos paso a paso en el módulo De Figma al código.

3 Una herramienta de traducción las convierte

Una herramienta de traducción lee los archivos DTCG y genera código. La especificación cita como ejemplos Style Dictionary y Terrazzo (DTCG Format Module: Translation tool).

  • Style Dictionary soporta DTCG, pero su documentación advierte que el soporte de la versión 2025.10 todavía no es completo (Style Dictionary: DTCG).
  • Terrazzo es una cadena de herramientas nativa de DTCG. Une los modos con el Resolver Module de DTCG (Terrazzo: Resolvers) y tiene un plugin oficial para Tailwind CSS v4 (Terrazzo: Tailwind).

Recomendación

DesignToken101 usa Terrazzo para generar las variables CSS. Probamos su plugin de Tailwind y no encaja con el patrón de dos capas del apartado 4, así que esa capa la generamos aparte.

El resultado son variables CSS (custom properties), una por token, con un selector distinto para cada modo. Este es un token real de esta web:

:root {
  --t101-color-text-neutral-default: var(--t101-color-neutral-900);
}
[data-theme="dark"] {
  --t101-color-text-neutral-default: var(--t101-color-neutral-50);
}
  • El alias se conserva como var(): el token semántico sigue apuntando a un primitivo.
  • En el modo Dark cambia el primitivo al que apunta, no el nombre del token.
  • El prefijo --t101- evita choques de nombres; lo explicamos en el módulo De Figma al código.

Nota

Hasta aquí no hace falta Tailwind CSS. Cualquier proyecto web puede usar estas variables directamente.

4 Tailwind CSS las convierte en clases

Tailwind CSS v4 se configura en CSS con la directiva @theme. Las variables definidas dentro de @theme generan clases de utilidad; las definidas en :root son variables normales. Para que una variable del tema apunte a otra variable hay que usar @theme inline (Tailwind CSS: Theme variables).

El patrón habitual tiene dos capas y es el que documenta shadcn/ui (shadcn/ui: Theming):

Un solo nombre en todo el recorrido

El objetivo es que un token se llame igual en todas partes:

DóndeCómo se ve
Variable de Figmacolor/text/neutral/default
Code syntax Web en Figmavar(--t101-color-text-neutral-default)
JSON DTCGgrupos anidados color → text → neutral → default
Variable CSS--t101-color-text-neutral-default
Clase de Tailwind CSStext-neutral-default

En la clase, el inicio text- ya indica la propiedad, así que el nombre no la repite.

Ese nombre compartido es el que encuentra quien pasa un diseño a código: la variable que ve en Figma existe con el mismo nombre en el CSS.

Lo que hemos decidido

Cuando escribimos esta página por primera vez, estas cuestiones estaban abiertas. Las decidimos al construir la web, probando con los archivos reales exportados de Figma:

Recomendación

  • Herramienta: Terrazzo, con el paso de normalización delante.
  • Cómo unir los archivos de cada modo: con un archivo del Resolver Module de DTCG (Resolver Module 2025.10), que describe un conjunto fijo de tokens y dos ejes de modo: tema (Light y Dark) y layout (Mobile y Desktop).
  • Clases de Tailwind CSS: un espacio de nombres por propiedad (bg-, text-, border-), con el riesgo explicado en el apartado 4.
  • Color: los valores se guardan en sRGB en Figma y se escriben en hexadecimal en el CSS, sin conversiones. Por qué no usamos oklch para guardarlos lo explicamos en Espacio de color.

Lo que te llevas

  • El recorrido es Figma → exportación DTCG → normalización → variables CSS → clases de Tailwind CSS.
  • Figma exporta casi DTCG: hace falta un paso que recupere alias, unidades y tipos.
  • Un mismo nombre recorre todo el camino, de la variable de Figma a la clase de Tailwind CSS.

Fuentes