Typography Style Sync

Typography Style Sync

Client Personal project
Role Designer and author of the plugin
Year 2026
Status v1

01 The problem

Figma lets you define typography as atomic variables: family, size, weight, line-height and tracking. It is the right way to have a scale governed by tokens. But there is no native way to turn those variables into text styles at scale. Creating a style and binding its five properties by hand, one by one, is repetitive, easy to get wrong, and stops making sense the moment a system passes twenty styles.

It happened to me with the text+ design system: 107 typography variables, twenty styles, a hundred bindings. Whoever invests in a token architecture ends up applying typography property by property, which is exactly what the system was meant to avoid. That gap is the plugin.

02 The decisions

Generic, not a script for my file

The first version was built around my variable structure. I rebuilt it to work with any collection and any naming convention: the user maps which variable is which property from the interface. Harder to specify, far more valuable.

Mapping is done by choosing among the real variable paths in the file, with auto-detection and a badge that says whether the plugin or the person made the match. No typos, no guessing names.

Preview before touching anything

Before generating, the plugin resolves the real values of every style, following alias chains, and shows them: “Zilla Slab · 700 · 36px · 44 leading”. Incomplete groups are listed separately with the property they are missing. Nobody runs it blind.

Conflict handling only appears when there is a conflict

If styles with the same name already exist, the plugin says so and offers to skip or overwrite them. If not, that section does not exist. Less noise in the normal case.

03 How it works

Four steps in a 340-pixel window: pick the collection, review the mapping, preview and generate. At the end, a report per style: created, updated, skipped or failed, with the reason.

Mapping, preview and result with the real text+ typography collection. The v1.1 interface: same content and steps, with every style typeset in its own weight.

Every generated style is bound to its variables through the Figma API, not copied. If a token’s size changes tomorrow, the text style changes with it. Five interface screens, loading, empty, error, main and success, and WCAG 2.1 AA accessibility built in: contrast, explicit labels, tab order and live regions announcing state changes.

04 How I built it

I built it with an AI agent as a pair, and the process is as much part of the piece as the result.

The code is at github.com/eyfran/typography-style-sync.

And in the other direction. With the same judgement I wrote a generator that takes Figma variables to the browser: the five exported collections become custom properties and utility classes in the system’s vocabulary, and the three themes switch with one attribute.

The CSS generator: the same markup in three themes, switching only one attribute. Figma variables, in the browser.

05 Learnings

01 The quality of what comes out of an agent is set by the context you give it. A brief with the problem, the expected behaviour and the constraints produces better code than pseudocode, because pseudocode carries your mistakes into the implementation.

02 Starting generic costs more and is worth more. A plugin that works on any file forces you to design the interface properly, and that is what makes it a tool rather than a hack.

03 A designer has to be able to read the API they use. The errors I caught in review were not matters of taste, they were technical, and without understanding them the plugin would not have worked.


A type system you have to apply property by property is not a system. It is a list.

5 → 1 properties per style family, size, weight, line-height and tracking in one text style
20 styles in one run the text+ type scale, 107 variables
100 manual bindings saved five per style, every time something changes
AA WCAG 2.1 accessibility contrast, labels, focus order and announced states

Do you have a product that needs to scale with purpose?

Let's talk. hola@franmarrero.com