A design system is the "operating system" of a digital product, providing a shared language between design and engineering. Beyond mere component libraries, it relies on two pillars: Design Tokens as the data layer and Atomic Design as the structural hierarchy.
Design tokens are named entities that store visual design attributes (color, typography, spacing). They replace hardcoded values with semantic variables, enabling multi-platform consistency and theming.
Modern systems employ a three-tier abstraction model to prevent brittle dependencies:
color-blue-500: #007bff). These should never be consumed directly by components.color-brand-primary: {color-blue-500}). These define the purpose (Success, Error, Primary).button-primary-bg: {color-brand-primary}). This allows fine-grained overrides without impacting the global theme.The W3C Design Tokens Community Group is standardizing the JSON format for cross-tool interoperability:
{
"color": {
"brand": {
"primary": {
"$value": "#007bff",
"$type": "color",
"$description": "The primary brand color for actionable elements."
}
}
},
"spacing": {
"medium": {
"$value": "1rem",
"$type": "dimension"
}
}
}
Brad Frost’s Atomic Design provides a mental model for scaling components from primitive elements to full pages.
Tokens are authored in JSON but must be transformed into platform-specific formats (CSS Variables, SCSS, Swift, Android XML) using tools like Style Dictionary or Amazon Style Dictionary.
Do not name tokens based on their value (e.g., color-red). If the brand changes to blue, you are left with color-red: #0000FF. Always name by intent (e.g., color-interaction-critical).
In a mature design system, 90% of styling is handled via tokens. Components should be "style-agnostic" containers that simply apply token-mapped classes or properties.