The benchmark
How MorphScreen is measured against OpenUI, every answer we scored to download, and the rows where OpenUI is ahead with the reason for each. Of 63 rows with numbers for both, MorphScreen is ahead on 51, OpenUI on 6, and 6 are even.
Scoreboard of 2026-10-25, commit a2eaaf1+changes. Every row, with how it was measured.
How it's run
- The briefs and the rules are OpenUI's own. We use generative-ui-bench, the benchmark thesysdev publishes for OpenUI, at commit fcca05af: its 46 screen briefs, from 2 to 18 numbered requirements each, none naming a component; its condition (temperature 0.7, a 16,384-token ceiling); and its validator for OpenUI Lang. Its briefs aren't ours to copy, so they're linked, not shown.
- The same model, the same providers. Both formats go through OpenRouter to the same model (for DeepSeek, pinned to the same providers in the same order), four answers a brief, or two in some runs, with the model's reasoning on or off for both alike.
- Each format judged by its own code. OpenUI Lang by the benchmark's validator and OpenUI's parser; our format by the validator the API runs. Either way an answer counts as valid when its validator finds nothing wrong (it isn't cut off, every component is one the app allows, every setting is of the right kind) and it has at least as many components as the brief has requirements, the benchmark's coverage floor.
- Before repair. The validity rows count the model's first answer. The API then asks the same model to fix only the lines that broke a rule; that's measured apart and not in these rows.
- In the browser. The speed rows stream 20 answers into Chrome in 32-character chunks with layout forced after each, the same for both renderers: Chrome, 20 answers, 32-character chunks, layout forced after every chunk in both. Time to first text: Chrome, 20 answers, 32-character chunks every 30 ms; median. Layout shift: Chrome, 20 answers, 32-character chunks; cumulative layout shift, all answers.
- Sizes are what a page downloads, brotli-compressed: sdk/web/dist against OpenUI's React renderer bundle and stylesheet.
The runs
Each archive holds every raw answer in both formats as the model wrote it, one line per call with its model, tokens, cost and time, and our verdict on each answer.
| Run | Our answers | Valid, ours | Valid, OpenUI | Raw answers and verdicts |
|---|---|---|---|---|
| DeepSeek V4 Flash, reasoning off, every pack (the API's default)deepseek/deepseek-v4-flash | 92 | 87.0% (80/92) | 87.0% (80/92)its answers from deepseek-v4-flash-noreason | deepseek-v4-flash-noreason-all.tar.gz 122 KB |
| DeepSeek V4 Flash, reasoning off, core components onlydeepseek/deepseek-v4-flash | 92 | 92.4% (85/92) | 87.0% (80/92)its answers from deepseek-v4-flash-noreason | deepseek-v4-flash-noreason-v011b.tar.gz 94 KB |
| DeepSeek V4 Flash, reasoning offdeepseek/deepseek-v4-flash | 184 | 89.1% (164/184) | 84.8% (156/184) | deepseek-v4-flash-noreason.tar.gz 420 KB |
| DeepSeek V4 Flash, its reasoning on, as the benchmark runs itdeepseek/deepseek-v4-flash | 184 | 92.9% (171/184) | 91.8% (169/184) | deepseek-v4-flash.tar.gz 400 KB |
| Nemotron 3 Ultranvidia/nemotron-3-ultra-550b-a55b:free | 184 | 89.7% (165/184) | 81.0% (149/184) | nemotron-full-v09.tar.gz 644 KB |
| Nemotron 3 Nano 30B, a small open modelnvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free | 92 | 66.3% (61/92) | 31.5% (29/92) | nano30-v05.tar.gz 128 KB |
Where OpenUI is ahead
Blank answers with DeepSeek's reasoning on
With its reasoning on, DeepSeek V4 Flash sometimes spends the whole answer thinking and writes nothing: 4 times in 184 for us, 3 for OpenUI. The API runs this model with reasoning off unless an app turns it on, and with it off both formats had no blank answers in 184.
- Blank answers, DeepSeek V4 Flash, 46 briefs x 4: ours 4, OpenUI 3
Longer answers with reasoning off
With reasoning off, our answers run longer than OpenUI's. Ours carry their prose as Markdown around the components, and since prompt v0.11 the model is asked for more to use: a button under each option, quizzes, forms. With reasoning on, ours are the shorter ones. Not closed yet: it needs a prompt change and a new run.
- Answer tokens, DeepSeek V4 Flash, reasoning off, 46 briefs x 4 (mean): ours 1,140, OpenUI 932
- Answer tokens, DeepSeek V4 Flash, reasoning off, our Q12 prompt, 46 x 4 (mean): ours 1,079, OpenUI 932
- Answer tokens, DeepSeek V4 Flash, reasoning off, prompt v0.11, core alone, 46 x 2 (mean): ours 1,003, OpenUI 913
- Answer tokens, DeepSeek V4 Flash, reasoning off, answers to use (Q13), every pack (the API's default), 46 x 2 (mean): ours 1,268, OpenUI 913
One brief, with every pack loaded
With every pack loaded (75 components instead of the core's 25), one more brief failed in one of its two runs: 34 of 46 valid every time against OpenUI's 35. Valid answers overall are even, 87.0% each.
- Briefs valid every time, DeepSeek V4 Flash, reasoning off, answers to use (Q13), every pack (the API's default), 46 x 2: ours 34 of 46, OpenUI 35 of 46