---
title: Introduction
description: An unstyled React primitive library for building AI chat interfaces.
---

`@intentface/chat` is an unstyled React library for building chat interfaces. It
provides the behavior that chat UIs need and is hard to write — a rich-text
composer, scroll ownership, message segmentation, streaming disclosure — and
renders no styles of its own.

React and React DOM are the only peer dependencies. There is no editor framework
underneath, no animation library, and no opinion about transport: the package
never makes a request.

## Features

### Headless

The primitives are unstyled, bundle no CSS, and prescribe no styling solution.
They render semantic DOM with `data-*` state attributes, and every part accepts
`className`, `style`, and a `render` prop. See [Styling](/handbook/styling).

### Composable

Each primitive is a namespace of parts you assemble yourself — `Composer.Root`,
`Composer.Container`, `Message.Root`. Parts can be reordered, omitted, or wrapped,
and every one exposes its state through context hooks.

### Built for streaming

The composer's editor is isolated from the message stream, so tokens arriving
dozens of times a second don't re-render it. The thread follows new content while
you're at the bottom and releases when you scroll away. See
[Composer performance](/primitives/composer#performance).

### AI SDK compatible

The package defines its own structural message types, which a Vercel AI SDK
`UIMessage` already satisfies — so SDK messages pass straight into the components
with no adapter.

## Primitives

| Entry point | What it covers |
| --- | --- |
| `/composer` | Contenteditable editor, inline chips, prefix command lists, attachments, ask-user flow |
| `/thread` | Scroll container: at-bottom detection, auto-follow, dock measurement, prepend restoration |
| `/message` | Message parts, turn grouping, chip-segmented text |
| `/steps`, `/reasoning` | Tool-call timelines and reasoning disclosure |
| `/chip`, `/attachments`, `/ask-user` | The remaining building blocks |
| `/types`, `/message-utils`, `/chip-markdown` | The message contract, part utilities, and the chip wire format |

## Next steps

- [Quick start](/quick-start) — install the package and assemble a chat
- [Build a chat](/build-a-chat) — the same result in four stages
- [Accessibility](/handbook/accessibility) — what the primitives wire up, and what you supply
