mrkeyoor.com_
Sun 13 Sept 16:42 UTC
Webevaluationupdated 13 Sept 2026

openui review

OpenUI is a TypeScript toolkit that lets a language model describe an interface while it streams, then renders that description with components your application registered. It includes an official React stack, a framework-neutral parser, community Vue and Svelte bindings, chat adapters, and a project generator. The point is to produce forms, tables, charts, and other interactive responses without letting the model send arbitrary application code.

trackingstars / 7d
Verdict

Our OpenUI run installed 1,669 packages and passed 11 tests in 36 seconds, so the framework is testable but expensive to carry for a small interface. Use it when streamed, component-limited generative UI is a core product feature and your team can test parser recovery against real prompts. Choose a narrower chat library if generated layouts, forms, and tool-driven components are optional.

We ran it

Lab card: what happened when we ran openuiScreenshot of openui (www.openui.com)
Install✓ · 114s1669 packages · 1662 MB
Buildn/ano build script
Tests✓ · 36s11 passed · 0 failed of 11 (vitest)
Repo2836 files~174,781 lines of source · 274.9 MB · 8 CI workflows

Answers from our run

Does openui build from source?

Dependencies installed in 114 seconds (1669 packages), and the project has no separate build step. We cloned commit 8bd2e27 into a clean Debian container with 3 CPUs and no project-specific setup.

Do openui's tests pass?

Yes: 11 of 11 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use openui?

Small projects with a tight dependency budget: our install pulled 1,669 packages and occupied 1,662 MB.

What are the alternatives to openui?

json-render, CopilotKit, assistant-ui. Our OpenUI run installed 1,669 packages and passed 11 tests in 36 seconds, so the framework is testable but expensive to carry for a small interface.

Setup3/5Easy scaffold, but 1,669 packages and backend work add weight
Docs5/5Detailed language, renderer, backend, reliability, and benchmark guides
Community4/58,926 stars and September activity, with 157 open items
Maturity3/5Useful packages exist, while streaming and framework gaps remain

Who it’s for

React teams building assistants that need interactive forms, tables, charts, or tool results inside the conversation.
Developers who want the model prompt generated from the same typed component library the renderer uses.
Agent builders prepared to own a streaming backend route, provider credentials, storage, and action authorization.
MCP users who want generated components to call an existing client through a typed tool provider.

Who it’s NOT for

Small projects with a tight dependency budget: our install pulled 1,669 packages and occupied 1,662 MB.
Teams expecting a complete self-hosted backend: the guide leaves the model route and five conversation-storage endpoints to the application.
Products that require identical batch and streaming parse results today: open issue 1127 shows redefined statement IDs resolving differently.
Vue users expecting React feature parity: the README calls Vue community-supported, and issue 728 says its chat example renders promised Markdown as literal text.
Native Flutter teams: open issue 394 says there is no Dart parser, component library, or widget renderer.
Applications that cannot tolerate an occasional invalid generated interface: OpenUI's own reliability page says every tested format produced incomplete output.

Setup reality

Our sandbox installed 1,669 packages in 114 seconds and used 1,662 MB. The default build step was skipped because it found no build script or target. Vitest finished in 36 seconds with 11 passed and 0 failed of 11.

The scaffold asks for an OpenAI API key, while other adapters need their matching provider route and credentials. A self-hosted chat also needs server code for streaming and, for persistence, five storage endpoints. Hosted Gateway, Autofix, or production observability requires a Thesys key.

The current root manifest pins pnpm 10.33.0 and accepts Node 20.19 or Node 22.12 and newer. React has official UI packages; Vue and Svelte receive runtime bindings without the same prebuilt UI surface. Our 274.9 MB monorepo had 8 CI workflows, no Dockerfile, and no tests directory.

A 274.9 MB monorepo turns model text into registered components

Our measured checkout was 274.9 MB before dependencies, and its central idea is smaller than the repository. You define a component library with names, typed properties, and render functions. OpenUI turns that library into model instructions, parses OpenUI Lang as the response arrives, and renders only registered components. A model can request a chart, form, or table without returning executable React source. The application still decides which components and actions exist.

The 2,836-file checkout divides that loop into focused packages. lang-core handles parsing and prompt generation without a UI framework. React packages cover rendering, headless chat state, and prebuilt interfaces. Other packages handle email, LangChain or LangGraph, browser bundles, Vue, Svelte, scaffolding, and observability. The React renderer can receive ordinary async functions or an MCP-client-shaped tool provider for queries and mutations, so generated UI can show live application data instead of static model text.

What happened when we ran it

Our sandbox installed 1,669 pnpm packages in 114 seconds and used 1,662 MB on disk. We tested commit 8bd2e27 in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and no secrets. The installation succeeded without an error in the supplied log. That result is reproducible enough for evaluation, but the dependency footprint is large compared with a component library that a team might otherwise expect to add to one frontend.

