gitmyhub

tambo

TypeScript ★ 11k updated 15h ago

Generative UI SDK for React

A toolkit for React developers that lets an AI agent decide which UI components to show based on what a user types in a chat, with streaming and error recovery built in.

TypeScriptReactNode.jsDockersetup: easycomplexity 3/5

Tambo is a toolkit for adding AI-driven user interfaces to React applications. Instead of building static screens with fixed layouts, you register your existing React components with Tambo, and an AI agent decides which components to show based on what the user types in a chat. If a user asks "show me sales by region," Tambo picks your Chart component and fills it with the right data. If the user says "add a task," it updates your TaskBoard component.

Under the hood, Tambo runs the conversation loop with a language model of your choice: OpenAI, Anthropic, Google Gemini, Mistral, or any compatible provider. You bring your own API key. Tambo then streams component data back to your app as the model generates it, handling the technical details of cancellation, reconnection, and error recovery.

The toolkit distinguishes between two kinds of components. Generative components appear once in response to a message, things like charts or summaries. Interactable components persist on screen and update as the user keeps refining their request, like a shopping cart or task board that a user can modify through follow-up messages.

Setup is a one-command process using an npm initializer. You can connect to a hosted backend called Tambo Cloud, which manages conversation state and agent execution for you, or run the same backend yourself via Docker on your own infrastructure. The project also supports connecting to external tools and services through the MCP protocol, so the AI can query databases, post to Slack, or call any other MCP-compatible server.

The library has its own documentation, a pre-built component library, starter templates, and a Discord community. It is open-source and reached over 11,000 GitHub stars shortly after launching version 1.0.

Where it fits