The RSC story

The <thinking-stream> Web Component is framework-agnostic — it can be authored directly inside a server component(it’s just an HTML tag). Registering the custom element and driving it with refs & effects is client-only, so the React binding (components/ThinkingStream.tsx) is a thin 'use client' wrapper. This page is a Server Component; the interactive surface mounts behind a <Suspense> boundary.

The SSE story

app/api/chat/route.ts streams a model’s reasoning token-by-token over text/event-stream into <thinking-stream>. The model key stays server-side (env vars only) and the route is rate-limited per-IP. With no key set, it streams a canned trace so the path always works.

reason-fx · part of the *-fx familydavemooney.de
reason-fx
Live modeGitHub ↗
reason-fx · <thinking-stream>

The truth of thinking,
rendered with craft.

Watch a model think aloud, change its mind, and settle — live, self-revising reasoning in one framework-agnostic Web Component.

alive thinkingthe “Wait…” morphthe settle
granatapfel · self-correction
Live mode

Feed it your own reasoning.

Paste a <think>…</think>transcript for instant local replay, or stream a real model’s reasoning token-by-token over SSE — keys stay server-side, rate-limited.

Config surface · live

How hard older thinking dims behind the live line.

Phase detection

Label blocks (Framing · Exploring · Reconsidering…).

Collapse on settle

Auto folds the trace to a chip; manual keeps it open.

Reduce motion

Honours the OS by default; force either way to compare.