Design Systems in a Composable World

- Published on
Introduction
Design systems have long been the cornerstone of UI consistency, branding, and developer velocity. But in the composable frontend era—where code is fragmented across micro frontends, shared libraries, and runtime-loaded components—traditional design systems hit scaling limits.
In this new landscape, design systems must evolve beyond static tokens and Figma specs. They need to become runtime-capable, contract-enforcing, context-aware platforms that plug seamlessly into dynamic delivery environments.
Design systems in a composable world are not just UI kits—they are platform primitives.
Why We Need a New Model
In today's modular and runtime-driven frontend ecosystems, traditional design systems often fall short. Let’s look at some of the most common issues teams face:
1. Inconsistent Brand Delivery
In organizations like Spotify and Airbnb, developers working across multiple surfaces (mobile, embedded, kiosk) often struggle to maintain a unified visual language. Buttons on mobile may render differently than on desktop simply because the systems lack shared runtime context. This results in misalignment between brand identity and product execution.
2. Fragmented Implementation
Consider a multi-team enterprise environment where marketing and product teams own different packages. Design tokens (colors, fonts) may be copy-pasted across repos, making them hard to maintain and impossible to synchronize. Teams might unknowingly override critical variables, creating regression bugs or visual inconsistencies.
3. No Runtime Adaptability
A travel app used in kiosks, watches, and phones needs adaptive presentation. With static CSS, there’s no way to account for user motion preferences, reduced color contrast modes, or edge-case screen sizes. Runtime adaptation lets the UI flex according to the situation, enabling inclusive and context-aware experiences.
4. Design-Dev Drift
Figma might show a perfectly aligned card layout, but by the time it's in production, padding, border radius, or theme switching may be completely broken. At companies like Atlassian, it takes structured bridging between design tools and live systems to avoid costly rework and restore designer-developer trust.
Responsibilities of a Composable Design System
- Contextual Tokens: Themes, sizes, spacing, colors adapt based on runtime signals (e.g. user preference, viewport, device).
- Cross-Surface Enforcement: Design primitives work consistently across Web, native, embedded.
- Dynamic Variants: Components adapt variants (density, accessibility, mode) during execution—not just during build.
- Runtime Contracts: Each component declares its design contract (expected tokens, behavior guarantees, fallback modes).
- Composable Themes: Tokens can be layered and scoped for brands, business units, or contexts.
Architecture Overview
Here’s how a modern composable design system is layered to support runtime adaptability and platform flexibility:
+------------------------------+
| Surface Context |
| (viewport, input, theme) |
+------------------------------+
|
v
+------------------------------+
| Theme Resolvers |
| (tokens, variants, brands) |
+------------------------------+
|
v
+------------------------------+
| Component Primitives |
| (Button, Card, Icon, etc.) |
+------------------------------+
|
v
+------------------------------+
| Platform Adapters |
| (web, native, canvas, etc.) |
+------------------------------+
Implementation Examples
Context-Aware Token Hook
const { color, spacing, radius } = useTokens();
Explanation: This hook returns dynamic values scoped to the current environment (e.g., dark mode on mobile vs. high-contrast desktop).
React Design Component
<Button variant={theme.mode === 'dark' ? 'solid' : 'outline'}>
Save
</Button>
Explanation: The component changes its visual style based on the active runtime theme, without needing rebuilds or different bundles.
Web Component Theming
<my-button theme="dark" size="compact"></my-button>
Explanation: Design attributes are passed at runtime, allowing system-wide theming via attribute selectors or JavaScript-controlled tokens.
Airbnb Design Tokens in Motion
Airbnb's design system "DLS" evolved to support adaptive UI components across mobile, web, and native platforms. Their team introduced runtime-friendly tokens that reflected spacing, type, and elevation across surfaces.
Use Case:
- Airbnb teams struggled with inconsistent card layouts between iOS and Android due to differing native implementations.
Solution:
- Developed a token pipeline that synchronized Figma and code via a shared JSON schema.
- Token-based layout primitives automatically adjusted padding, shadows, and corner radius based on platform and user settings (e.g., dark mode).
Code Sample (React Native):
const padding = useDesignToken('card.padding');
return <View style={{ padding }}>{children}</View>;
Impact:
- 📐 Layout parity achieved across web and native
- 🧠 Enabled context-aware overrides (e.g., RTL, touch target size)
- 🚀 Reduced UI regressions by 40% in quarterly rollout
Real-World Case Studies
Adobe Spectrum
Problem: Adobe’s applications span Creative Cloud desktop tools, web apps like Adobe Express, and hybrid platforms. Each of these experiences needed consistent branding, accessibility, and performance standards—but they were built on varying rendering models and theming solutions.
Challenge: The scale and platform diversity created alignment issues between designers and developers. Updates to tokens or accessibility guidelines would often lag weeks behind visual specs, introducing design debt and maintenance overhead.
Solution:
- Adobe formed a cross-functional task force that co-developed the Spectrum design system.
- They introduced Spectrum Tokens—context-aware, cross-platform theming contracts.
- Spectrum leveraged React Spectrum and React Aria to provide accessibility and behavior at the component level.
- The system supported runtime-resolved themes, enabling the same components to adapt on web, native desktop, and embedded surfaces.
Developer Insight: “We needed to go beyond visual design. Spectrum became a system for behavior and accessibility, not just a UI kit.” — Senior Frontend Engineer, Adobe Spectrum team
Timeline:
- 🗓️ 2018: Design spec consolidation began
- 🛠️ 2019: Token pipeline and component primitive refactor
- 🚀 2020: Spectrum launched in Adobe Express and Adobe XD
Results:
- 🔁 Design tokens synchronized across four surfaces in under 60 seconds using a live token service
- ♿ WCAG 2.1 AA compliance built into every primitive component
- 🚀 30% reduction in UI bugs across shared components in the first quarter post-launch
- 🧩 Shared UI foundation accelerated delivery of new product lines like Firefly and Fresco
Shopify Polaris
Problem: Shopify’s admin experience spans desktop, mobile apps, and embedded partner extensions. Teams building for POS, checkout, and storefront needed to collaborate across surface boundaries.
Challenge: Design elements were implemented differently across surfaces. Mobile components lacked parity with admin surfaces, and embedded apps suffered from inconsistent theming. Developers often duplicated logic or styling in localized silos, which led to regressions during redesigns and upgrades.
Solution:
- The Polaris design system was rebuilt with composable tokens, adaptive layout contracts, and theming APIs.
- Runtime resolvers were introduced to interpret tokens based on device, locale, and context.
- A Polaris Workbench CLI and Storybook preview allowed teams to validate styling decisions visually and in CI.
- Developer handoffs were streamlined using synced Figma tokens that mirrored theme structure in code.
Developer Insight: “Before Polaris v2, we had five versions of the same component. Now we build once and adapt visually, dynamically.” — Design Systems Engineer, Shopify
Timeline:
- 🗓️ 2021: Cross-platform token audit and theme system prototype
- 🧪 2022: Live rollout to checkout, POS, and embedded apps
- 🚀 2023: Polaris 2 launched publicly with fully dynamic theme layers
Results:
- 🎯 Increased design consistency across app surfaces
- 🧠 Reduced onboarding time for new frontend developers by 30%
- 🚀 Decreased styling bugs by 45% across major updates
- ✅ Enabled safer CI pipelines via visual regression coverage
- 🧩 Unified brand presence and accelerated onboarding of frontend teams
Anti-Patterns to Avoid
- ❌ Hardcoded colors or fixed spacing in components
- ❌ Using static themes without runtime switching
- ❌ Skipping token fallback logic for edge cases (e.g., kiosk, low-res)
- ❌ Diverging platforms using forked design systems
Glossary
Term | Description | Appears In |
---|---|---|
Token | A named design value (e.g., primaryColor , baseSpacing ) | Architecture Overview, Implementation Examples |
Surface Context | Runtime attributes like device type, screen size, input method | Architecture Overview, Real-World Cases |
Variant | A runtime-chosen presentation option for a component (e.g., dense, flat) | Implementation Examples |
Theme Resolver | Engine that merges context with token scopes | Architecture Overview, Real-World Cases |
Platform Adapter | Code that maps component output to the rendering target | Architecture Overview |
Tooling for Design System Synchronization
Tool | Purpose | Example Use Case |
---|---|---|
Figma Tokens | Synchronize design tokens in design UI | Connect theme values to dev tokens |
Style Dictionary | Format and export tokens across stacks | Create platform-specific design maps |
Token Studio | Manage tokens versioned in Git | Auto-sync Figma ↔ code |
Summary
In a composable frontend architecture, the design system is not a luxury—it's infrastructure. It connects disparate modules, aligns distributed teams, and adapts visuals and behavior in real time. The key to success lies in runtime adaptability, strong contracts, platform-agnostic tooling, and shared team ownership.
When design systems are treated as runtime-aware, composable platforms, they don’t just enforce consistency—they accelerate innovation.
📌 Figure 1: Structural mapping of Atomic Design principles to composable architecture layers.