I recently helped a client turn a sprawling, inconsistent Figma design system into a lean, token-driven workflow. If you’ve ever opened a file and felt your brain scramble trying to map colors, spacing, and component variants, you know why this feels urgent. In this article I’ll walk you through the practical steps I took — the audits, naming decisions, Figma plugins, and team processes — so you can migrate a messy Figma system into something token-based, predictable, and easy to maintain.
Why migrate to tokens?
Design tokens are the connective tissue between design and code. They turn visual decisions into a single source of truth: color palettes, type scales, spacing units, radii, elevation, and even motion timings. When your Figma file is full of hard-coded styles and duplicate components, maintenance becomes a nightmare. Tokens reduce cognitive load, help enforce consistency, and make handoff to developers far smoother.
Start with an audit (don’t skip this)
The first step is always to map what you actually have. I open the main production file and create an audit page with a simple inventory: colors, text styles, effects, spacing examples, and all ambiguous component states. You can do this manually, but I prefer a hybrid approach: use a plugin to extract tokens then human-verify.
Helpful plugins/tools:
My audit checklist contains items like:
Design decisions: what becomes a token?
Not every visual value needs to become a token. Tokens should represent decisions that are reused and worth centralizing. I group tokens into categories:
| Token Category | Examples | When to centralize |
|---|---|---|
| Color | primary, accent-500, neutral-100, text-high | Always centralize palette and semantic colors |
| Typography | heading-1, body-14, caption-12 | Centralize scales and roles, not every manual weight |
| Spacing | space-4, space-8, space-16 | Use a base scale (4px or 8px) and stop adding ad-hoc values |
| Elevation/Shadow | elevation-1, elevation-2 | Centralize patterns for depth and focus |
| Motion | duration-fast, easing-standard | For consistent micro-interactions |
I prefer semantic tokens (e.g., button-background, text-muted) layered over raw tokens (e.g., blue-500). Semantic tokens let you change the brand palette later without rewriting component logic.
Naming conventions that actually scale
Spend time on a naming convention. It’s boring but crucial. My personal pattern is:
Keep names predictable and hierarchical. Avoid overly specific names that bake UI decisions into tokens, like blue-for-hero. Reserve those for component-level overrides if needed.
Extracting tokens from Figma
I usually extract tokens in two phases:
When cleaning colors, group by perceptual similarity — tools like Adobe Color or even a quick visual swatch board in Figma help. Reduce your palette aggressively: most projects benefit from 6–12 core colors plus neutral scales.
Refactor components incrementally
Attempting a big-bang refactor rarely succeeds. I adopt an incremental approach:
While refactoring, enforce that components reference styles (Figma text styles, color styles) that are themselves linked to tokens. This creates a clean two-way binding: tokens → Figma styles → component instances.
Bridging design and code
For the handoff, export tokens in a format developers can ingest: JSON, SCSS variables, CSS custom properties, or platform-specific formats (iOS, Android). Figma Tokens plugin supports multiple output formats and can sync to Git via a simple export workflow.
Pro tip: Use semantic tokens for CSS custom properties. Example:
This lets developers compose tokens in the browser and makes runtime theming feasible.
Tools that make this tolerable
My go-to stack for a token migration:
Automate exports with CI so token changes run through a review process and publish to a shared package. That prevents silently breaking changes.
Governance and team workflows
After the technical migration, the bigger challenge is cultural. I helped my team adopt a few lightweight rules:
Testing and validation
Run visual tests as you migrate components. Visual regression tools (Chromatic for Storybook, Percy) catch accidental visual changes when tokens update. On the design side, maintain a small "canary" page in Figma that showcases token-driven components in common states — primary, hover, disabled, error — so you can spot breakages quickly.
Common pitfalls to avoid
One small hack that saved me: add a meta token called deprecated.* for values you want to retire. Keep them available for a transition period but clearly labeled so designers and devs avoid new usage.
Migrating to a token-based workflow takes time, but the payoff is real: faster iterations, fewer surprises in production, and a happier collaboration between design and engineering. If you want, I can share a starter token JSON and a checklist I use during audits to speed up your migration.