TanStack AI
Type-safe, provider-agnostic TypeScript SDK for building streaming chat,
tool-calling agents, structured outputs, realtime voice, media generation, and
framework-native AI apps.
TanStack AI is built from composable activities and provider adapters. Use one
provider or switch between many. Import only chat, or add image, audio, video,
speech, transcription, summarization, realtime, Code Mode, devtools, and
framework bindings as your app needs them.
Start Here
What You Can Build
- Streaming chat experiences with typed messages, tool calls, reasoning parts,
and configurable connection adapters.
- Type-safe tools that can run on the server or client from one shared
toolDefinition() contract.
- Structured output flows backed by JSON Schema, Zod, ArkType, Valibot, or
plain JSON Schema.
- Multimodal prompts and responses that include text, images, audio, video, and
documents.
- Image, audio, video, speech, transcription, and summarization workflows using
a shared generation client pattern.
- Realtime voice chat with provider adapters for realtime sessions and token
minting.
- Code Mode agents that let an LLM write and execute TypeScript in an isolated
sandbox to orchestrate tools with loops, branches, and parallel calls.
- Devtools and observability pipelines for inspecting messages, tool calls,
stream chunks, errors, usage, and OpenTelemetry traces.
- Framework-native clients for React, Solid, Vue, Svelte, and Preact, plus a
headless client for custom runtimes.
Install
Install the core package and the provider/framework packages your app uses:
pnpm add @tanstack/ai @tanstack/ai-openai
For a React chat UI:
pnpm add @tanstack/ai @tanstack/ai-client @tanstack/ai-react @tanstack/ai-openai
OpenRouter is also a good starting point if you want access to many providers
through one API key:
pnpm add @tanstack/ai @tanstack/ai-openrouter
Streaming Chat
import { chat, toServerSentEventsResponse } from '@tanstack/ai'
import { openaiText } from '@tanstack/ai-openai'
export async function POST(request: Request) {
const body = await request.json()
const stream = chat({
adapter: openaiText('gpt-5.2'),
messages: body.messages,
})
return toServerSentEventsResponse(stream)
}
Learn more in the
Chat & Streaming docs and
Connection Adapters docs.
Type-Safe Tools
Define a tool once, then attach a server or client implementation with the same
input and output types:
import { toolDefinition } from '@tanstack/ai'
import { z } from 'zod'
const getProducts = toolDefinition({
name: 'getProducts',
description: 'Search the product catalog',
inputSchema: z.object({ query: z.string() }),
outputSchema: z.array(
z.object({
id: z.string(),
name: z.string(),
}),
),
}).server(async ({ query }) => {
return db.products.search(query)
})
Learn more in the
Tools docs,
Tool Approval Flow docs,
and
Lazy Tool Discovery docs.
Structured Outputs
Use outputSchema when you need typed objects instead of freeform text:
import { chat } from '@tanstack/ai'
import { openaiText } from '@tanstack/ai-openai'
import { z } from 'zod'
const Person = z.object({
name: z.string(),
age: z.number(),
})
const person = await chat({
adapter: openaiText('gpt-5.2'),
messages: [{ role: 'user', content: 'Ada Lovelace, 36' }],
outputSchema: Person,
})
Learn more in the
Structured Outputs docs.
Media, Realtime, and Code Mode
- Generations - one
pattern for image generation, text-to-speech, transcription, summarization,
audio generation, and video generation.
- Realtime Voice Chat -
build low-latency realtime voice experiences.
- Code Mode - let
models write and execute TypeScript inside a secure isolate.
- Code Mode with Skills -
give Code Mode reusable runtime capabilities.
Providers
Official adapters include:
@tanstack/ai-openrouter | 300+ models through one OpenRouter API, with per-request cost tracking |
@tanstack/ai-openai | OpenAI chat, image, video, speech, transcription, realtime, and provider tools |
@tanstack/ai-anthropic | Anthropic Claude chat, thinking, tools, and structured outputs |
@tanstack/ai-gemini | Google Gemini chat, image, speech, and audio generation |
@tanstack/ai-ollama | Local Ollama models |
@tanstack/ai-grok | xAI Grok chat, images, and realtime |
@tanstack/ai-groq | Groq low-latency inference |
@tanstack/ai-elevenlabs | ElevenLabs realtime voice, speech, transcription, music, and sound effects |
@tanstack/ai-fal | fal.ai image, video, audio, speech, and transcription models |
The adapter system is tree-shakeable by activity. Import openaiText for chat,
openaiImage for images, falVideo for video, geminiSpeech for TTS, and so
on.
Framework Packages
Advanced Docs
- Middleware - hook
into chat configuration, chunks, tool calls, usage, errors, and structured
outputs.
- OpenTelemetry - emit
vendor-neutral GenAI traces and metrics.
- Observability -
subscribe to typed TanStack AI events.
- Per-Model Type Safety -
narrow model options and content modalities to the selected model.
- Runtime Adapter Switching -
switch providers at runtime.
- Tree-Shaking -
ship only the activities and adapters you use.
- Agent Skills -
install TanStack AI skills into Claude Code, Cursor, GitHub Copilot, Codex,
and other coding agents with TanStack Intent.
Get Involved
Partners
We're looking for TanStack AI partners to join our mission. Partner with us
to push the boundaries of TanStack AI and build amazing things together.
LET'S CHAT
Explore the TanStack Ecosystem
...and more at TanStack.com.