tambo README

The project's README from github.com/tambo-ai/tambo. As one markdown file: README.md.

Tambo AI

Build agents that speak your UI

The open-source generative UI toolkit for React. Connect your components—Tambo handles streaming, state management, and MCP.

npm version License Last Commit Discord GitHub stars

tambo-ai/tambo | Trendshift

Start For Free • Docs • Discord


Tambo 1.0 is here! Read the announcement: Introducing Tambo: Generative UI for React


Table of Contents

What is Tambo?

Tambo is a React toolkit for building agents that render UI (also known as generative UI).

Register your components with Zod schemas. The agent picks the right one and streams the props so users can interact with them. "Show me sales by region" renders your <Chart>. "Add a task" updates your <TaskBoard>.

Get started in 5 minutes →

https://github.com/user-attachments/assets/8381d607-b878-4823-8b24-ecb8053bef23

What's Included

Tambo is a fullstack solution for adding generative UI to your app. You get a React SDK plus a backend that handles conversation state and agent execution.

1. Agent included — Tambo runs the LLM conversation loop for you. Bring your own API key (OpenAI, Anthropic, Gemini, Mistral, or any OpenAI-compatible provider). Works with agent frameworks like LangChain and Mastra, but they're not required.

2. Streaming infrastructure — Props stream to your components as the LLM generates them. Cancellation, error recovery, and reconnection are handled for you.

3. Tambo Cloud or self-host — Cloud is a hosted backend that manages conversation state and agent orchestration. Self-hosted runs the same backend on your infrastructure via Docker.

Most software is built around a one-size-fits-all mental model. We built Tambo to help developers build software that adapts to users.

Get Started

npm create tambo-app my-tambo-app  # auto-initializes git + tambo setup
cd my-tambo-app
npm run dev

Tambo Cloud is a hosted backend, free to get started with plenty of credits to start building. Self-hosted runs on your own infrastructure.

Check out the pre-built component library for agent and generative UI primitives:

https://github.com/user-attachments/assets/6cbc103b-9cc7-40f5-9746-12e04c976dff

Or fork a template:

Template Description
AI Chat with Generative UI Chat interface with dynamic component generation
AI Analytics Dashboard Analytics dashboard with AI-powered visualization

How It Works

Tell the AI which components it can use. Zod schemas define the props. These schemas become LLM tool definitions—the agent calls them like functions and Tambo renders the result.

Generative Components

Render once in response to a message. Charts, summaries, data visualizations.

https://github.com/user-attachments/assets/3bd340e7-e226-4151-ae40-aab9b3660d8b

const components: TamboComponent[] = [
  {
    name: "Graph",
    description: "Displays data as charts using Recharts library",
    component: Graph,
    propsSchema: z.object({
      data: z.array(z.object({ name: z.string(), value: z.number() })),
      type: z.enum(["line", "bar", "pie"]),
    }),
  },
];

Interactable Components

Persist and update as users refine requests. Shopping carts, spreadsheets, task boards.

https://github.com/user-attachments/assets/12d957cd-97f1-488e-911f-0ff900ef4062

const InteractableNote = withInteractable(Note, {
  componentName: "Note",
  description: "A note supporting title, content, and color modifications",
  propsSchema: z.object({
    title: z.string(),
    content: z.string(),
    color: z.enum(["white", "yellow", "blue", "green"]).optional(),
  }),
});

Docs: generative components, interactable components

The Provider

Wrap your app with TamboProvider. You must provide either userKey or userToken to identify the thread owner.

<TamboProvider
  apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
  userKey={currentUserId}
  components={components}
>
  <Chat />
  <InteractableNote id="note-1" title="My Note" content="Start writing..." />
</TamboProvider>

Use userKey for server-side or trusted environments. Use userToken (OAuth access token) for client-side apps where the token contains the user identity. See User Authentication for details.

Docs: provider options

Hooks

useTambo() is the primary hook — it gives you messages, streaming state, and thread management. useTamboThreadInput() handles user input and message submission.

const { messages, isStreaming } = useTambo();
const { value, setValue, submit, isPending } = useTamboThreadInput();

Docs: threads and messages, streaming status, full tutorial

Features

MCP Integrations

Connect to Linear, Slack, databases, or your own MCP servers. Tambo supports the full MCP protocol: tools, prompts, elicitations, and sampling.

import { MCPTransport } from "@tambo-ai/react/mcp";

const mcpServers = [
  {
    name: "filesystem",
    url: "http://localhost:8261/mcp",
    transport: MCPTransport.HTTP,
  },
];

<TamboProvider
  apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
  userKey={currentUserId}
  components={components}
  mcpServers={mcpServers}
>
  <App />
</TamboProvider>;

https://github.com/user-attachments/assets/c7a13915-8fed-4758-be1b-30a60fad0cda

Docs: MCP integration

Local Tools

Sometimes you need functions that run in the browser. DOM manipulation, authenticated fetches, accessing React state. Define them as tools and the AI can call them.

const tools: TamboTool[] = [
  {
    name: "getWeather",
    description: "Fetches weather for a location",
    tool: async (params: { location: string }) =>
      fetch(`/api/weather?q=${encodeURIComponent(params.location)}`).then((r) =>
        r.json(),
      ),
    inputSchema: z.object({
      location: z.string(),
    }),
    outputSchema: z.object({
      temperature: z.number(),
      condition: z.string(),
      location: z.string(),
    }),
  },
];

