Design Token Naming Convention: GTC Token Model

The GTC token model for product teams and AI agents

Design tokens are the building blocks of every design system. But most token systems were built for a different era, and now that AI is in the workflow, their flaws pile up, making products harder to maintain and work with.

When a token system is flat, unstructured, or built from values instead of decisions, every visual update and redesign ends up reinventing it, adding complexity, and turning every visual change into an abstraction problem.

After 15 years of building, refining, and rebuilding enterprise token systems, I've designed the GTC model (Global, Theme, and Component), a predictive semantic layer legible to humans and AI agents.

GTC solves four problems every token system faces:

  • Naming: how to name tokens so they stay consistent as the system grows.
  • Composition: how to group tokens so they're easy to work with for teams and AI agents.
  • Scope control: how far a token update should go — globally, per theme, or per component — so every change stays predictable.
  • Predictability: strict token groups allow every next or previous token in the chain to represent a logical position, making it possible to extend naming rules or shrink them based on the context.

In this article I'll walk you through the GTC model: what design tokens actually are, why they matter, and how to structure them so they hold up as the product grows.

Design tokens are reusable design values — such as colors, spacing, and typography — that build a visual language in large-scale design systems.

People use tokens in place of hard-coded values like hex colors (#ffffff) or font sizes (16px) in design. In code these map to CSS variables, with one token controlling every place it's used, so the UI stays consistent.

GTC (Global, Theme, Component) is a design token framework for large-scale UI systems. Install the /gtc-tokens skill to teach AI to audit, create, and manage design system tokens.

Get started

What are design tokens

Design tokens are standardized design decisions. They're not just a technical choice, but a product decision that shapes how your product scales over time.

Tokens let you make big transformations to a product's UI and propagate changes in an instant.

When people refer to a design token, they typically mean a design decision that unifies multiple UI elements across the product. To make that decision reusable, every token is built from two key elements:

  • Value, such as #ffffff
  • Name, such as theme.icon.default
Design token anatomy: hex value #ffffff connected to token name theme.icon.default, which applies to a star icon.

Every token name is a unique identifier for a specific value. The same value can sit under more than one name, which lets tokens reference each other and form a hierarchy.

These references between tokens are called "token aliases".

Aliases are what make tokens reusable. Instead of storing its own copy of a value, a token aliases another token, so the underlying value lives in exactly one place: a Global token. Change it there once, and every token that aliases it updates too.

Aliased this way, tokens form a hierarchy: a Global token holds the raw value at the base, and a Theme token on top aliases it to an element, like this:

Token alias chain: raw #ffffff in global.color.base.0, aliased by theme.icon.default to style a UI icon element.
  • #ffffff · Raw value
  • global.color.base.0 · Global token
  • theme.icon.default · Theme token

Why design tokens are so important

Design tokenization is what allows large enterprise systems to preserve consistent UI across multiple domains and sub-products.

Design tokens create a strong contract between the product and design-system teams. The design system owns tokens, and tokens own styling, semantics, and connections to components, while feature teams can focus solely on business logic.

This clear split of domains is valuable during redesigns. Tokens help teams move to new designs faster, as any global UI change, such as style updates or component improvements, can be rolled out by updating specific token values.

A token ties one value to multiple elements, so changing the value updates all connected elements.

One design token theme.icon.default aliased to two different icons — Icon A and Icon B — so a single value controls both.

Design token types

A token type is a category of value that the product reuses in more than one place: a brand palette, a font scale, a spacing sequence, etc. Each token type holds the full range of values for that one aspect of the design.

To structure design tokens effectively, we need to identify the types of tokens our product will use. If our product won't need a particular type, it's better to leave it outside the system.

Grouping tokens by type makes it easy to add new tokens without the list getting out of hand.

In GTC, none of the token types are invented. They mirror the types from the Design Tokens Community Group (DTCG), a shared format that design tools and codebases can all read.

The GTC model defines the following token types by default:

size-unit

Unit tokens define consistent scale values, like spacing, gaps, and sizes.

color

Brand color token palettes that communicate UI hierarchy.

opacity

Opacity tokens set consistent transparency and dimming levels for UI elements.

font-family

Font-family tokens define the fonts used in the system.

font-size

Font-size tokens keep font scaling and text-size values consistent.

line-height

Line-height tokens define consistent vertical rhythm across the UI.

font-weight

Font-weight tokens set consistent weight scaling across all text elements.

letter-spacing

Letter-spacing tokens set consistent spacing between letters.

radius

Radius tokens set a consistent border radius for UI surfaces and elements.

border

Border tokens set border thickness and stroke styles for UI elements.

shadow

Shadow tokens keep shadow appearance and elevation styles consistent.

blur

Blur tokens set a consistent background-blur effect for UI surfaces.

motion

Motion tokens set transition easings and animation timings.

z-index

Z-index tokens set consistent stacking order for overlays and floating elements.

GTC design token groups

With the token types defined, we can organize them into more detailed semantic groups. The always-open question in the design systems field is how to name those groups so tokens stay legible to teams and AI agents as the product grows.

Across every enterprise project I've worked on, I've narrowed this down to three groups: Global, Theme, and Component (GTC), which have held up consistently. The model is framework-agnostic, so it's possible to use it with any UI component library of your choice.

Global

Sets system-shared token types: typography, size-units, colors, effects, borders, and radius.

Theme

Sets how elements look based on the active theme, including colors, surfaces, elements, and states.

Component

Per-component structural values: spacing, gaps, sizes, and radius, scoped to one component.

  • Global tokens rarely change in the product.
  • Theme tokens change more often as the design system grows.
  • Component tokens rarely change once UI elements are established in code.

Grouping tokens this way turns a flat list of tokens into a readable semantic layer, a structure where every token has a home and purpose, and every change is easy to track.

In GTC, each value can be updated globally across domains, narrowed to a single theme, or isolated to a specific component, making it possible to push changes exactly as far as they need to go.

If you've used Material Design's token classes, GTC grouping will feel familiar. Material's reference, system, and component tiers line up closely with Global, Theme, and Component. The core difference is in the naming and hierarchy. Material Design applies one rigid grammar to every token, so each name becomes a long, segmented chain, e.g.:

md.comp.outlined-text-field.error.focus.color

md.comp.filled-button.pressed.state-layer.color

md.comp.fab.primary.container.color

GTC started with a Material migration where every token rename turned into a six-level edit process. The modes held up, but the names did not match the structure anymore: every token spelled out a chain like md.comp.outlined-text-field.error.focus.color, and most of those levels were filler. So I refined the three tiers, dropped the fixed grammar, and let each name take only the levels it needs.

Every token belongs to a group: Global, Theme, or Component. But past that group, each name is free to take whatever best fits what the token expresses.

Names stay short where they can be and specific where they need to be. That's what keeps the system readable and easy to maintain, e.g.:

global.size-unit.8

theme.button.primary.hover

component.input.spacing-gap

Global tokens

Global tokens (also called primitive tokens) include the full set of raw values sorted into types the rest of the system is built from. They're never applied to components directly. Instead, Theme and Component tokens reference them.

Inside the Global group, values are organized into subgroups, each covering one or more token types, for example:

  • Typography: font-size, line-height, weight, letter-spacing, and every other font token type.
  • Color: the color palettes, plus the opacity tokens.
  • Effects: blur and shadow spread tokens.

Each Theme and Component token resolves to whichever Global subgroup it needs. Subgroups give every primitive type a predictable place, so a human or an AI agent can go straight to it instead of scanning one flat list.

Global token subgroups (color, effects, typography, size-unit, radius, border) feeding into Theme and Component token groups.
Global token values and their connections to other design token groups.

Theme tokens

Theme tokens hold the UI's visual modes: how everything looks in a given context, including surfaces, icons, text, borders, and component visual states. Theme is the layer that shifts when that context changes, for example when the user switches from light to dark mode.

The Theme group is where "how should this look right now" is decided.

Theme resolves by mode: light and dark are the two most common color-scheme modes, and a product can add more, such as brand or high-contrast modes.

Theme tokens folder: Surface subgroup where page, container and overlay alias Global tokens, showing grey-1 to grey-3 in Light mode and light-1 to light-3 in Dark mode.
Read the folder path as a token name: theme.surface.page.

Theme groups tokens by element, and Surface is one group of several. A theme token keeps one name across every mode, and each mode points it at a different Global token. Switch mode and the element restyles with no edit.

Component tokens

The Component group decides how a component should be built and sized.

Instead of storing their own raw values, component tokens link to the Global group for structural values like radius, size, motion, and typography.

Edge case: a token that changes with visual mode can route through Theme first. Font-weight, for example: the same weight looks heavier on a dark background than on a light one, so we can set it thinner in dark mode. Robin Rendle walks through this technique in Dark mode and variable fonts.

Button component tokens: spacing, icon-size, font-size, line-height, and radius across Medium and Small size modes.
Component tokens define a component's structure and resizing behavior.

Each component is a sub-folder inside the Component group, with its own structural tokens across one or more size modes, just as a Theme token resolves across its modes. One token holds a value for each size, so resizing a component means selecting a different mode (medium or small).

Design token modes

Modes (or "contexts" in Material Design) are a token's ability to store multiple values and pick the right one based on the current UI conditions.

In practice, a mode is a property assigned to a token that tells it which value to use in a given context: dark mode, high-contrast mode as in Theme, or a size-specific mode as in the Component token group.

In GTC, modes are selected by scope, so you can change a mode for a single component or the whole page at once. A token can answer to more than one mode, for example, a brand theme and a specific component size, which can be activated independently.

When a token includes a mode-specific value, it's applied automatically when that mode is active. For example, a color token with a dark-mode value becomes active the moment the interface switches from light to dark.

theme.surface.page token aliasing global.color.base.1 and global.color.base.10, rendering as light and dark mode phone screens.
Modes let a token hold multiple values, one for each UI context.

Design token naming convention

All GTC tokens follow a level-based naming convention, where each level of the name tells you one thing about the token's final value.

In production code, tokens can have different numbers of levels depending on how much they need to express. For example, let's take the global.color.base.0 token: global says which group it belongs to, color says which subgroup it sits in, and base.0 points to the exact value.

Global tokens stay short, as they hold primitive values, but Theme and Component tokens run longer, as they carry more specific design decisions and values:

global.color.base.0

theme.button.primary.alpha.hover

component.button.font-size

Design token taxonomy rules

A design token taxonomy is the set of rules that governs how tokens are named in the design system.

Each token name has two parts:

  • The name-path: a dot-separated chain of levels that shows where the token belongs.
  • The value: the final level, holding the actual reference used in code.

A basic global color token with 3 levels of naming hierarchy:

global.color.base.1

Token name anatomy for global.color.base.1: parts labeled Group (global), Classifier (color), Identifier (base), and Value (1).

Each level narrows what the token means, so the number of levels equals the token's specificity. A good taxonomy comes down to one best practice: balance clarity against simplicity.

GTC uses the minimum number of levels required to describe a token, and adds a level only when removing it would leave the token ambiguous.

The opposite is a linear grammar, where one fixed chain is applied to every token, so each name carries unnecessary levels, whether it needs them or not.

Overly specific names grow longer and pull more rules in behind them, which is what makes a linear approach much harder to maintain over time. A single button hover color ends up spelling out levels that say the same thing:

button.primary.color.background.state.hover

Most of those levels are filler: they exist to satisfy the grammar, not to narrow the value. GTC names the same token in just four levels:

theme.button.primary.hover

The way to hold that balance in the GTC model is a lightweight set of rules for identifying each token level. The taxonomy levels below are guidelines for naming and arranging those levels.

Every name follows one fixed order: Group, then any of Element, Classifier, Identifier, and State. Only Group is a mandatory level, and the other levels never appear out of order. Omit any level the token does not need.

1.Group: always the first level; it names the group the token belongs to.

2.Element: the UI thing the token styles (e.g., button, input, icon, text). In Global, which has no UI element, the parameter type fills this slot (e.g. color, radius).

3.Classifier: defines alternative token variants or categories of tokens (e.g., secondary, tertiary). Can be used only after the Group or Element levels.

4.Identifier: helps recognize a particular token inside the group, classifier, or element level (e.g., blue, red, dark).

5.State: the interaction or condition the value applies to, always last (e.g., default, hover, active, disabled).

GTC taxonomy: theme.button.primary.blue.hover broken into five levels — Group, Element, Classifier, Identifier, and State.

Theme token with 5 levels of taxonomy hierarchy:

theme.button.primary.blue.hover

Note: complex tokens like the one above don't include a value, because the final State level already carries a token aliased to the Global value.

The GTC taxonomy rests on three principles:

1.A token's name must always reflect why a token exists before where it's used, encoding the full path down to its value.

Group [semantic group]

 └─ Element/Classifier/Identifier/State [button, primary, blue, hover]

     └─ Token value [spacing, color, font spec]

2.Naming levels follow a clear order, with no missing semantic groups.

Do

Group → Element/Classifier/Identifier → Value

Group → Value

Don't

Value → ... [no group]

Element/Classifier/Identifier → Value

3.Name tokens and modes by design role, never by screen, feature, or layout specification. Keep the abstraction level high.

Do

Tokens

color.

typography.

spacing.

button.

badge.

Modes

ios.

android.

small.

large.

dark.

Don't

Tokens

badge-color.

ios-typography.

sidebar-text.

login-spacing.

card-badge.

Modes

phone.

tablet.

expanded.

marketing.

dashboard.

What the taxonomy buys you

On their own, design tokens are just words. The taxonomy is what turns them into a shared language: each token gets meaning in the UI, and people and AI agents can make better design decisions and write better code.

This shared language works only when the names stay consistent. When each level signals what a token is for, designers and developers can find the token they need instead of adding a near-duplicate that clogs the set. Consistency matters more the larger the system grows.

While the naming convention can and should be tailored to a team's workflow, it must be defined at the foundation. Once a token set grows, changing token groups and taxonomy becomes disruptive to product teams, and at the enterprise level it can quickly become unmanageable.

So why be this strict about names? Because it makes design tokens predictive: you could write the next token name without looking it up. Let's get deeper ↓

The GTC taxonomy is a tool for scaling a design system's tokens consistently.

GTC model: global branches into theme.button/surface/icon/text and component.button/input/control/tabs on a specificity axis.
Global → {theme, component} → leaf sub-groups, organized by specificity.

Predictive design tokens

"Predictive design tokens" is the name for a technique built into the GTC model: anyone on the team can write a new token without hunting through the code or the naming rules. Every GTC name follows the same level order, so theme.button.hover is enough to write theme.button.disabled.

Prediction works in both directions. A designer who needs the pressed state of a secondary button types theme.button.secondary.active and gets it right the first time. A reviewer who meets component.input.spacing-gap in a pull request reads the group, the element and the value type straight off the name.

That predictability lets an AI agent extend the system: it reads the taxonomy and creates the tokens your team expects, instead of adding token duplicates. Ask for a card and the agent picks theme.surface.page, theme.text.default and global.radius.12, because the taxonomy leaves it nothing else to pick.

GTC makes design generation predictable, and that's the reason behind its strict naming convention.

Why the GTC model holds up for teams and AI agents

The same naming that keeps the system clear for people makes it legible to AI agents. A rigid linear grammar forces machines to reason through each level that exists to satisfy the grammar. GTC keeps naming and scope purposeful, so an AI can learn how your system works, suggest improvements and even create new tokens that integrate with your design.

The token names become your AI's design vocabulary.

Example GTC prompts:

  • “Make a card. For the surface use theme.surface.page, for the text use theme.text.default, and round the corners with global.radius.12.”
  • “Update an overlay surface: alias theme.surface.overlay to global.color.base.0 in light mode and global.color.base.8 in dark mode.”
  • “Dim the sidebar in dark mode: point theme.surface.container at global.color.base.2.”

You could set up GTC yourself with everything on this page. If you'd rather have it done, I build custom enterprise design systems for product teams, with tokens, components and UI rules for AI.

FAQ

As few as the token needs. A Global token usually takes three (global.color.base.0), a Theme or Component token up to five (theme.button.primary.blue.hover). Add a level only when removing it would leave the name ambiguous.

Yes. Figma variable collections map to the three GTC groups, and Figma modes map to GTC modes, so a light/dark theme or a small/medium component size is one variable with two values. The Design Tokens Sync skill exports those collections to DTCG JSON.

No. Material's reference, system and component tiers line up with Global, Theme and Component, so you could keep the tiers and change only the naming. The long md.comp.* chains become short names like theme.button.primary.hover.

DTCG JSON for tools and CSS variables for code. The token types are the DTCG types, so any tool that reads the format reads a GTC set with no translation.

Yes. GTC is a naming and grouping model, and it works the same for a team that never prompts anything. The /gtc-tokens skill is an add-on that teaches an agent the rules so it can audit the set and create tokens the team expects.

Teach AI the GTC model, then audit, create, and manage GTC and DTCG tokens with it. Install the /gtc-tokens skill to get started.

Get started

References

∗ ∗ ∗