The harness found no default build script or target, so it skipped the build step rather than recording a success or failure. Vitest then completed in 36 seconds with 11 passed and 0 failed of 11. The monorepo had 8 CI workflow files, no Dockerfile, no tests directory, and workspace configuration. Those facts do not describe every package's private check set; they state only what our standard root run could see and execute.

The 1,662 MB install leaves backend ownership with the application

Our 1,662 MB installed workspace is much bigger than the one-command scaffold suggests. The quick start asks for an OpenAI key, but self-hosting needs more work. Your server route must call the chosen model, preserve its streaming wire format, pass abort signals upstream, and close the stream. Persistent chat requires five storage operations for listing, creating, reading, updating, and deleting threads. OpenUI supplies client adapters and example routes, while your application owns the database and authorization.

Node 20.19 or Node 22.12 and newer are supported by the current root manifest, with pnpm 10.33.0 pinned for workspace development. The 1,669-package install covers many packages and examples, while adopters can install a narrower package set. Provider keys belong on the server. Optional Gateway, Autofix, and cloud observability add Thesys credentials and service calls. A team seeking a completely local stack should separate the open renderer from those hosted reliability products when estimating operations and privacy.

The 7-scenario token table supports compact syntax, not perfect output

OpenUI's repository benchmark uses 7 saved UI scenarios generated once with GPT-5.2, then projects the same parsed tree into other formats. Its table counts 4,800 tokens for OpenUI Lang, 10,180 for Vercel JSON-Render, and 9,948 for Thesys C1 JSON with the GPT-5 tokenizer. That is a useful format-size comparison under a documented fixture set. It is not our runtime benchmark, and it does not establish lower latency for every model, schema, or prompt.

The project's separate reliability page is candid about generation failure. It reports 2 blank screens across 1,104 runs, a 92.9% task completion rate for OpenUI, and a best model pairing at 99.5% rather than 100%. The proposed defenses are tighter component schemas, better prompts, repeated evaluation, validation, and correction. Some repair options are hosted services. Teams should keep an ordinary error or text fallback in the product instead of assuming a structured stream always finishes.

The 11 passing tests do not close streaming parser bugs

Our 11-test root run passed, but issue 1127 shows a semantic mismatch in completed output. When one statement ID is defined twice, the batch parser uses the last definition and the streaming parser keeps the first. The reporter reproduced the difference with whole, line-by-line, character-by-character, and split delivery. A final interface should not depend on whether network chunks arrived in one piece, so applications using incremental editing need a regression case for their own emitted language.

Issue 767 covers another stream-only failure: a truncated binding default can enter the store during recovery and remain after the complete value arrives. A reload fixes it because the store starts fresh. Issue 1128 says React UI 0.13 removed the practical path for a custom assistant component to render live tool activity during the tool-only phase. These are narrow reports, yet each touches a reason to adopt OpenUI: progressive rendering, reactive state, or message customization.

A September 11 push coexists with 157 open issues and pull requests

GitHub recorded 8,926 stars and a last push on September 11, 2026. Search results showed 58 open issues and 99 open pull requests, matching the repository's 157 combined open-item count. Issue updates on September 10 show live maintainer and contributor activity. The queue also asks adopters to pin package versions and search the exact parser, renderer, or adapter they use rather than treating repository-wide activity as proof of stability.

GitHub's latest-release endpoint returned no release, even though the root manifest says version 1.0.1 and individual packages remain on 0.x versions. The 8 visible CI workflows include package publishing and CLI checks, so absence of a GitHub release is not evidence that work stopped. It does mean GitHub's release page cannot tell a buyer which package set is the stable platform. Start with the smallest package surface that serves one tested generative UI flow.

Alternatives

ProjectWhat it isPick it when
json-renderA generative UI framework built around streamed JSON Patch output and registered components.pick this instead when JSON-based output and the Vercel ecosystem fit your existing agent stack better than a new compact language.
CopilotKit gh↗A broader frontend stack for agents and AG-UI applications across several surfaces.pick this instead when agent connectivity and an application-facing chat framework matter more than OpenUI Lang itself.
assistant-uiA React library for building and customizing AI chat interfaces.pick this instead when the main job is a polished React chat shell rather than model-generated component trees.

What people are saying

  1. [github-trending] thesysdev/openui

Sources

  1. OpenUI repository and README
  2. OpenUI self-hosting guide
  3. OpenUI Lang benchmark methodology
  4. OpenUI reliability guide
  5. Streaming parser ID issue 1127
  6. Streaming binding issue 767
  7. Assistant message customization issue 1128
  8. Vue Markdown issue 728

More web reviews

fabric.js · uBlock · OI-wiki · dioxus · Folo · Babylon.js · the whole board →