<TamboProvider
  apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
  userKey={currentUserId}
  tools={tools}
  components={components}
>
  <App />
</TamboProvider>;

Docs: local tools

Context, Auth, and Suggestions

Additional context lets you pass metadata to give the AI better responses. User state, app settings, current page. User authentication passes tokens from your auth provider. Suggestions generates prompts users can click based on what they're doing.

<TamboProvider
  apiKey={process.env.NEXT_PUBLIC_TAMBO_API_KEY!}
  userToken={userToken}
  contextHelpers={{
    selectedItems: () => ({
      key: "selectedItems",
      value: selectedItems.map((i) => i.name).join(", "),
    }),
    currentPage: () => ({ key: "page", value: window.location.pathname }),
  }}
/>
const { suggestions, accept } = useTamboSuggestions({ maxSuggestions: 3 });

suggestions.map((s) => (
  <button key={s.id} onClick={() => accept(s)}>
    {s.title}
  </button>
));

Docs: additional context, user authentication, suggestions

Supported LLM Providers

OpenAI, Anthropic, Cerebras, Google Gemini, Mistral, and any OpenAI-compatible provider. Full list. Missing one? Let us know.

How Tambo Compares

Feature Tambo Vercel AI SDK CopilotKit Assistant UI
Component selection AI decides which components to render Manual tool-to-component mapping Via agent frameworks (LangGraph) Chat-focused tool UI
MCP integration Built-in Experimental (v4.2+) Recently added Requires AI SDK v5
Persistent stateful components Yes No Shared state patterns No
Client-side tool execution Declarative, automatic Manual via onToolCall Agent-side only No
Self-hostable MIT (SDK + backend) Apache 2.0 (SDK only) MIT MIT
Hosted option Tambo Cloud No CopilotKit Cloud Assistant Cloud
Best for Full app UI control Streaming and tool abstractions Multi-agent workflows Chat interfaces

Community

Join the Discord to chat with other developers and the core team.

Interested in contributing? Read the Contributing Guide.

Join the conversation on Twitter and follow @tambo_ai.

License

MIT unless otherwise noted. Some workspaces (like apps/api) are Apache-2.0.


Tambo AI Animation

For AI/LLM agents: docs.tambo.co/llms.txt

tambo (tambo-ai/tambo)

Searching Database…

11.2K ·GitHub
这是什么?Tambo是一个面向React的开源工具包,让你能够构建可以渲染你自己UI组件(“生成式UI”)的智能体,而不只是返回文字回复。你用Zod schema注册组件,智能体会决定渲染哪一个,并把属性(props)以流式方式传入其中。
Tambo只是一个React库,还是也包含后端?它是一套全栈方案:包括一个React SDK,以及一个负责管理对话状态并替你运行LLM智能体循环的后端。后端可以是托管的Tambo Cloud,也可以通过Docker部署在你自己的基础设施上。
我该如何开始使用Tambo?用TamboProvider包裹你的应用,用描述组件属性的Zod schema注册你的React组件,然后选择使用托管的Tambo Cloud,或自行部署后端。还有现成的组件库和入门模板(带生成式UI的AI聊天、AI分析仪表盘)可以直接fork后修改。
我可以使用哪些LLM提供商?需要自己的API密钥吗?需要。你要自备 OpenAI、Anthropic、Google Gemini、Mistral、Cerebras 或任何兼容OpenAI的提供商的API密钥。Tambo会在你配置的提供商之上运行对话循环。
要让AI使用我的组件,我需要做哪些设置?你希望智能体渲染的每个组件都必须用Zod schema注册,该schema会成为LLM的工具定义。你还必须提供userKey(服务端)或userToken(OAuth,客户端)之一,用来标识每个对话线程的所有者。
我可以自行部署Tambo,而不使用Tambo Cloud吗?可以。Tambo Cloud是托管选项,但如果你希望把对话数据和编排流程保留在自己内部,同一个后端也可以通过Docker运行在你自己的基础设施上。
Generative组件和Interactable组件有什么区别?Generative组件会在响应一条消息时渲染一次,例如图表或摘要。Interactable组件则会持续存在,并随着用户不断细化请求而更新,例如购物车或任务看板。
Tambo与CopilotKit或Vercel AI SDK相比如何?Tambo的对比表显示,它内置MCP支持、可持久化的有状态组件,并能自动执行客户端工具;而Vercel AI SDK需要手动完成工具到组件的映射,CopilotKit则依赖LangGraph等智能体框架。
Tambo的MCP集成可以连接哪些服务?Tambo支持完整的MCP协议(工具、提示词、信息征询(elicitations)、采样(sampling)),因此你可以连接Linear、Slack、数据库或你自己的自定义MCP服务器等服务。
AI能调用在我浏览器中运行的函数吗?可以。Tambo支持本地工具(Local Tools):即你定义的、在客户端运行的函数,用于DOM操作、需要身份验证的网络请求(fetch)或读取React状态等场景,AI可以像调用其他工具一样调用它们。
Creator
tambo-ai
Size
289.9 MB
Stars
11.2K
Age
2y
Commits · 90 Days