Axolo Design Manager is an AI-driven prototyping tool plugged into a team's real design system. Before anyone iterates on a screen, the tool has to import that design system: understand what is a component, who a prop is for, which token a raw value should become.
I set one rule for that first step. Importing a design system must work without any external AI API. No bill per call, and no client code sent to a third party. Large models come later, during screen iterations, where they really earn their place.
So the question was simple: can a small open model, running on an ordinary CPU, make those decisions well enough?
How we tested
- A dozen small open-source models, all on CPU, no GPU: Qwen3 and Qwen3.5, Gemma 4, Granite 4.2, Phi-4-mini, SmolLM3, LFM2.5 and Qwen2.5-Coder, from 1.2 to 4 billion parameters.
- Laya, a tiny decision model. It is not a chat model: it picks an answer from a list, very fast.
- Claude Opus 5.5 as the ceiling: what a large model gets on the same questions.
- Axolo's import scripts as the reference for everything mechanical.
- About 2,500 real design system questions, drawn from public systems such as shadcn, MUI, Mantine, Ant Design, Carbon, Chakra, Fluent, Spectrum and Radix.
- Ambiguous cases settled by hand. The ranking uses the 290 cases every engine answered, 135 of them reviewed by a human.
The podium
Ranked on the human-reviewed cases. Three 4-billion-parameter models finish within three points of each other.
- 2Gemma 4 E4B63 %7.8 GB · Apache 2.0
- 1Qwen3.5 4B65 %6.3 GB · Apache 2.0
- 3Qwen3 4B62 %5.3 GB · Apache 2.0
Off the podium · ceiling Claude Opus 5.5 scores 87 % on the same reviewed cases. It runs behind an external API, so it is the yardstick, not a candidate.
The full ranking
Accuracy on the 135 human-reviewed cases, then on all 290 shared cases. Memory is peak RAM on the machine.
| Rank | Engine | Reviewed | All cases | Memory | Licence | Status |
|---|---|---|---|---|---|---|
| — | Claude Opus 5.5 | 87 % | 92 % | External API | Commercial API | Ceiling, not ranked |
| 1 | Qwen3.5 4B | 65 % | 70 % | 6.3 GB | Apache 2.0 | Finalist |
| 2 | Gemma 4 E4B | 63 % | 70 % | 7.8 GB | Apache 2.0 | Finalist |
| 3 | Qwen3 4B | 62 % | 71 % | 5.3 GB | Apache 2.0 | Finalist |
| 4 | Phi-4-mini | 54 % | 61 % | 5.3 GB | MIT | Dropped |
| 5 | Gemma 4 E2B | 53 % | 60 % | 5.4 GB | Apache 2.0 | Dropped |
| 6 | SmolLM3 3B | 47 % | 56 % | 4.0 GB | Apache 2.0 | Dropped |
| 7 | Granite 4.2 3B | 46 % | 57 % | 4.3 GB | Apache 2.0 | Dropped |
| 8 | Qwen3.5 2B | 44 % | 52 % | 3.4 GB | Apache 2.0 | Dropped |
| 9 | Laya | 41 % | 50 % | 1.6 GB | MIT + Apache 2.0 | Reference (fast decisions) |
| 10 | LFM2.5 1.2B | 36 % | 41 % | 1.5 GB | LFM Open License | Dropped |
| 11 | Qwen2.5-Coder 1.5B | 33 % | 39 % | 2.0 GB | Apache 2.0 | Dropped |
| — | Axolo import scripts | 92 % on 512 import decisions | None | Axolo | Import reference | |
Import without an external API: validated
On the tasks that make up an import, the leading small model, Qwen3.5 4B, against Claude Opus 5.5.
| Import task | Qwen3.5 4B | Claude Opus 5.5 | Gap |
|---|---|---|---|
| Design system import (components, props, tokens) | 87 % | 97 % | −10 pts |
| Securing the import (decide alone vs the import rules) | 90 % | 87 % | +3 pts |
| Screen import (tokens, closest component) | 99 % | 100 % | −1 pt |
| Props: who each prop is for | 96 % | 95 % | +1 pt |
| Prop labels | 100 % | 97 % | +3 pts |
| Default texts | 100 % | 98 % | +2 pts |
| Compositions (links found between components) | 81 % | 97 % | −15 pts |
On securing the import, the small model beats Claude: 90 % against 87 %. Elsewhere it stays within a few points, except on compositions. A design system can be imported without any external API.
Use case × engine
Accuracy per use case, on all cases. The highlighted cell is the best engine on that row, Claude aside. A dash means the engine does not handle that task.
| Use case | Claude Opus 5.5 | Qwen3.5 4B | Gemma 4 E4B | Qwen3 4B | Laya | Scripts |
|---|---|---|---|---|---|---|
| ImportDesign system import | 97 % | 87 % | 69 % | 86 % | 70 % | — |
| ImportSecuring the import | 87 % | 90 % | 90 % | 92 % | 84 % | 90 % |
| ImportScreen import | 100 % | 99 % | 100 % | 99 % | 90 % | 96 % |
| ImportUseful props & default texts | 96 % | 85 % | 80 % | 72 % | 44 % | — |
| LibraryDocument type | 97 % | 90 % | 80 % | 100 % | 73 % | 90 % |
| LibraryOrganise components | 93 % | 86 % | 50 % | 89 % | 57 % | — |
| FeedbackSort feedback | 85 % | 70 % | 75 % | 75 % | 33 % | — |
| FeedbackReason for a thumbs-down | 100 % | 91 % | 75 % | 89 % | 46 % | — |
| FeedbackRoute a chat message | 98 % | 90 % | 75 % | 76 % | 48 % | — |
| RulesRaw value → token | 100 % | 86 % | 80 % | 81 % | 61 % | 89 % |
| RulesPrompt contradicts a rule | 97 % | 73 % | 80 % | 67 % | 53 % | — |
| RulesRule check on a screen | 100 % | 77 % | 85 % | 80 % | 50 % | 83 % |
| JudgementEdit or create | 77 % | 37 % | 20 % | 40 % | 30 % | — |
| JudgementPattern, component or nothing | 100 % | 47 % | 45 % | 47 % | 47 % | — |
| JudgementReason to keep a version | 97 % | 80 % | 75 % | 63 % | 57 % | — |
| JudgementRisk of a change set | 97 % | 50 % | 40 % | 43 % | 27 % | 83 % |
Speeds are provisional: the clean speed runs are still going, so this article ranks on accuracy only. As an order of magnitude, the 4B models take one to two seconds per decision on CPU, Laya under a fifth of a second.
What we take away
- Below 4 billion parameters, it does not hold. Every smaller model ends at 54 % or less on the reviewed cases.
- On import, a small model is almost as good as a large one. Within a few points on most tasks, and ahead on securing the import.
- Scripts remain unbeatable on mechanical work. Instant, free, and 96 % on screen import: anything a rule can decide should stay a rule.
- The gap widens on judgement calls. Edit or create, pattern or component, risk of a change set: 40 to 53 points behind. Those decisions happen during iterations, and that is where a large model belongs, or where the tool offers an explained choice instead of an imposed answer.
- Laya is fast but limited. Good for a quick first pass, not for the final word.
Scripts first, a small model as backup, a large model only where it really helps.
Next step: skills per task. Instead of one generic prompt, each decision gets its own short brief and examples, and we measure how far that pushes the small models.
Read next
The problem wasn't the machine
A local model plugged into Figma: neither the power nor the model was the limit. Access was.
Read the article MCP · in FrenchOne markdown file vs. an MCP server: 92% more tokens
Atlassian's measurement, and why on-demand loading wins.
Read the article