One Event Stream, Two UI Protocols: Wiring Solon AI to Any Frontend The Solon AI project released solon-ai-ui, a translation module that converts Solon AI's internal Flux stream into frontend-facing event streams for two UI protocols: the Vercel AI SDK UI Message Stream Protocol v1 (via solon-ai-ui-aisdk) and AG-UI (via solon-ai-ui-agui). The adapters depend only on solon-ai-core and resolve agent events reflectively, so the agent stack is not dragged into apps that only need to stream a chat model, and unknown events are routed to a custom/data-* bucket rather than dropped. Your Java agent streams tokens. Your frontend speaks a protocol. Between them sits a translation layer that nobody wants to write — and that everybody writes badly. It is the same story every time: text deltas, reasoning deltas, tool-call arguments, tool results, citations, errors, aborts. Six or seven channels, all multiplexed onto one SSE connection, all needing stable IDs so the UI can stitch deltas back into messages. Get the ID keying wrong and two parallel tool calls collide. Forget to close a block on error and the frontend hangs forever waiting for an end that never comes. Cancel the request and — if you forgot one line — the model keeps generating, and you keep paying. Solon AI has a module whose only job is this translation layer: solon-ai-ui . Repo: https://github.com/opensolon/solon-ai https://github.com/opensolon/solon-ai module: solon-ai-ui It ships two adapters: | Artifact | Protocol it speaks | Pairs with | |---|---|---| | solon-ai-ui-aisdk | Vercel AI SDK — UI Message Stream Protocol v1 | @ai-sdk/react , @ai-sdk/vue useChat | | solon-ai-ui-agui | AG-UI | AG-UI compatible component libraries | Both convert Solon AI's internal Flux