Packages
@anvia/react-ui: Getting Started
Install @anvia/react-ui and compose Anvia chat primitives.
Install
pnpm add @anvia/react @anvia/react-ui
Choose a surface
Use chat for transcripts, follow-up turns, tools, attachments, and human review. Use completion for
one prompt input and one generated text result. The hooks can share the same request shape, but their
providers and primitives are separate. Chat uses ChatProvider with Thread.*, Composer.*,
Message.*, and HumanInput.*; completion uses CompletionProvider with Completion.*.
Chat setup
import { useChat } from "@anvia/react";
import { ChatProvider, Composer, Thread } from "@anvia/react-ui";
import "@anvia/react-ui/styles.css";
export function SupportChat() {
const chat = useChat({ endpoint: "http://localhost:8787/api/chat" });
return (
<ChatProvider controller={chat}>
<Thread.Root>
<Thread.Viewport>
<Thread.Empty>Start a conversation.</Thread.Empty>
<Thread.Suggestions />
<Thread.Messages />
<Thread.Error />
<Thread.ScrollToBottom>Jump to latest</Thread.ScrollToBottom>
</Thread.Viewport>
<Composer.Root>
<Composer.Attachments />
<Composer.AddAttachment>Attach</Composer.AddAttachment>
<Composer.Input placeholder="Send a message..." />
<Composer.Stop>Stop</Composer.Stop>
<Composer.Submit>Send</Composer.Submit>
</Composer.Root>
</Thread.Root>
</ChatProvider>
);
}
The API app endpoint should accept { messages, stream: true } and stream Anvia events. For the
full route setup, see React UI server routes.
Completion setup
import { useCompletion } from "@anvia/react";
import { Completion, CompletionProvider } from "@anvia/react-ui";
export function DraftBox() {
const completion = useCompletion({ endpoint: "http://localhost:8787/api/completion" });
return (
<CompletionProvider controller={completion}>
<Completion.Root>
<Completion.Output />
<Completion.Form>
<Completion.Input placeholder="Write a prompt..." />
<Completion.Stop>Stop</Completion.Stop>
<Completion.Submit>Complete</Completion.Submit>
</Completion.Form>
</Completion.Root>
</CompletionProvider>
);
}
Next step
Continue with Usage Patterns, or use the dedicated React UI TanStack quickstart.
