





Design tokens
Driving the transformation of teeny tiny key:value pairs into the design system powerhouse.
*slaps roof of car* this bad boy can fit so many design decisions in it.
Today we use our single design token system to build ~1,100 design tokens from ~60 DTCG-format source files for 6 destinations, with theme-aware colours emitted in both light and dark variants. From here they flow everywhere: Tailwind config, CSS custom properties and SCSS variables for our stylesheets, typed JS constants for runtime theming, and a programmatic push to Figma Variables via the REST API.
At GitLab we had three∆ problems we were trying to solve: 1. Make designer and developer handover more efficient; 2. Speed up feature design, validation, and review, by providing easy to understand and use ‘micro decisions’; 3. Prepare the way to enable high impact product features (like dark mode), without requiring feature teams to do twice as much work.
∆ Ok there were more than three problems total, but let’s keep this about design tokens.
As a team, we bet on tanuki-flavoured design tokens as a way to address these three things.
I’m most proud of the impact on colleagues through the design token pilot I proposed and ran. I conducted designer research interviews, authored implementation proposals, and reviewed numerous merge requests for token implementation.
The pilot reduced risk and validated approaches early, I identified and implemented mechanisms to only expose the variables designers need in Figma and I built an internal plugin to reveal the variable descriptions to support use (until Figma sherlocked it).
Using these learnings I led the successful implementation of design tokens across the design system components. I also shaped some interesting GitLab-specific details, such as the ‘tier’ naming constant, semantic, and contextual; heavy contextual design token use for Vue and Figma syncing; and code-first workflows for token authoring.
Dark mode was unlocked. Micro decisions available. Still more work to do to improve designer and developer handover.



























