{
  "id": 12296201,
  "title": "One Event Stream, Two UI Protocols: Wiring Solon AI to Any Frontend",
  "url": "https://urgent.news/2026/10/06/one-event-stream-two-ui-protocols-wiring-solon-ai-to-any-frontend",
  "topic": "ai",
  "section": "AI",
  "published": "2026-10-06T04:03:37.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/solonjava/one-event-stream-two-ui-protocols-wiring-solon-ai-to-any-frontend-318h"
  },
  "original_language": "en",
  "account": "Solon AI provides a module called solon-ai-ui that allows streaming its internal Flux ChatEvent into a frontend-facing event stream. This translation layer is necessary because the two systems use different event protocols. Two adapters, Vercel AI SDK and AG-UI, are included in the solon-ai-ui module to facilitate this conversion.\n\nThe Vercel AI SDK adapter converts the chatModel.prompt(prompt).stream() call into a Flux SseEvent compatible with the Vercel AI SDK. It follows a parts model with roughly twenty part types, each represented as a small JSON frame. The adapter emits these frames in a fixed order, including start, message-metadata, step, reasoning, tool-input, source-url, text, file, and finish frames.\n\nThe AG-UI adapter, on the other hand, targets a different event vocabulary. It uses RUN_STARTED, TEXT_MESSAGE_CONTENT, TOOL_CALL_ARGS, REASONING_MESSAGE_CONTENT, and STEP_FINISHED events, among others. The adapter ensures stable IDs across deltas by keying the ID map on responseId + step + itemId. It also handles interruption, closing any open content block and emitting a RUN_FINISHED event with an interrupt outcome when the core emits ABORT.\n\nBoth adapters are thin wrappers that depend only on solon-ai-core, ensuring they don't drag the entire agent stack into every app using them. This modular design makes it easier to integrate Solon AI with various frontends without the need for complex translation layers.",
  "summary": "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…",
  "key_points": [
    "Solon AI module solon-ai-ui enables Flux ChatEvent streaming to frontends.",
    "Vercel AI SDK and AG-UI adapters convert event protocols for integration.",
    "Adapters use thin wrappers to maintain modular design and frontend compatibility."
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}