Tambo

Build AI-powered conversational interfaces with ease

Tambo is a framework for building conversational AI experiences in React. It provides headless, composable UI primitives that integrate with any design system—including classless frameworks like Pico CSS.

This page itself is a demo: the entire layout uses semantic HTML styled automatically by Pico CSS. Try the chat bubble in the bottom-right corner to interact with the AI assistant.

Features

Headless Components

Fully unstyled, composable primitives for messages, threads, inputs, and more. Bring your own design system.

Thread Management

Built-in support for multiple conversation threads with history, switching, and persistence.

Tool Calls & Reasoning

Display AI reasoning steps and tool call results with dedicated info components.

Getting Started

npm install @tambo-ai/react @tambo-ai/react-ui-base

Wrap your app in a <TamboProvider> and start building with the headless components:

import { ThreadContent, MessageInput, Message } from "@tambo-ai/react-ui-base";
import { useTambo } from "@tambo-ai/react";

function Chat() {
  return (
    <>
      <ThreadContent.Root>
        <ThreadContent.Messages />
      </ThreadContent.Root>
      <MessageInput.Root>
        <MessageInput.Textarea />
        <MessageInput.SubmitButton />
      </MessageInput.Root>
    </>
  );
}

Frequently Asked Questions

What CSS frameworks does Tambo work with?

Tambo is headless—it works with any CSS framework or custom styles. This demo uses Pico CSS, but you can use Tailwind, Bootstrap, plain CSS, or anything else.

Can I customize the message rendering?

Yes! Every component accepts a render prop that gives you full control over the output. You can wrap, replace, or augment the default rendering.

How does thread management work?

Tambo provides useTambo and useTamboThreadList hooks for managing threads. The ThreadHistory component renders a thread picker with switch and create capabilities.

Is streaming supported?

Yes. Messages stream in real-time, and the Message.LoadingIndicator component shows progress while the assistant is responding.

Can I display tool calls and reasoning?

Absolutely. The ReasoningInfo and ToolcallInfo components let you render AI reasoning steps and tool invocations with full detail.