FluxChat's SDK and web widget look simple from the outside — a chat window — but there's a fair amount happening underneath. Here's a tour.
Streaming replies
Replies stream in over a newline-delimited JSON protocol: begin, item, and end frames. A single response can contain multiple begin/item/end cycles — the main agent's reply is one cycle, and any sub-agent "thinking" frames (like a product search running in the background) are silently dropped so only the top-level agent's text ever reaches the chat window.
Conversation memory
The agent appends a <state>{...}</state> tag to its reply. The client captures it, strips it from what's displayed, and echoes it back on the next turn — so conversation memory persists without you managing sessions yourself.
Rich cards
Product, order, blog, and image cards are embedded in the reply as <products>, <orders>, <blogs>, and <images> tag islands containing JSON. Both the Flutter SDK and the web widget parse these out and render native cards — and both deliberately suppress an incomplete tag (still streaming in) rather than flashing partial JSON on screen.
Image generation
Image generation supports four interchangeable backends — OpenAI, Google Gemini, Cloudflare Workers AI, or Pollinations — swappable at the workflow level without touching the client.
Curious how it looks running live? Try the widget designer.