A Markdown renderer built for streaming.
Website · Playground · Documentation · 简体中文
Fluxdown keeps streaming Markdown readable, from unfinished syntax to the final response. Use it for AI conversations, live writing, and other interfaces where text keeps growing.
- Smooth streaming. Reveal incoming text gradually and handle unfinished links, emphasis, and code.
- Less repeated work. Block-level caching reuses stable content as the message grows.
- Familiar Markdown. Render GFM tables, task lists, strikethrough, and autolinks, with code highlighting and optional math.
- Adaptable presentation. Customize themes, replace components, or extend parsing and rendering with plugins.
- A framework-independent core. Start with the React component or build a renderer for your own interface.
In a React 18 or 19 app:
pnpm add fluxdownimport { Fluxdown } from "fluxdown";
type MessageProps = {
text: string;
isStreaming: boolean;
};
export function Message({ text, isStreaming }: MessageProps) {
return <Fluxdown text={text} streaming={isStreaming} />;
}Pass the full message received so far as text. Set isStreaming to false when generation finishes, is cancelled, or fails. For static content, omit streaming.
If your bundler does not load the styles automatically, add this to your app's global style entry:
import "fluxdown/styles.css";See the React quick start for more examples.
| Package | Use it for |
|---|---|
fluxdown |
Ready-to-use Markdown rendering in React. |
@fluxdown/core |
Parsing, repair, and reactive content blocks for a custom renderer. |
stative |
Composable state and derived computations, also used by Core. |
- Streaming — connect incoming text and control streaming effects.
- Styling — adjust themes, typography, and layout.
- Plugins — customize syntax, content, and interactions.
- Core — work with reactive content blocks directly.
- Stative — create and compose state flows.
Bug reports, documentation improvements, and pull requests are welcome. Use issues to report bugs or discuss ideas. A minimal reproduction helps us investigate a problem.
See CONTRIBUTING.md for development setup and pull request guidelines. Report vulnerabilities privately as described in SECURITY.md.
Thanks to everyone who contributes code, documentation, bug reports, and ideas.
