The library and the code drift apart, and you find out late
The library and the code disagree. A variant exists in Figma but not in code, or the other way round. A colour was changed in one place and not the other. You find out at handoff, or after release.
Guidance is missing where you need it. You can see what a component looks like. You cannot always see when it should not be used, what the text should say, or how it behaves with a keyboard.
Requests disappear. You ask for a component the library does not have. Nobody knows who owns the request, so a team builds its own version and the system gets weaker.
Detached instances multiply. Under deadline pressure, people detach and adjust. Each change is reasonable. Together they become drift that nobody can count.
AI tools copy whatever they find. Agents now build screens from the code and the docs. If those are out of date, the agent repeats the mistake many times.
Loom keeps the library, the code and the rules in step
Every component has one record
Each component has a contract: purpose, when to use it and when not to, anatomy, properties, states, behaviour, accessibility and content rules. Conversion drafts it from the code and lists every gap as a question for your team, so the missing guidance becomes visible work instead of a surprise. Working
See when Figma and code disagree
Loom audits a Figma library on the same rubric as the code and reports where they differ: a missing variant, a different value, a component that exists in only one place. Partial What does not work yet: the Figma audit has run on a synthetic library, not yet on a real client file.
When they disagree, neither wins by default. An owner decides: accept the change or revert it. The decision is recorded. The accept-or-revert flow is a concept today. Concept
In one Figma Professional file, Loom pushed tokens as Figma variables (one mode so far), generated a partial library and read the file back to compare it with code. Working
Ask once, and see the request move
A request starts with one question: does something already exist? Loom searches the system and answers reuse, extend or new, then records the need. When several teams or agents keep asking for the same missing thing, the owner sees it counted against a threshold. Partial What does not work yet: a need passing the threshold does not yet become a draft on its own. Concept
Every proposal enters a review queue with a due date. The default service level is three working days, and your organisation sets its own. Working
Patterns you can follow, and check
A pattern, such as sign-in, an empty state or a filter bar, is a record: the problem it solves, the components it uses, rules on what to do and what to avoid, content guidance and a working example. Loom checks a composition against it, so a screen built by a person or an agent follows the same rules. Working
Words are part of the system
Voice, preferred terms and banned phrases are rules that Loom checks in interface copy, not a PDF that nobody opens. A content designer owns them like any other area. Working Visual brand rules and a managed illustration library are in development. Concept
Prototype with the real thing
Compose a screen from your system's own components, with their real properties and states, and click through it the same day. Loom checks tokens, contracts and accessibility rules as you build. Partial What does not work yet: the composer runs for our reference system on a development server, not yet for other systems, and an agent cannot yet build a prototype from a written brief.
Ask the system in plain language
Ask "which button should I use for a destructive action?" and get the answer from the system's own rules, with its source. An early version searches the rules and quotes them; it does not write answers yet. Concept
The guidance you need is in the contract
Every component carries its own guidance: what it is for, when not to use it and what to use instead, its states and its keyboard behaviour. This is a real contract from Loom Base, our open-source system:
One contract: Button
Loom Base 1.0.0, MIT- Purpose
- Starts an action in the current view: save, publish, open a dialog, run a check.
- When not to use it
- Going to another page or URL: use Link.
- Choosing one of several options: use RadioGroup or Select.
- States
- idle (PRESS); flags: disabled, busy
- Keyboard and role
- Enter, Space, Tab · role
button, the same on native - Tested behaviour
- 13 scenarios, run on web and native from this one file
| Component token | Resolves through | Value | |
|---|---|---|---|
root.background@tone=primary | semanticcolor. | primitivecolor. | #17140f |
root.color@tone=primary | semanticcolor. | primitivecolor. | #fbf8f1 |
root.min-height | semanticsize. | primitivesize. | 40px |
packages/base/contracts/button.contract.json and the token files when this page is built, so it always matches the code.You see drift before it reaches users
How a design system comes apart
IllustrationMonth 12: the system still exists, but nobody builds with it as one thing any more.
Eight areas, one rubric. Pick an area to see what was checked and found.
Story Atelier after Loom's service (filled) and takenote, a different app with no design system (outline), from the audit data. With scripting on, you can switch systems and open each area’s checks and findings.
We show our own numbers
- A strong system, scored honestly. Story Atelier, the design system of Seamline (a product from our own team), scored 59 out of 100, "Loose threads". After Loom's service it scores 83, "Holding together". Working That result is on our copy of the system, scored with Loom's own open rubric, and the founder has not yet accepted the records. Before our service it scored 100 on patterns and 24 on brand and content rules. The audit shows designers where the work is. Working
- 192 open questions, listed. Conversion of Story Atelier listed 192 questions in its component contracts that only people could answer, such as when not to use a component.
- Accessibility checked on every state. For the components Loom writes, axe runs on every state, with keyboard and focus scripts. Partial What does not work yet: this covers three components so far, and contrast across every mode is not yet automated for client systems.
You should spend your time designing, not checking whether the system still tells the truth.
Questions
Do I have to leave Figma? No. Figma stays your design tool and one of the two sources of truth. Loom reads it and compares it with code. Loom supports paid Figma plans, Professional and up.
Will Loom redesign our components? No. Conversion keeps the look. It changes the structure and the rules underneath.
Who decides when Figma and code disagree? The owner of that area. Loom shows the difference and the evidence; a person decides.
Can I propose a new component? Yes. Any team can propose. Loom attaches its own evidence, such as local copies of the same component found in code, but evidence is never required.
What about our regional or product variations? Layers let a region or product extend the system within lock levels, with a recorded reason. Layers are shown today with sample data. Concept