A plugin for DeepSeek Harness. The model writes a React component into its reply and dsh web runs it as the tokens arrive — sliders you can drag before the card is finished, 3D, games, any package on npm.

$ dsh plugin --profile web add dsh-generative-ui

Streams, and is usable while it does

partial-react compiles the half-written file on every frame and keeps the last good one on screen. A control is live the moment its line arrives.

State survives the rest of the stream

Hooks keep their values across recompiles, so what the reader dragged mid-stream is still there when the model finishes the file.

Any npm package, no install

Bare imports resolve through esm.sh against the host's own React — React Aria, react-three-fiber, KaTeX, NumberFlow, confetti.

Wired to the harness

$dsh/chat starts the next turn, $dsh/state persists, $dsh/fs and $dsh/exec run under the session's own access mode.


Half the tokens. On screen from the first tenth.

A component is shorter than the page that would draw it — about 45% fewer output tokens across the 48-case gallery in the UI4A report — and it can render long before it is complete. HTML has nothing to show until it parses.

Read the UI4A report →
UI4A
672/ 672 tok
usable — still streaming
HTML
1100/ 1224 tok
nothing until it parses

A dsh plugin, not a widget in an iframe.

One install. The cards render in the host's React tree, under the host's styles and the session's permissions.

$ dsh plugin --profile web add dsh-generative-ui
Your theme
Cards read dsh's own tokens, so dark mode and accent follow the app.
Inline or canvas
A reply-sized card sits in the transcript; anything worth keeping opens in the canvas panel beside it.
No new tools
The model writes files with dsh's own Write and Edit. Canvases live under .dsh/ui4a/ in the workspace.
Errors go back to the model
A card that fails after streaming reports itself, once, and the model fixes it in the next turn.