-
-
Notifications
You must be signed in to change notification settings - Fork 397
blog: announce TanStack AI release candidate #1174
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
d886b50
b838bd8
071df0e
89bd5d1
6bf0852
67bb492
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,198 @@ | ||
| --- | ||
| title: 'TanStack AI Enters the RC Phase' | ||
| published: 2026-08-21 | ||
| excerpt: TanStack AI enters the release candidate phase. The architecture is locked in, with 24 providers, AG-UI, media generation, MCP, sandboxes, and persistence. | ||
| library: ai | ||
| authors: | ||
| - Alem Tuzlak | ||
| - Jack Herrington | ||
| - Tom Beckenham | ||
| --- | ||
|
|
||
|  | ||
|
|
||
| The journey of TanStack AI started with a humble `chat()` method, four providers, a custom protocol with ambitious goals, and two people who wanted to make working with AI great. | ||
|
|
||
| We've come a long way since then. We made our adapters small and tree-shakable. We grew from four providers to 24, and that number continues to increase. We adopted [AG-UI](https://tanstack.com/ai/latest/docs/migration/ag-ui-compliance) as our official protocol, which is supported by more than 20 agent frameworks across many programming languages. That means you can bring TanStack AI into virtually any stack, on either the client or the server. | ||
|
|
||
| We've also expanded into areas such as media generation, MCP, sandboxing, agent harnesses, and much more. | ||
|
|
||
| A tremendous amount of work has gone into building something we're truly proud of: not just an easy way to chat with an LLM provider, but an entire ecosystem built for AI. | ||
|
|
||
| Today, TanStack AI officially enters the release candidate phase. | ||
|
|
||
| ## The Journey So Far | ||
|
|
||
| _Cue "Carry On Wayward Son" by Kansas._ | ||
|
|
||
| We've been very busy. | ||
|
|
||
| Our initial goal was to create an architecture that could be easily extended not only by us, but also by third parties. Over the past year, we've achieved that. | ||
|
|
||
| One of the biggest payoffs since we started has been making the right architectural decisions early and building everything on top of those foundations. One of the strongest parts of that architecture is our [middleware system](https://tanstack.com/ai/latest/docs/advanced/middleware). | ||
|
|
||
| You can build just about anything with middleware. Chat persistence, agent harnesses running inside sandboxes, memory, telemetry, durability, and many other features are simply middleware functions that you pass into your `chat()` method. | ||
|
|
||
| Another powerful feature we offer is [lazy tool calling](https://tanstack.com/ai/latest/docs/tools/lazy-tool-discovery), which can help reduce token costs with a simple Boolean flag. We also support advanced [interrupt scenarios](https://tanstack.com/ai/latest/docs/interrupts/overview) driven by your schemas. You can modify tool-call arguments, trigger multiple interrupts, and mix and match these capabilities while keeping everything completely type-safe from end to end. | ||
|
|
||
| ### Transport Without Lock-In | ||
|
|
||
| Another area we wanted to get right was transport. | ||
|
|
||
| We don't want to lock you into a particular way of building applications. From the beginning, our goal has been not to dictate how you work, but to adapt to your needs and provide the primitives you need to succeed. | ||
|
|
||
| That philosophy is reflected across our entire API surface, and transport is no exception. | ||
|
|
||
| We currently provide first-party primitives for [streaming](https://tanstack.com/ai/latest/docs/chat/streaming) through classic SSE, WebSockets, and HTTP streams, as well as support for Cap'n Web. You can also build custom adapters to stream over something even more specialized. | ||
|
|
||
| On the client, these streams are consumed through custom [connection adapters](https://tanstack.com/ai/latest/docs/chat/connection-adapters), giving you complete control over your transport layer from end to end. | ||
|
|
||
| ### Consistency and a Minimal API Surface | ||
|
|
||
| We also care deeply about consistency and keeping the API surface as small as possible. | ||
|
|
||
| Choosing your transport, backend, and frontend is one thing. But what happens when you need to add image generation, video generation, audio generation, transcription, or real-time audio? | ||
|
|
||
| The APIs are intentionally nearly identical. You learn the pattern once (or your agent does), and then simply swap the adapters. | ||
|
|
||
| Every media hook follows almost the exact same structure. The properties passed between the client and server remain consistent. Every API feels familiar, regardless of the modality you're working with. | ||
|
|
||
| We don't force you to learn 20 completely different APIs. | ||
|
|
||
| Learn the system once, and you'll be ready for whatever comes next. | ||
|
|
||
| ### Type Safety at the Core | ||
|
|
||
| Then there's type safety, something we're known for. | ||
|
|
||
| Our type system sits at the core of the product, with enough compile-time errors to make your head spin, but in a good way. | ||
|
|
||
| Passed an unsupported model option? Error. | ||
|
|
||
| Forgot to provide a required property after enabling persistence? Error. | ||
|
|
||
| Passed a provider-specific tool to a model that doesn't support it? Error. | ||
|
|
||
| We help you catch problems early so you can ship to production with confidence, regardless of the complexity of your application. | ||
|
|
||
| ## Biggest Feature Highlights | ||
|
|
||
| ### The `chat()` Method | ||
|
|
||
| The core of TanStack AI is its `chat()` method. | ||
|
|
||
| It's a powerhouse that supports both direct conversations with LLM providers and sandboxed agent harnesses. It is packed with composable features that allow it to become as powerful as your application needs it to be. | ||
|
|
||
| Those features include persistence and durability, which allow users to refresh the browser, switch between conversations, and continue receiving updates in real time from exactly where they left off. | ||
|
|
||
| You can also sandbox your agents. For example, you can run Codex inside a remote or local sandbox, give it a task, and have it report the results back to your application. | ||
|
|
||
| The `chat()` method also supports [telemetry](https://tanstack.com/ai/latest/docs/advanced/otel), [structured outputs](https://tanstack.com/ai/latest/docs/structured-outputs/overview), model-specific type safety, an ever-growing provider list, and [multi-turn structured outputs](https://tanstack.com/ai/latest/docs/structured-outputs/multi-turn) that let users continue talking to an LLM while receiving structured results between turns. | ||
|
|
||
| Then there's [code mode](https://tanstack.com/ai/latest/docs/code-mode/code-mode): a powerful feature that allows agents to write code and execute it inside isolates. This can improve tool-calling performance, optimize costs, and reduce response times. | ||
|
|
||
| Add MCP support, generic interrupts, and everything else in the system, and `chat()` becomes the foundation for applications ranging from simple assistants to sophisticated agent platforms. | ||
|
|
||
| ### Media and Generation | ||
|
|
||
| We treat generation APIs as first-class features. They aren't afterthoughts bolted onto the framework for the five people who might use them. | ||
|
|
||
| We support [real-time audio](https://tanstack.com/ai/latest/docs/media/realtime-chat), [text-to-speech](https://tanstack.com/ai/latest/docs/media/text-to-speech), [image generation](https://tanstack.com/ai/latest/docs/media/image-generation), [video generation](https://tanstack.com/ai/latest/docs/media/video-generation), [audio generation](https://tanstack.com/ai/latest/docs/media/audio-generation), [transcription](https://tanstack.com/ai/latest/docs/media/transcription), and music generation. These APIs are considered stable and ready to use across more than 100 models. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- target lines ---'
sed -n '88,106p' src/blog/tanstack-ai-rc.md
printf '%s\n' '--- referenced media documentation ---'
curl -L --max-time 20 -sS https://tanstack.com/ai/latest/docs/media/video-generation | \
tr '\n' ' ' | sed 's/<[^>]*>/ /g' | sed 's/[[:space:]]\+/ /g' | \
grep -o -i -E '.{0,180}(experimental|stable|video generation|text-to-speech).{0,240}' | head -20 || trueRepository: TanStack/tanstack.com Length of output: 2440 🌐 Web query:
💡 Result: TanStack AI provides experimental support for both video generation and text-to-speech (TTS) via its adapter-based architecture [1][2][3]. Both features are explicitly marked as experimental in the documentation, indicating they are subject to change [1][2][4][5]. Video Generation TanStack AI supports video generation through a dedicated, asynchronous jobs/polling pattern [1][6][4]. Key details include: - Functionality: The SDK uses the generateVideo function and the useGenerateVideo React hook [6][4]. - Providers: Support includes Google Gemini (Veo 3.1 models via long-running operations API and Gemini Omni Flash), OpenAI (Sora models), xAI (Grok), BytePlus (Seedance), and fal.ai (various hosted models) [1]. - Nature of Feature: Because it is asynchronous, the system manages a job lifecycle (create job, poll for status, stream updates) [1][4]. Text-to-Speech (TTS) TanStack AI offers TTS support through dedicated adapters that follow the same tree-shakeable architecture as other SDK features [2]. - Gemini TTS: The Gemini adapter provides experimental text-to-speech support (e.g., using gemini-2.5-flash-preview-tts) [2][5]. The documentation notes that this may require the Google Gemini Live API for full functionality [2][5]. - Other Providers: Support is also available for OpenAI (TTS-1, TTS-1-HD, GPT-4o) and fal.ai (e.g., Kokoro, ElevenLabs, F5-TTS) [2]. Stability While "stability" was mentioned in your query, TanStack AI's documentation does not list Stability AI as a primary integrated provider for its video or TTS generation features in the current experimental documentation [1][2][7]. The SDK emphasizes an extensible, adapter-based design where providers are treated as adapters rather than core architecture, allowing for future integration or custom implementation [3][8][9]. Documentation for these features is located in the media section of the TanStack AI documentation site [1][2]. Because these features are experimental, developers should check the latest documentation for breaking changes [1][4][5]. Citations:
Qualify the stability claim for experimental media APIs. Video generation and Gemini text-to-speech are experimental. Replace “These APIs are considered stable” with capability-specific status, or remove the claim. 🤖 Prompt for AI Agents |
||
|
|
||
| Depending on your use case, we support either streaming work directly to the client or performing one-off generations. Switching between these approaches is seamless. | ||
|
|
||
| We also support passing images as references for new generations, provide access to a wide variety of models, and closely follow new developments across the field. | ||
|
|
||
| ### Embeddings, Reranking, and Memory | ||
|
|
||
| For the RAG fans out there, we support [embeddings](https://tanstack.com/ai/latest/docs/embeddings) and [reranking](https://tanstack.com/ai/latest/docs/rerank/rerank) through providers such as Cohere and OpenRouter. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: sed -n '100,114p' src/blog/tanstack-ai-rc.mdRepository: TanStack/tanstack.com Length of output: 1907 🌐 Web query:
💡 Result: TanStack AI provides support for both embeddings and reranking, though the handling of each differs in its current implementation [1][2]. Embeddings TanStack AI includes an embed function designed to convert text and multimodal inputs into vectors for semantic search, RAG, and clustering [1][3]. The library provides dedicated embedding adapters for several providers, including Cohere [1][4]. The Cohere adapter allows for text and multimodal embedding generation (e.g., using embed-v4.0) [1][4]. While OpenRouter is a supported provider for other activities in TanStack AI, the official documentation focuses on using specialized embedding providers or calling provider SDKs directly for embedding tasks [1][5]. Notably, recent updates to TanStack AI have streamlined embedding support, emphasizing direct provider SDK usage or vector database integration, though dedicated adapters remain available [1][5]. Reranking Reranking is explicitly supported via the rerank activity, which is designed to reorder documents by relevance to a query [2][6]. This activity is currently supported by two primary adapters: 1. Cohere: Accessed via Citations:
🏁 Script executed: python3 - <<'PY'
from pathlib import Path
p = Path("src/blog/tanstack-ai-rc.md")
lines = p.read_text().splitlines()
for n in range(103, 111):
print(f"{n+1}: {lines[n]}")
PYRepository: TanStack/tanstack.com Length of output: 862 🌐 Web query:
💡 Result: OpenRouter provides access to reranking models (including Cohere's rerank models) through its unified /v1/rerank API endpoint [1][2]. You can use rerank models offered by OpenRouter by passing the appropriate model slug, such as cohere/rerank-v3.5, cohere/rerank-4-fast, or cohere/rerank-4-pro, through the OpenRouter adapter [1][2][3]. While OpenRouter offers reranking capabilities, it is primarily a platform for LLM chat/completion models. When working with embeddings, they are typically handled through specific providers directly or dedicated adapters [4][5]. For example, the Cohere adapter (e.g., Citations:
🏁 Script executed: python3 - <<'PY'
from urllib.request import urlopen
from html import unescape
from re import sub
urls = [
"https://tanstack.com/ai/latest/docs/embeddings",
"https://tanstack.com/ai/latest/docs/rerank/rerank",
]
for url in urls:
print(f"\nURL: {url}")
try:
text = unescape(urlopen(url, timeout=10).read().decode("utf-8", "replace"))
text = sub(r"<script\b[^>]*>.*?</script>", " ", text, flags=__import__("re").S)
text = sub(r"<style\b[^>]*>.*?</style>", " ", text, flags=__import__("re").S)
text = sub(r"<[^>]+>", " ", text)
text = sub(r"\s+", " ", text)
for term in ("Cohere", "OpenRouter", "provider", "embedding", "rerank"):
positions = [m.start() for m in __import__("re").finditer(term, text, flags=__import__("re").I)]
print(term, len(positions))
for pos in positions[:4]:
print(" ", text[max(0, pos-120):pos+220])
except Exception as e:
print(type(e).__name__, e)
PYRepository: TanStack/tanstack.com Length of output: 556 Separate embedding and reranking providers. The embeddings documentation lists Cohere, while reranking supports Cohere and OpenRouter. Reword the sentence to separate these provider lists. 🤖 Prompt for AI Agents |
||
|
|
||
| We also support [agent memory](https://tanstack.com/ai/latest/docs/memory/overview) from every major vendor in the industry, allowing your agents to remember user preferences, retain context, and recall important facts across conversations. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: sed -n '96,114p' src/blog/tanstack-ai-rc.md
printf '\nMemory references in the repository:\n'
rg -n -i 'memory|mem0|honcho|hindsight|provider' src/blog/tanstack-ai-rc.mdRepository: TanStack/tanstack.com Length of output: 5957 🌐 Web query:
💡 Result: TanStack AI provides built-in support for memory adapters through the Citations: Avoid the universal memory-provider claim. The documentation lists adapters for Mem0, Honcho, and Hindsight. It does not support the claim that TanStack AI supports “every major vendor.” Use a concrete list or “several memory services” instead. 🤖 Prompt for AI Agents |
||
|
|
||
| ### Sandboxes and Agent Harnesses | ||
|
|
||
| Our [sandbox](https://tanstack.com/ai/latest/docs/sandbox/overview) and [agent-harness](https://tanstack.com/ai/latest/docs/sandbox/harnesses) primitives allow you to build anything from a simple "fix this PR" agent to a sophisticated, Lovable-style application powered by conversational coding agents. | ||
|
|
||
| You can branch conversations, start multiple runs simultaneously, switch between them, show users several versions generated from the same prompt, persist every run, and make generated artifacts durable and easily accessible. | ||
|
|
||
| The entire system remains provider-agnostic. | ||
|
|
||
| We don't tell you to use Daytona, E2B, Vercel Sandboxes, or any other particular sandbox provider. You choose the infrastructure that works for you. | ||
|
|
||
| You can bring Codex, Claude Code, Grok, OpenCode, or any of the other ACP-compatible agents (more than 20 of them) and connect them to the same primitives. | ||
|
|
||
| We even give you the building blocks required to create a custom coding agent that runs locally, persists its runs to something like SQLite, uses memory, and incorporates whatever additional capabilities your application needs. | ||
|
|
||
| ### MCP | ||
|
|
||
| Our [MCP support](https://tanstack.com/ai/latest/docs/tools/mcp) is designed not only to let you connect to external MCP servers, but also to make those servers type-safe. | ||
|
|
||
| The TanStack AI MCP package includes a [CLI that generates types](https://tanstack.com/ai/latest/docs/tools/mcp-codegen) for tools exposed by remote MCP servers, preserving type safety across the entire integration. | ||
|
|
||
| You can also create MCP connection pools and control their lifecycle. Your application can decide whether a chat should close a connection, keep it open, return it to a pool, or apply some other connection strategy. | ||
|
|
||
| ### Persistence and Durability | ||
|
|
||
| Finally, our [persistence](https://tanstack.com/ai/latest/docs/persistence/overview) story is one of the areas where TanStack AI truly shines. | ||
|
|
||
| We provide the primitives required to build stores that expose the data you need to persist conversations into your databases and services. You implement your store, run it against our conformance suite to verify that it behaves correctly, and then pass it into the persistence middleware. | ||
|
|
||
| At that point, you have fully persisted conversations. | ||
|
|
||
| Users can return after a month and continue exactly where they left off. Even if they refresh the website while a response is being generated, our pluggable [durability adapters](https://tanstack.com/ai/latest/docs/resumable-streams/overview) can persist the stream chunks in memory, Durable Streams, or another supported system. | ||
|
|
||
| When the user reconnects, they can resume the stream without missing anything. | ||
|
|
||
| Excluding the store implementation itself, this entire setup requires roughly 20 lines of code. | ||
|
|
||
| ## What We're Proud Of | ||
|
|
||
| We're a team of three people working on TanStack AI in our free time. | ||
|
|
||
| It has been a difficult journey, but we've built something genuinely remarkable. TanStack AI has grown from an early prototype into a feature-rich, carefully structured project. | ||
|
|
||
| We wanted to highlight what each of us is most proud of. | ||
|
|
||
| > **Jack:** The simplicity and flexibility of the API architecture. For example, the amount we've been able to accomplish simply by extending the middleware and tool mechanisms. | ||
|
|
||
| > **Tom:** The type safety and the care taken with the core design are things I'm really proud of. It's elegantly designed. The persistence and durability systems are pretty amazing as well. I'm also proud that it works regardless of which hosting platform or provider you use, and that we treated every capability with the same level of care. | ||
|
|
||
|
coderabbitai[bot] marked this conversation as resolved.
|
||
| > **Alem:** These guys left me with nothing to highlight. I'm proud of the architecture, and honestly how fast we pulled all of this off. It's proof that with the right minds no feat is impossible. | ||
|
|
||
| ## What's Next? | ||
|
|
||
| Now, it comes down to you. | ||
|
|
||
| We want to make sure we've built the best framework for creating AI-powered applications, and for having fun while doing it. | ||
|
|
||
| Try it out. Experiment with it. Solve interesting problems. Join our Discord, talk about what you're working on, and show us what you've built. | ||
|
|
||
| It makes our day whenever we discover that someone is using TanStack AI, especially when we see the variety of things people are creating: generating manga panels, helping their users, building software factories, running agent harnesses, and much more. | ||
|
|
||
| As maintainers, we plan to keep shipping features as the industry introduces new capabilities. While we wait for the next wave of innovation, we also have ambitious plans for advanced scenarios now that the core architecture is locked in. | ||
|
|
||
| That includes agent workflows and orchestration, which will unlock capabilities such as running agents in parallel, scheduling recurring agent jobs, coordinating complex workflows, and much more. | ||
|
|
||
| We also plan to add more providers and close the remaining gaps in our ecosystem. | ||
|
|
||
| Community contributions are always welcome, whether you want to add an LLM provider, sandbox provider, durability provider, or an entirely new idea we haven't considered. | ||
|
|
||
| Above everything else, we're proud to be a truly open-source AI and agent framework. | ||
|
|
||
| We don't have a commercial roadmap, a product to upsell, or a hidden agenda. Community pull requests are welcome. Ideas are encouraged. Helping everyone make TanStack AI better is the goal. | ||
|
|
||
| No feature request is too small. No idea is inherently bad. No discussion is overlooked. | ||
|
|
||
| It might take us a little time to get to everything, so please be patient with us. We're only three people building this in our spare time. | ||
|
|
||
| ## Thank You | ||
|
|
||
| None of this would have been possible without the enormous support of our partners and community. | ||
|
|
||
| From OpenRouter supporting TanStack AI from the beginning to community members opening dozens of pull requests for small fixes, reporting issues, sharing feedback, and talking about what we've built, we're incredibly grateful. | ||
|
|
||
| We invite you to help us test TanStack AI as we approach a stable v1 release, which is now very close. The release candidate label probably gave that away already. | ||
|
|
||
| Report any feedback you have, tell us what works, tell us what doesn't, and above all: | ||
|
|
||
| Have fun building. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: TanStack/tanstack.com
Length of output: 50378
🏁 Script executed:
Repository: TanStack/tanstack.com
Length of output: 21191
Do not describe durability as
chat()middleware. Configure the durability adapter ontoServerSentEventsResponseortoHttpResponse, and reword this sentence accordingly.🤖 Prompt for AI Agents