Token Lint: auditing and applying design tokens

Hello everyone,

I would like to share a thought about what happens after design tokens land in a Penpot file: nobody can tell where the system is actually applied. I’d welcome your feedback.

The problem

Once tokens exist, two questions decide whether the system holds: where is my design system not applied, and how do I fix that in one action? Nothing answers either one today, so files drift: a color typed by hand, a spacing nudged, an override left in place. The token set becomes documentation instead of a source of truth, and nobody can state a coverage figure.

What I propose

URL to install: https://plugins.unoff.dev/penpot/token-lint/manifest.json

A plugin (working name: Token Lint) that audits a scope (selection, page, document) against the active token sets, returns a coverage rate, and groups deviations by value rather than layer by layer:

  • Exact matches first (a hard-coded value equal to a token’s resolved value), then near matches with their residual difference, then orphan values.
  • “Apply every exact match in scope” as a single, undoable action. Anything ambiguous waits for explicit validation.
  • Creating a token when nothing fits: you pick an active set, the plugin proposes a name from the type and the value (color.3b82f6, spacing.12), and you edit it before it is applied.

One last note

It is built with Unoff, the open-source framework and CLI I maintain for Penpot and Figma plugins. Token Lint is the first plugin made with it, and I’ll come back to that story separately once there is something to show.

PS: The plugin isn’t published in the official catalog yet, but it is open to contributions on GitHub.

6 Likes

@a-ng-d WOAH this is soooo useful, thank you for creating and sharing it!

I can see this as being an incredible starting point for folks wanting to create token libraries from their existing designs too.

1 Like