v1.1.0/32 COMPONENTS/8 THEMES/0 RUNTIME DEPS/MIT

// the ui layer for ai interfaces

Build an AI interface that looks like yours, not theirs.

The open-source React components for AI products — chat, streaming, reasoning, tool calls, agents. Copy them in, theme them to your brand, own every line. Zero runtime dependencies.

$ npm i @skeehn/react
chat.tsxstreaming
Refactor parseTree to O(n) and explain the tradeoff.
Replace the inner find() with a pre-built Map so each node is visited once:
ts2 lines
const index = new Map(nodes.map(n => [n.id, n]));
for (const n of nodes) link(n, index.get(n.parent));
search_codebasesuccess
3 matches in src/parse/*.ts — applied to parseTree.ts:42
FIG. 01 — STREAMING CHAT · REASONING · TOOL CALL
A drop-in for the AI SDKRender @ai-sdk/react messages with <Conversation>— text, reasoning, tools & sources, mapped for you.See the drop-in →
§01What you get

Everything an AI product needs

Stop rebuilding the same chat surface for every project. skeehn ships the full AI-interface layer — polished, accessible, and tested.

01

Chat & messages

Bubbles for user, assistant, tool and system roles — grouped, timestamped, with hover actions.

02

Streaming

Token-paced streaming text with a real caret and sticky auto-scroll — not cheap per-token flicker.

03

Reasoning & thinking

Collapsible thinking blocks and step-by-step reasoning traces with status and timing.

04

Tool calls

Tool cards with pending / running / success / error states, parameters and result output.

05

Citations & code

Source citation cards and copy-ready code blocks with line numbers and syntax tokens.

06

Agents & voice

Agent status, typing indicators, voice sessions with a live waveform, and prompt suggestions.

§02Make it yours

One component, eight aesthetics

A clean, neutral default ships in the box — then seven more skins take you anywhere, from green-phosphor Terminal to Brutalist, all from one token contract. The same exchange, three ways:

Editorial
How does dithering work?
It thresholds pixels against a Bayer matrix to fake more shades.
FIG. 02aEDITORIAL
Brutalist
How does dithering work?
It thresholds pixels against a Bayer matrix to fake more shades.
FIG. 02bBRUTALIST
Terminal
How does dithering work?
It thresholds pixels against a Bayer matrix to fake more shades.
FIG. 02cTERMINAL
§03The catalog

Thirty-two components, one install

14 core · 15 AI · 3 layout, viz & motion bundles. Each ships as plain CSS with an optional React wrapper — add one or add them all.

§04Why skeehn

A library, not a lock-in

Most AI kits hand you a black box that looks like everyone else’s. skeehn hands you the source.

A

You own the code

Copy components into your repo with the CLI or shadcn registry — or just npm i. No black box, no lock-in, edit anything.

B

Theme it to your brand

One token contract, eight built-in skins, or your own. Flip one data-attribute and the whole UI reskins — no rewrites.

C

Built for AI, not bolted on

15 components shaped for real AI UX — streaming, reasoning, tools, agents — on top of 14 core primitives.

D

Zero runtime dependencies

Plain CSS with an optional React wrapper. Works with any framework, with server components, even without JS.

Ship today

Ship your AI interface this afternoon.

Wire the useChat hook to your endpoint, drop in ChatBubble, and you have a streaming chat UI. Then theme it.

0 dependenciesMITReact 18+
tsx9 lines
1
2
3
4
5
6
7
8
9
import { ChatBubble } from '@skeehn/react';
import { useChat } from '@skeehn/react/hooks';

export function Chat() {
  const { messages } = useChat();
  return messages.map((m) => (
    <ChatBubble key={m.id} role={m.role}>{m.content}</ChatBubble>
  ));
}
FIG. 03 — A STREAMING CHAT IN SEVEN LINES