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 Figma define las decisiones
- 2 Figma exporta casi DTCG
- 3 Una herramienta de traducción las convierte
- 4 Tailwind CSS las convierte en clases
- Un solo nombre en todo el recorrido
- Lo que hemos decidido
- Lo que te llevas
El recorrido de un token
- Variables de Figma, Colecciones y modos
- JSON de Figma, Export modes: casi DTCG, un archivo por modo
- Normalización, Tipos, unidades y alias
- DTCG estricto, Archivos .tokens.json
- Terrazzo, Herramienta de traducción
- Variables CSS, Una por token, con un bloque por modo
- Clases de Tailwind CSS, Con @theme inline
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 Figma | Qué espera DTCG |
|---|---|---|
| Alias | El valor ya resuelto; la referencia va en la extensión com.figma.aliasData | Una referencia: "{color.neutral.950}" |
| Tamaños | number sin unidad: 4 | dimension con unidad: { "value": 4, "unit": "px" } |
| Familia tipográfica | string | fontFamily |
| Peso tipográfico | number | fontWeight |
Lo que dicen las fuentes:
- La propia ayuda de Figma reconoce que
stringno es un tipo DTCG oficial, y documenta la extensióncom.figma.aliasDatapara 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
4son 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):
/* Capa 1: los tokens, con un valor por modo */
:root { --warning: oklch(0.84 0.16 84); }
.dark { --warning: oklch(0.41 0.11 46); }
/* Capa 2: Tailwind CSS los expone como utilidades */
@theme inline {
--color-warning: var(--warning);
}Con esto, la clase bg-warning usa el token y cambia sola al activar el modo oscuro. Ejemplo tomado de la documentación de shadcn/ui.
En DesignToken101, la capa 2 de nuestro token queda así:
@theme inline {
--text-color-neutral-default: var(--t101-color-text-neutral-default);
}Y genera la clase text-neutral-default.
Aviso
La documentación de Tailwind CSS cita el espacio de nombres --color-*, pero no --text-color-*. Funciona en Tailwind CSS 4.3, aunque no está documentado, así que una prueba automática del proyecto avisa si deja de funcionar.
Un solo nombre en todo el recorrido
El objetivo es que un token se llame igual en todas partes:
| Dónde | Cómo se ve |
|---|---|
| Variable de Figma | color/text/neutral/default |
| Code syntax Web en Figma | var(--t101-color-text-neutral-default) |
| JSON DTCG | grupos anidados color → text → neutral → default |
| Variable CSS | --t101-color-text-neutral-default |
| Clase de Tailwind CSS | text-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.