ChatContainer
Headless scrollable transcript container. Auto-scroll on new messages, virtualized-ready.
Top-level wrapper for a chat transcript. DOM bindings render
data-ak-chat-container; host behavior and scroll policy are
framework-specific. No hardcoded styles β theme via
data attributes and CSS variables.
#React DOM props
| Prop | Type | Default |
|---|---|---|
children | ReactNode | β |
className | string | β |
The React component observes transcript mutations and scrolls to the bottom;
it currently has no autoScroll prop or near-bottom opt-out policy. Other
bindings do not promise identical scroll behavior.
#Per-framework
| Framework | Import |
|---|---|
| React | import { ChatContainer } from '@agentskit/react' |
| Vue | import { ChatContainer } from '@agentskit/vue' |
| Svelte | import { ChatContainer } from '@agentskit/svelte' |
| Solid | import { ChatContainer } from '@agentskit/solid' |
| React Native | import { ChatContainer } from '@agentskit/react-native' β ScrollView-backed |
| Angular | <ak-chat-container> β from AgentskitUiModule |
| Ink | import { ChatContainer } from '@agentskit/ink' β Ink <Box> |
#Example
import { ChatContainer, Message, InputBar, useChat } from '@agentskit/react'
export function App() {
const chat = useChat({ adapter: openai(...) })
return (
<ChatContainer>
{chat.messages.map((m) => <Message key={m.id} message={m} />)}
<InputBar chat={chat} />
</ChatContainer>
)
}#Related
Explore nearby
- PeerUI + hooks
Every AgentsKit UI binding shares the core state and action contract; host component APIs remain framework-specific.
- PeeruseChat
The shared chat state and action contract adapted by each framework binding.
- PeerMessage
Renders one message β user, assistant, tool, or system. Streaming-aware, role-aware.