Package Exports
- @openuidev/react-ui
- @openuidev/react-ui/Accordion
- @openuidev/react-ui/BottomTray
- @openuidev/react-ui/BottomTray/components
- @openuidev/react-ui/Button
- @openuidev/react-ui/Buttons
- @openuidev/react-ui/Calendar
- @openuidev/react-ui/Callout
- @openuidev/react-ui/Card
- @openuidev/react-ui/CardHeader
- @openuidev/react-ui/Carousel
- @openuidev/react-ui/Charts
- @openuidev/react-ui/Charts/AreaChart
- @openuidev/react-ui/Charts/AreaChart/types
- @openuidev/react-ui/Charts/AreaChartCondensed
- @openuidev/react-ui/Charts/BarChart
- @openuidev/react-ui/Charts/BarChart/types
- @openuidev/react-ui/Charts/BarChartCondensed
- @openuidev/react-ui/Charts/HorizontalBarChart
- @openuidev/react-ui/Charts/HorizontalBarChart/types
- @openuidev/react-ui/Charts/LineChart
- @openuidev/react-ui/Charts/LineChart/types
- @openuidev/react-ui/Charts/LineChartCondensed
- @openuidev/react-ui/Charts/MiniAreaChart
- @openuidev/react-ui/Charts/MiniAreaChart/types
- @openuidev/react-ui/Charts/MiniBarChart
- @openuidev/react-ui/Charts/MiniBarChart/types
- @openuidev/react-ui/Charts/MiniLineChart
- @openuidev/react-ui/Charts/MiniLineChart/types
- @openuidev/react-ui/Charts/PieChart
- @openuidev/react-ui/Charts/PieChart/types
- @openuidev/react-ui/Charts/RadarChart
- @openuidev/react-ui/Charts/RadarChart/types
- @openuidev/react-ui/Charts/RadarChart/utils
- @openuidev/react-ui/Charts/RadialChart
- @openuidev/react-ui/Charts/RadialChart/types
- @openuidev/react-ui/Charts/ScatterChart
- @openuidev/react-ui/Charts/ScatterChart/types
- @openuidev/react-ui/Charts/SingleStackedBarChart
- @openuidev/react-ui/Charts/SingleStackedBarChart/components
- @openuidev/react-ui/Charts/SingleStackedBarChart/types
- @openuidev/react-ui/Charts/constants
- @openuidev/react-ui/Charts/hooks
- @openuidev/react-ui/Charts/shared
- @openuidev/react-ui/Charts/shared/LineInBarShape
- @openuidev/react-ui/Charts/shared/PortalTooltip
- @openuidev/react-ui/Charts/shared/PortalTooltip/utils
- @openuidev/react-ui/Charts/shared/SVGXAxisTick
- @openuidev/react-ui/Charts/shared/ScrollButtonsHorizontal
- @openuidev/react-ui/Charts/shared/ScrollButtonsVertical
- @openuidev/react-ui/Charts/shared/SideBarTooltip
- @openuidev/react-ui/Charts/types
- @openuidev/react-ui/Charts/utils
- @openuidev/react-ui/CheckBoxGroup
- @openuidev/react-ui/CheckBoxItem
- @openuidev/react-ui/CodeBlock
- @openuidev/react-ui/CopilotShell
- @openuidev/react-ui/CopilotShell/components
- @openuidev/react-ui/DatePicker
- @openuidev/react-ui/FollowUpBlock
- @openuidev/react-ui/FollowUpItem
- @openuidev/react-ui/FormControl
- @openuidev/react-ui/FormControl/Hint
- @openuidev/react-ui/IconButton
- @openuidev/react-ui/Image
- @openuidev/react-ui/ImageBlock
- @openuidev/react-ui/ImageGallery
- @openuidev/react-ui/Input
- @openuidev/react-ui/Label
- @openuidev/react-ui/ListBlock
- @openuidev/react-ui/ListItem
- @openuidev/react-ui/MarkDownRenderer
- @openuidev/react-ui/MessageLoading
- @openuidev/react-ui/Modal
- @openuidev/react-ui/OpenUIChat
- @openuidev/react-ui/OpenUIChat/utils
- @openuidev/react-ui/RadioGroup
- @openuidev/react-ui/RadioItem
- @openuidev/react-ui/SectionBlock
- @openuidev/react-ui/Select
- @openuidev/react-ui/Separator
- @openuidev/react-ui/Shell
- @openuidev/react-ui/Shell/components
- @openuidev/react-ui/Slider
- @openuidev/react-ui/Steps
- @openuidev/react-ui/SwitchGroup
- @openuidev/react-ui/SwitchItem
- @openuidev/react-ui/Table
- @openuidev/react-ui/Tabs
- @openuidev/react-ui/Tag
- @openuidev/react-ui/TagBlock
- @openuidev/react-ui/TextArea
- @openuidev/react-ui/TextCallout
- @openuidev/react-ui/TextContent
- @openuidev/react-ui/ThemeProvider
- @openuidev/react-ui/ToggleGroup
- @openuidev/react-ui/ToggleItem
- @openuidev/react-ui/ToolCall
- @openuidev/react-ui/ToolResult
- @openuidev/react-ui/_shared
- @openuidev/react-ui/_shared/artifact
- @openuidev/react-ui/_shared/store
- @openuidev/react-ui/_shared/types
- @openuidev/react-ui/_shared/utils
- @openuidev/react-ui/components.css
- @openuidev/react-ui/defaults.css
- @openuidev/react-ui/genui-lib
- @openuidev/react-ui/scssUtils
- @openuidev/react-ui/styles/accordion.css
- @openuidev/react-ui/styles/bottomTray.css
- @openuidev/react-ui/styles/button.css
- @openuidev/react-ui/styles/buttons.css
- @openuidev/react-ui/styles/calendar.css
- @openuidev/react-ui/styles/callout.css
- @openuidev/react-ui/styles/card.css
- @openuidev/react-ui/styles/cardHeader.css
- @openuidev/react-ui/styles/carousel.css
- @openuidev/react-ui/styles/charts.css
- @openuidev/react-ui/styles/checkBoxGroup.css
- @openuidev/react-ui/styles/checkBoxItem.css
- @openuidev/react-ui/styles/codeBlock.css
- @openuidev/react-ui/styles/copilotShell.css
- @openuidev/react-ui/styles/cssUtils.scss
- @openuidev/react-ui/styles/datePicker.css
- @openuidev/react-ui/styles/followUpBlock.css
- @openuidev/react-ui/styles/followUpItem.css
- @openuidev/react-ui/styles/formControl.css
- @openuidev/react-ui/styles/iconButton.css
- @openuidev/react-ui/styles/image.css
- @openuidev/react-ui/styles/imageBlock.css
- @openuidev/react-ui/styles/imageGallery.css
- @openuidev/react-ui/styles/index.css
- @openuidev/react-ui/styles/input.css
- @openuidev/react-ui/styles/label.css
- @openuidev/react-ui/styles/listBlock.css
- @openuidev/react-ui/styles/listItem.css
- @openuidev/react-ui/styles/markDownRenderer.css
- @openuidev/react-ui/styles/messageLoading.css
- @openuidev/react-ui/styles/openui-defaults.css
- @openuidev/react-ui/styles/radioGroup.css
- @openuidev/react-ui/styles/radioItem.css
- @openuidev/react-ui/styles/sectionBlock.css
- @openuidev/react-ui/styles/select.css
- @openuidev/react-ui/styles/separator.css
- @openuidev/react-ui/styles/shared.css
- @openuidev/react-ui/styles/shell.css
- @openuidev/react-ui/styles/slider.css
- @openuidev/react-ui/styles/steps.css
- @openuidev/react-ui/styles/switchGroup.css
- @openuidev/react-ui/styles/switchItem.css
- @openuidev/react-ui/styles/table.css
- @openuidev/react-ui/styles/tabs.css
- @openuidev/react-ui/styles/tag.css
- @openuidev/react-ui/styles/tagBlock.css
- @openuidev/react-ui/styles/textArea.css
- @openuidev/react-ui/styles/textCallout.css
- @openuidev/react-ui/styles/textContent.css
- @openuidev/react-ui/styles/toggleGroup.css
- @openuidev/react-ui/styles/toggleItem.css
- @openuidev/react-ui/styles/toolCall.css
- @openuidev/react-ui/styles/toolResult.css
- @openuidev/react-ui/tailwind
Readme
@openuidev/react-ui
React UI components, chat layouts, and component libraries for OpenUI. Drop-in chat surfaces with theming, or use individual components in your own layout.
Install
npm install @openuidev/react-ui @openuidev/react-lang @openuidev/react-headless
# or
pnpm add @openuidev/react-ui @openuidev/react-lang @openuidev/react-headlessPeer dependencies: react >=19.0.0, react-dom >=19.0.0, zustand ^4.5.5, @openuidev/react-lang, @openuidev/react-headless
Don't forget to import the component styles:
import "@openuidev/react-ui/components.css";Overview
This package provides three layers:
- Chat layouts — Ready-to-use chat surfaces (
FullScreen,Copilot,BottomTray) that wire up the provider, streaming, and rendering automatically. - Component library — A built-in set of UI components (charts, tables, forms, cards, etc.) that models can generate via OpenUI Lang.
- Individual components — Use
Button,Card,Table,Charts, and 30+ components directly in your own UI.
Quick Start
The fastest way to get a working chat app:
import { FullScreen } from "@openuidev/react-ui";
import "@openuidev/react-ui/components.css";
function App() {
return (
<FullScreen
apiUrl="/api/chat"
threadApiUrl="/api/threads"
/>
);
}Chat Layouts
| Component | Description |
|---|---|
FullScreen |
Full-page chat with a thread sidebar |
Copilot |
Side-panel copilot overlay |
BottomTray |
Collapsible bottom tray chat |
All chat layouts accept apiUrl, threadApiUrl, and theming props. See the chat docs for full configuration.
Copilot example
import { Copilot } from "@openuidev/react-ui";
function App() {
return (
<div>
<main>Your app content</main>
<Copilot apiUrl="/api/chat" threadApiUrl="/api/threads" />
</div>
);
}Built-in Component Libraries
The package ships with two preconfigured OpenUI Lang libraries:
| Export | Description |
|---|---|
openuiLibrary |
Full component library — charts, tables, forms, cards, images, and more |
openuiChatLibrary |
Chat-optimized subset with follow-ups, steps, and callouts |
Use them directly when building custom chat experiences:
import { Renderer } from "@openuidev/react-lang";
import { openuiLibrary } from "@openuidev/react-ui";
function AssistantMessage({ content, isStreaming }) {
return (
<Renderer
response={content}
library={openuiLibrary}
isStreaming={isStreaming}
/>
);
}Generate a system prompt from the library:
import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui";
const systemPrompt = openuiLibrary.prompt(openuiPromptOptions);Theming
Wrap your app in ThemeProvider to customize colors, typography, spacing, and effects:
import { ThemeProvider, createTheme } from "@openuidev/react-ui";
const customTheme = createTheme({
primary: "#6366f1",
background: "#fafafa",
foreground: "#1a1a1a",
});
function App() {
return (
<ThemeProvider mode="light" lightTheme={customTheme}>
<YourApp />
</ThemeProvider>
);
}| Export | Description |
|---|---|
ThemeProvider |
Context provider for theming |
createTheme(overrides) |
Create a theme with validation and defaults |
defaultLightTheme |
Built-in light theme |
defaultDarkTheme |
Built-in dark theme |
swatchTokens |
Token palette for use in theme builders |
Components
All components are available as individual imports:
| Category | Components |
|---|---|
| Layout | Card, CardHeader, SectionBlock, Tabs, Accordion, Carousel, Separator, Steps |
| Data Display | Table, Charts (bar, line, area, pie, radar, scatter), ListBlock, ListItem, Tag, TagBlock, CodeBlock, Image, ImageBlock, ImageGallery |
| Forms | Input, TextArea, Select, CheckBoxGroup, CheckBoxItem, RadioGroup, RadioItem, SwitchGroup, SwitchItem, Slider, DatePicker, FormControl, Label |
| Actions | Button, Buttons, IconButton, FollowUpBlock, FollowUpItem |
| Feedback | Callout, TextCallout, MessageLoading |
| Content | TextContent, MarkDownRenderer |
| Chat | FullScreen, Copilot, BottomTray, Shell.*, CopilotShell.*, ToolCall, ToolResult |
Per-component imports
For smaller bundles, import components individually:
import { Button } from "@openuidev/react-ui/Button";
import { Card } from "@openuidev/react-ui/Card";
import { Charts } from "@openuidev/react-ui/Charts";Subpath Exports
| Import path | Description |
|---|---|
@openuidev/react-ui |
All components and libraries |
@openuidev/react-ui/components.css |
Compiled component styles |
@openuidev/react-ui/genui-lib |
OpenUI Lang libraries and prompt options |
@openuidev/react-ui/tailwind |
Tailwind CSS plugin |
@openuidev/react-ui/styles/* |
SCSS utilities |
@openuidev/react-ui/scssUtils |
SCSS utility functions |
@openuidev/react-ui/<Component> |
Per-component entry points |
Documentation
Full documentation, component guides, and live examples are available at openui.com.