{"id":35867875,"url":"https://github.com/tanstack/ai","last_synced_at":"2026-05-30T00:01:41.309Z","repository":{"id":328082480,"uuid":"1072429861","full_name":"TanStack/ai","owner":"TanStack","description":"🤖 SDK that enhances your applications with AI capabilities","archived":false,"fork":false,"pushed_at":"2026-05-19T18:16:50.000Z","size":18696,"stargazers_count":2674,"open_issues_count":103,"forks_count":209,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-05-19T19:18:12.385Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TanStack.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"tannerlinsley"}},"created_at":"2025-10-08T17:52:48.000Z","updated_at":"2026-05-19T19:02:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TanStack/ai","commit_stats":null,"previous_names":["tanstack/ai"],"tags_count":756,"template":false,"template_full_name":null,"purl":"pkg:github/TanStack/ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TanStack%2Fai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TanStack%2Fai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TanStack%2Fai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TanStack%2Fai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TanStack","download_url":"https://codeload.github.com/TanStack/ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TanStack%2Fai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33394672,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-08T14:14:14.347Z","updated_at":"2026-05-30T00:01:41.302Z","avatar_url":"https://github.com/TanStack.png","language":"TypeScript","funding_links":["https://github.com/sponsors/tannerlinsley","https://github.com/sponsors/tannerlinsley/"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/TanStack/ai/main/media/header_ai.png\" alt=\"TanStack AI\" /\u003e\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://npmjs.com/package/@tanstack/ai\" target=\"_parent\"\u003e\n    \u003cimg alt=\"NPM downloads\" src=\"https://img.shields.io/npm/dm/@tanstack/ai.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/TanStack/ai\" target=\"_parent\"\u003e\n    \u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/TanStack/ai.svg?style=social\u0026label=Star\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/TanStack/ai/releases\" target=\"_parent\"\u003e\n    \u003cimg alt=\"Release\" src=\"https://img.shields.io/github/v/release/tanstack/ai\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://bundlephobia.com/result?p=@tanstack/ai@latest\" target=\"_parent\"\u003e\n    \u003cimg alt=\"Bundle size\" src=\"https://badgen.net/bundlephobia/minzip/@tanstack/ai@latest\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://twitter.com/tan_stack\"\u003e\n    \u003cimg alt=\"Follow @TanStack\" src=\"https://img.shields.io/twitter/follow/tan_stack.svg?style=social\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n# TanStack AI\n\nType-safe, provider-agnostic TypeScript SDK for building streaming chat,\ntool-calling agents, structured outputs, realtime voice, media generation, and\nframework-native AI apps.\n\nTanStack AI is built from composable activities and provider adapters. Use one\nprovider or switch between many. Import only chat, or add image, audio, video,\nspeech, transcription, summarization, realtime, Code Mode, devtools, and\nframework bindings as your app needs them.\n\n## \u003ca href=\"https://tanstack.com/ai\"\u003eRead the docs -\u003e\u003c/a\u003e\n\n## Start Here\n\n- [Overview](https://tanstack.com/ai/latest/docs/getting-started/overview) -\n  what TanStack AI is and how the packages fit together.\n- [Quick Start: React](https://tanstack.com/ai/latest/docs/getting-started/quick-start) -\n  add streaming chat to a React app.\n- [Quick Start: Vue](https://tanstack.com/ai/latest/docs/getting-started/quick-start-vue) -\n  build with Vue composables.\n- [Quick Start: Svelte](https://tanstack.com/ai/latest/docs/getting-started/quick-start-svelte) -\n  build with Svelte 5 runes.\n- [Quick Start: Server Only](https://tanstack.com/ai/latest/docs/getting-started/quick-start-server) -\n  use TanStack AI from a server endpoint, script, or backend service.\n- [TanStack AI vs Vercel AI SDK](https://tanstack.com/ai/latest/docs/comparison/vercel-ai-sdk) -\n  compare architecture, feature coverage, and tradeoffs.\n\n## What You Can Build\n\n- Streaming chat experiences with typed messages, tool calls, reasoning parts,\n  and configurable connection adapters.\n- Type-safe tools that can run on the server or client from one shared\n  `toolDefinition()` contract.\n- Structured output flows backed by JSON Schema, Zod, ArkType, Valibot, or\n  plain JSON Schema.\n- Multimodal prompts and responses that include text, images, audio, video, and\n  documents.\n- Image, audio, video, speech, transcription, and summarization workflows using\n  a shared generation client pattern.\n- Realtime voice chat with provider adapters for realtime sessions and token\n  minting.\n- Code Mode agents that let an LLM write and execute TypeScript in an isolated\n  sandbox to orchestrate tools with loops, branches, and parallel calls.\n- Devtools and observability pipelines for inspecting messages, tool calls,\n  stream chunks, errors, usage, and OpenTelemetry traces.\n- Framework-native clients for React, Solid, Vue, Svelte, and Preact, plus a\n  headless client for custom runtimes.\n\n## Install\n\nInstall the core package and the provider/framework packages your app uses:\n\n```bash\npnpm add @tanstack/ai @tanstack/ai-openai\n```\n\nFor a React chat UI:\n\n```bash\npnpm add @tanstack/ai @tanstack/ai-client @tanstack/ai-react @tanstack/ai-openai\n```\n\nOpenRouter is also a good starting point if you want access to many providers\nthrough one API key:\n\n```bash\npnpm add @tanstack/ai @tanstack/ai-openrouter\n```\n\n## Streaming Chat\n\n```typescript\nimport { chat, toServerSentEventsResponse } from '@tanstack/ai'\nimport { openaiText } from '@tanstack/ai-openai'\n\nexport async function POST(request: Request) {\n  const body = await request.json()\n\n  const stream = chat({\n    adapter: openaiText('gpt-5.2'),\n    messages: body.messages,\n  })\n\n  return toServerSentEventsResponse(stream)\n}\n```\n\nLearn more in the\n[Chat \u0026 Streaming docs](https://tanstack.com/ai/latest/docs/chat/streaming) and\n[Connection Adapters docs](https://tanstack.com/ai/latest/docs/chat/connection-adapters).\n\n## Type-Safe Tools\n\nDefine a tool once, then attach a server or client implementation with the same\ninput and output types:\n\n```typescript\nimport { toolDefinition } from '@tanstack/ai'\nimport { z } from 'zod'\n\nconst getProducts = toolDefinition({\n  name: 'getProducts',\n  description: 'Search the product catalog',\n  inputSchema: z.object({ query: z.string() }),\n  outputSchema: z.array(\n    z.object({\n      id: z.string(),\n      name: z.string(),\n    }),\n  ),\n}).server(async ({ query }) =\u003e {\n  return db.products.search(query)\n})\n```\n\nLearn more in the\n[Tools docs](https://tanstack.com/ai/latest/docs/tools/tools),\n[Tool Approval Flow docs](https://tanstack.com/ai/latest/docs/tools/tool-approval),\nand\n[Lazy Tool Discovery docs](https://tanstack.com/ai/latest/docs/tools/lazy-tool-discovery).\n\n## Structured Outputs\n\nUse `outputSchema` when you need typed objects instead of freeform text:\n\n```typescript\nimport { chat } from '@tanstack/ai'\nimport { openaiText } from '@tanstack/ai-openai'\nimport { z } from 'zod'\n\nconst Person = z.object({\n  name: z.string(),\n  age: z.number(),\n})\n\nconst person = await chat({\n  adapter: openaiText('gpt-5.2'),\n  messages: [{ role: 'user', content: 'Ada Lovelace, 36' }],\n  outputSchema: Person,\n})\n```\n\nLearn more in the\n[Structured Outputs docs](https://tanstack.com/ai/latest/docs/structured-outputs/overview).\n\n## Media, Realtime, and Code Mode\n\n- [Generations](https://tanstack.com/ai/latest/docs/media/generations) - one\n  pattern for image generation, text-to-speech, transcription, summarization,\n  audio generation, and video generation.\n- [Realtime Voice Chat](https://tanstack.com/ai/latest/docs/media/realtime-chat) -\n  build low-latency realtime voice experiences.\n- [Code Mode](https://tanstack.com/ai/latest/docs/code-mode/code-mode) - let\n  models write and execute TypeScript inside a secure isolate.\n- [Code Mode with Skills](https://tanstack.com/ai/latest/docs/code-mode/code-mode-with-skills) -\n  give Code Mode reusable runtime capabilities.\n\n## Providers\n\nOfficial adapters include:\n\n| Package                                                                              | Use it for                                                                     |\n| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |\n| [`@tanstack/ai-openrouter`](https://tanstack.com/ai/latest/docs/adapters/openrouter) | 300+ models through one OpenRouter API, with per-request cost tracking         |\n| [`@tanstack/ai-openai`](https://tanstack.com/ai/latest/docs/adapters/openai)         | OpenAI chat, image, video, speech, transcription, realtime, and provider tools |\n| [`@tanstack/ai-anthropic`](https://tanstack.com/ai/latest/docs/adapters/anthropic)   | Anthropic Claude chat, thinking, tools, and structured outputs                 |\n| [`@tanstack/ai-gemini`](https://tanstack.com/ai/latest/docs/adapters/gemini)         | Google Gemini chat, image, speech, and audio generation                        |\n| [`@tanstack/ai-ollama`](https://tanstack.com/ai/latest/docs/adapters/ollama)         | Local Ollama models                                                            |\n| [`@tanstack/ai-grok`](https://tanstack.com/ai/latest/docs/adapters/grok)             | xAI Grok chat, images, and realtime                                            |\n| [`@tanstack/ai-groq`](https://tanstack.com/ai/latest/docs/adapters/groq)             | Groq low-latency inference                                                     |\n| [`@tanstack/ai-elevenlabs`](https://tanstack.com/ai/latest/docs/adapters/elevenlabs) | ElevenLabs realtime voice, speech, transcription, music, and sound effects     |\n| [`@tanstack/ai-fal`](https://tanstack.com/ai/latest/docs/adapters/fal)               | fal.ai image, video, audio, speech, and transcription models                   |\n\nThe adapter system is tree-shakeable by activity. Import `openaiText` for chat,\n`openaiImage` for images, `falVideo` for video, `geminiSpeech` for TTS, and so\non.\n\n## Framework Packages\n\n| Package                                                                    | What it provides                                                         |\n| -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |\n| [`@tanstack/ai-client`](https://tanstack.com/ai/latest/docs/api/ai-client) | Headless chat, realtime, and generation clients                          |\n| [`@tanstack/ai-react`](https://tanstack.com/ai/latest/docs/api/ai-react)   | React hooks including `useChat`, `useRealtimeChat`, and generation hooks |\n| [`@tanstack/ai-solid`](https://tanstack.com/ai/latest/docs/api/ai-solid)   | Solid hooks for chat and generations                                     |\n| [`@tanstack/ai-vue`](https://tanstack.com/ai/latest/docs/api/ai-vue)       | Vue composables for chat and generations                                 |\n| [`@tanstack/ai-svelte`](https://tanstack.com/ai/latest/docs/api/ai-svelte) | Svelte 5 factories for chat and generations                              |\n| [`@tanstack/ai-preact`](https://tanstack.com/ai/latest/docs/api/ai-preact) | Preact hooks for chat                                                    |\n| `@tanstack/ai-react-ui`, `@tanstack/ai-solid-ui`, `@tanstack/ai-vue-ui`    | Headless UI components for chat interfaces                               |\n\n## Advanced Docs\n\n- [Middleware](https://tanstack.com/ai/latest/docs/advanced/middleware) - hook\n  into chat configuration, chunks, tool calls, usage, errors, and structured\n  outputs.\n- [OpenTelemetry](https://tanstack.com/ai/latest/docs/advanced/otel) - emit\n  vendor-neutral GenAI traces and metrics.\n- [Observability](https://tanstack.com/ai/latest/docs/advanced/observability) -\n  subscribe to typed TanStack AI events.\n- [Per-Model Type Safety](https://tanstack.com/ai/latest/docs/advanced/per-model-type-safety) -\n  narrow model options and content modalities to the selected model.\n- [Runtime Adapter Switching](https://tanstack.com/ai/latest/docs/advanced/runtime-adapter-switching) -\n  switch providers at runtime.\n- [Tree-Shaking](https://tanstack.com/ai/latest/docs/advanced/tree-shaking) -\n  ship only the activities and adapters you use.\n- [Agent Skills](https://tanstack.com/ai/latest/docs/getting-started/agent-skills) -\n  install TanStack AI skills into Claude Code, Cursor, GitHub Copilot, Codex,\n  and other coding agents with TanStack Intent.\n\n## Get Involved\n\n- Read the [docs](https://tanstack.com/ai).\n- Participate in [GitHub discussions](https://github.com/TanStack/ai/discussions).\n- Chat with the community on [Discord](https://discord.com/invite/WrRKjPJ).\n- See [CONTRIBUTING.md](https://github.com/TanStack/ai/blob/main/CONTRIBUTING.md)\n  for setup instructions.\n- [Become a sponsor](https://github.com/sponsors/tannerlinsley/).\n\n## Partners\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003ca href=\"https://www.coderabbit.ai/?via=tanstack\u0026dub_id=aCcEEdAOqqutX6OS\"\u003e\n        \u003cpicture\u003e\n          \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://tanstack.com/assets/coderabbit-dark-D643Zkrv.svg\" /\u003e\n          \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://tanstack.com/assets/coderabbit-light-CIzGLYU_.svg\" /\u003e\n          \u003cimg src=\"https://tanstack.com/assets/coderabbit-light-CIzGLYU_.svg\" height=\"40\" alt=\"CodeRabbit\" /\u003e\n        \u003c/picture\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ca href=\"https://www.cloudflare.com?utm_source=tanstack\"\u003e\n        \u003cpicture\u003e\n          \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://tanstack.com/assets/cloudflare-white-Co-Tyjbl.svg\" /\u003e\n          \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://tanstack.com/assets/cloudflare-black-6Ojsn8yh.svg\" /\u003e\n          \u003cimg src=\"https://tanstack.com/assets/cloudflare-white-Co-Tyjbl.svg\" height=\"60\" alt=\"Cloudflare\" /\u003e\n        \u003c/picture\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/TanStack/ai/main/media/partner_logo.svg\" alt=\"AI and you?\" height=\"65\" /\u003e\n  \u003cp\u003e\n    We're looking for TanStack AI partners to join our mission. Partner with us\n    to push the boundaries of TanStack AI and build amazing things together.\n  \u003c/p\u003e\n  \u003ca href=\"mailto:partners@tanstack.com?subject=TanStack AI Partnership\"\u003e\u003cb\u003eLET'S CHAT\u003c/b\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n## Explore the TanStack Ecosystem\n\n- \u003ca href=\"https://github.com/tanstack/config\"\u003e\u003cb\u003eTanStack Config\u003c/b\u003e\u003c/a\u003e -\n  tooling for JS/TS packages\n- \u003ca href=\"https://github.com/tanstack/db\"\u003e\u003cb\u003eTanStack DB\u003c/b\u003e\u003c/a\u003e - reactive\n  sync client store\n- \u003ca href=\"https://github.com/tanstack/devtools\"\u003e\u003cb\u003eTanStack Devtools\u003c/b\u003e\u003c/a\u003e -\n  unified devtools panel\n- \u003ca href=\"https://github.com/tanstack/form\"\u003e\u003cb\u003eTanStack Form\u003c/b\u003e\u003c/a\u003e -\n  type-safe form state\n- \u003ca href=\"https://github.com/tanstack/pacer\"\u003e\u003cb\u003eTanStack Pacer\u003c/b\u003e\u003c/a\u003e -\n  debouncing, throttling, batching\n- \u003ca href=\"https://github.com/tanstack/query\"\u003e\u003cb\u003eTanStack Query\u003c/b\u003e\u003c/a\u003e -\n  async state and caching\n- \u003ca href=\"https://github.com/tanstack/ranger\"\u003e\u003cb\u003eTanStack Ranger\u003c/b\u003e\u003c/a\u003e -\n  range and slider primitives\n- \u003ca href=\"https://github.com/tanstack/router\"\u003e\u003cb\u003eTanStack Router\u003c/b\u003e\u003c/a\u003e -\n  type-safe routing, caching, and URL state\n- \u003ca href=\"https://github.com/tanstack/start\"\u003e\u003cb\u003eTanStack Start\u003c/b\u003e\u003c/a\u003e -\n  full-stack SSR and streaming\n- \u003ca href=\"https://github.com/tanstack/store\"\u003e\u003cb\u003eTanStack Store\u003c/b\u003e\u003c/a\u003e -\n  reactive data store\n- \u003ca href=\"https://github.com/tanstack/table\"\u003e\u003cb\u003eTanStack Table\u003c/b\u003e\u003c/a\u003e -\n  headless datagrids\n- \u003ca href=\"https://github.com/tanstack/virtual\"\u003e\u003cb\u003eTanStack Virtual\u003c/b\u003e\u003c/a\u003e -\n  virtualized rendering\n\n...and more at \u003ca href=\"https://tanstack.com\"\u003e\u003cb\u003eTanStack.com\u003c/b\u003e\u003c/a\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftanstack%2Fai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftanstack%2Fai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftanstack%2Fai/lists"}