Skip to content
ColorArchive
Issue 068
2027-04-29

Color maintenance in design systems: keeping palettes consistent as products scale

A design system's color palette is never finished. As products grow, new surfaces require new tokens, edge cases demand new values, and platform constraints introduce divergence between web and native implementations. Color systems that are not actively maintained drift. Within two years, an unmanaged color system typically contains 40-60% more color values than intended, with multiple near-duplicate tokens that no one is sure are still used.

Highlights
Color token audits should happen on a fixed schedule, not reactively. An annual token audit — comparing the live token list to the documented list, identifying orphaned tokens, and testing all tokens in their actual usage contexts — prevents the gradual accumulation of near-duplicate values that creates maintenance burden. Teams that schedule audits have smaller token sets and more consistent implementations than teams that audit only when problems are reported.
The most common form of color drift is not intentional change — it is translation loss. A color specified in HSL for web is translated to RGB for iOS and to HEX for Android, with each translation introducing small rounding differences. After three product generations, the 'same' color can differ by 2-4 lightness points across platforms. Use a single source-of-truth format (OKLCH or HSL) and automate token generation to all target formats to prevent translation drift.
Near-duplicate tokens are the primary sign of an unmaintained color system. When a team needs a color that is 'a little lighter than surface-primary', they often create a new token rather than adjusting the scale. Over time, the surface token set contains surface-primary, surface-primary-light, surface-light, surface-elevated, and surface-card, all of which are within 5 lightness points of each other. The fix is not to add documentation — it is to designate a single token for the use case and update all usages.

Preventing unauthorized token creation

The most effective way to prevent unauthorized token creation is not documentation — it is linting. Hardcoded color values (hex codes, rgb() calls, or hsl() values that are not references to tokens) can be caught by custom ESLint rules, Stylelint rules, or design system linters like Knapsack or Specify. When every hardcoded color in a PR is automatically flagged as a linting error, designers and engineers are forced to either use an existing token or formally propose a new one. Formal token proposals create the organizational friction that prevents casual duplication. Without this friction, tokens multiply indefinitely.

Managing dark mode color maintenance

Dark mode approximately doubles the maintenance burden of a color system. Every surface color, text color, and interactive color needs a dark-mode variant, and the dark variants must be maintained in parallel with the light variants. The most sustainable approach is to design dark-mode tokens as algorithmic transforms of light-mode tokens, rather than independently specified values. Define rules: 'dark surface = light surface inverted in lightness, saturation reduced by 15%'. When a light-mode token changes, the dark-mode variant updates automatically. Systems with independently specified dark tokens diverge faster because each token requires two separate change decisions instead of one.

The token changelog practice

A token changelog — a record of every intentional color token change, with the date, who made the decision, and why — is underused in design systems but highly effective for long-term maintenance. When a new engineer or designer joins the team and questions why a particular value is what it is, the changelog provides context that code comments and documentation rarely capture. More practically, the changelog enables rollback: if a token change degrades performance on a key screen, the previous value can be recovered and the decision revisited rather than reconstructed from memory.

Newer issue
Color psychology in UX: what color actually affects in digital products
2027-04-22
Older issue
Color and print production: CMYK, Pantone matching, and what changes between screen and press
2027-05-06