51 components for AI chat and agents, built as Web Components

The transcript, the tools, the approvals and the composer of an AI app, streaming any model or agent — in React, Vue, Svelte, Angular or vanilla JS, with zero third-party dependencies.

Between your framework and your model

React, Vue, Svelte, Angular or vanilla JS render the same aparté elements. From the browser, a request goes straight to a model running in the page, an OpenAI-compatible API or a Vercel AI SDK model, with your key or a local server. Through your server, it reaches an OpenAI-compatible API or an AI SDK model with the key kept there, or an agent that runs its own loop: AG-UI agents and TanStack AI. Your framework aparté Transport Models and agents React Vue Svelte Angular Vanilla JS (aparté) 51 components and the agent loop npm i @aparte/core In the browser your key, or a local model Your server keeps your key, runs agents Scripted replies In-browser models OpenAI-compatible Vercel AI SDK AG-UI agents TanStack AI Your framework React Vue Svelte Angular Vanilla JS (aparté) 51 components and the agent loop In the browser your key, or a local model Your server keeps your key, runs agents Models and agents Scripted replies In-browser models OpenAI-compatible Vercel AI SDK OpenAI-compatible Vercel AI SDK AG-UI agents TanStack AI
The Assistant template, live: every piece is an aparté component. Read its code ↗

Every piece of an AI chat

24 chat components, each on its own page with live variants: the transcript, everything a turn can hold, the person in the loop and the composer.

All 51 components

A person stays in the loop

An agent that acts asks first. The chat draws every step of that conversation, and the loop keeps it.

Open

Two lines in your framework

The same elements in React, Vue, Svelte, Angular or vanilla JS: install the core and place the chat.

ts
import '@aparte/core';
import '@aparte/core/styles.css';
html
<aparte-chat></aparte-chat>

The four wrappers are published, typed, and driven in a browser by the same suite as the plain build. The framework guides · Models and agents

Make it yours

The same chat three times. Tokens set the palette and the shapes, an icon set and an avatar provider change the glyphs, and since nothing hides in a shadow root, a plain selector reaches the rest.

Open
Open
Open

The rest of your app wears the same tokens: a kit of 22 recipes — buttons, fields, menus, dialogs, tabs. Theme it · The kit

Start from a template

Whole apps built only from aparté, running. Open one, then take its code.

  • Assistant

    A ChatGPT-style assistant: conversations in a sidebar, Markdown and code, reasoning, web search, versions of a reply, files and a model picker.

    View the code ↗
  • Agent workshop

    A coding agent beside its workspace: it reads, edits and tests a repository, asks before it writes, and shows the file, the terminal and the diff.

    View the code ↗
  • Support widget

    A help chat on a product’s website: a launcher, a compact panel, help-center articles as cards, a question with choices, and a handoff to a person.

    View the code ↗
  • Research assistant

    An agent that plans, searches, reads and writes: source cards in the chat, a cited report with a chart and a table in the pane beside it.

    View the code ↗

Checked, not claimed

A beta: the public surface is frozen, and a change to it ships with a notice. Every figure here is read from the repository when the site builds.

What a working chat weighs

JavaScript and CSS a page downloads to start a chat that streams a reply, gzipped.
Library At startup
Loquix 0.6.0 27 KB
aparté 0.19.2 105 KB
Deep Chat 2.5.1 120 KB
assistant-ui 0.15.29 444 KB
CopilotKit 1.79.1 768 KB
What each bar holds, and how it is measured

Each library set up from its own docs' quickstart.

Loquix 0.6.0: 26 KB + 1 KB CSS
Presentational components: the six its Quick Start imports and the token sheet, plus about 50 lines of ours to stream a reply, since it ships no model client; replies are plain text. The full import its README shows: 82 KB + 1 KB CSS.
aparté 0.19.2: 86 KB + 20 KB CSS
The chat with Markdown while it streams, its own client for any OpenAI-compatible API, and the agent loop with tools and approvals.
Deep Chat 2.5.1: 120 KB
One element with its own clients for 24 AI services (OpenAI, Claude, Gemini, Ollama…), Markdown and tool calls; its styles are inside its JavaScript. The CDN script its docs also list, served as it ships: 105 KB.
assistant-ui 0.15.29: 377 KB + 67 KB React
The AI SDK runtime and the Thread its docs copy into your app: Markdown, tool calls, attachments; the model is called from your server, and its CSS is your Tailwind build’s output. Its LocalRuntime with an adapter you write, in place of the AI SDK: 299 KB + 67 KB React.
CopilotKit 1.79.1: 682 KB + 18 KB CSS + 67 KB React
Its documented React chat: Markdown, math, code highlighting, tool calls and generative UI; its runtime runs on a server and is not counted.

Measured on 16 October 2026 with esbuild 0.27.7: minified, code splitting on, what loads at startup, gzip level 9; every library at its latest version published before 17 October 2026. Loquix and Deep Chat keep their component styles inside their JavaScript; assistant-ui's CSS comes out of your own Tailwind build and is not counted. CopilotKit's build also splits off 2.9 MB of optional chunks (a grammar per highlighted language, diagrams, a developer inspector), fetched only when a reply needs one. A server is never counted. The script that measures it ↗

The full comparison →
0 third-party dependencies
in @aparte/core. Markdown, highlighting and the rest are plugins you add.
3,494 tests
in 353 files, green on the last run.
3 browser engines
drive the examples end to end: Chromium, WebKit, Firefox.
axe on every example
an accessibility scan in the end-to-end suite, idle and mid-turn.

Start with one element

Install the core, drop a chat in a page, point it at a model.