> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rixxui.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Accumulated streaming

> Feed cumulative provider output to Rixx UI while preserving safe provisional and committed states.

Rixx UI consumes an accumulated source string, not individual transport chunks.
Append decoded text to one buffer and render the full buffer after each update.

```tsx theme={null}
const [source, setSource] = useState("");
const [status, setStatus] = useState<RUIStreamStatus>("streaming");

async function consume(stream: ReadableStream<Uint8Array>) {
  const reader = stream.pipeThrough(new TextDecoderStream()).getReader();
  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    setSource((current) => current + value);
  }
  setStatus("complete");
}

return <RUIRenderer streamStatus={status}>{source}</RUIRenderer>;
```

<Note>
  Transport framing and provider parsing belong to the host. Never append SSE
  metadata, JSON envelopes, or provider control events to RUI source.
</Note>

## State guarantees

* Appended characters are processed incrementally.
* Complete statements can enter a provisional graph.
* An open built-in Markdown `RichText` string can produce a display-only text
  overlay.
* Provisional links and controls remain inert.
* Custom components and actions activate only after a valid commit.
* `cancelled` and `failed` never promote provisional content to committed UI.

Set `maxSourceLength` if the default 128,000-character limit does not fit your
application. Prefer a smaller application-specific bound where possible.
