AI analysis10 min read

TanStack AI 1.0 makes the model easier to change—and the application harder to ignore

TanStack AI 1.0 stabilizes its core while keeping the agent harness experimental. A practical look at provider portability, three application scenarios, and a careful upgrade from 0.x.

K
Ken Jo

Editorial diagram: TanStack AI 1.0 makes the model easier to change—and the application harder to ignore

Original editorial diagram by Ken Jo, based on the sources listed below.

Changing a model should be a product decision. In an application that has accumulated provider-specific message formats, browser state, and tool callbacks, it can become a migration project before anyone compares the new answers.

TanStack AI 1.0, announced on October 23, 2026, makes a concrete commitment at that boundary: stable core APIs, with 23 provider adapters and support across several UI frameworks. Its new agent harness remains experimental. That distinction matters more than the version number if you are deciding what to build on today. TanStack's announcement.

TanStack develops open-source libraries for application developers. This release concerns the software between an AI model and the product around it: streaming responses, tools, interfaces, and application state. Here is how to judge its portability promise, where it helps in three ordinary projects, and what an existing 0.x application needs before upgrading.

Official TanStack AG-UI example with a React chat interface connected to a Python backend.

Official TanStack AG-UI example, © 2025 Tanner Linsley, MIT license. The image shows the project's example interface and its selected model, not a run performed for this article.

A common interface makes a provider change smaller

An adapter translates between an application's expectations and a provider's API. It gives developers a consistent place to request a model response and consume what comes back. The application can keep its conversation display and business rules while changing the provider-facing piece.

Think of this layer as a switchboard. It establishes understandable connections without making every system on the other end identical. That is useful precisely because models, hosting arrangements, and product requirements keep changing independently.

The October 23 announcement describes 23 adapters, plus an OpenAI-compatible option for services using that API shape. It also separates the stable core from experimental harness packages. These are compatibility and maintenance commitments; they do not promise that every provider supports every model feature. Release scope.

For a developer, the immediate question is therefore specific: which parts of the current application would survive a provider change? A response renderer may transfer easily. A workflow built around one provider's file identifiers, unusual tool behavior, or model-specific output assumptions may still require deliberate changes.

Our view is that this is the right unit of progress. Portability is valuable when it reduces the amount of product code a team must revisit. The number of supported providers is less useful than successfully changing the one dependency a real product needs to change.

The application still owns what success means

A common API cannot make two models produce equivalent decisions. One may be better at following a structured output contract; another may respond differently to a long conversation or ambiguous tool result. An adapter can normalize how a request travels without proving that its answer meets your application's requirements.

This has a practical consequence for testing. Keep provider integration tests separate from the examples that define acceptable product behavior. A correctly completed request verifies one contract; an accurate answer, appropriate tool choice, and understandable interface verify several others.

For example, a support assistant may have a tool that retrieves an order and another that prepares a refund request. Both providers may call those tools correctly at the protocol level. The important question is whether each model selects the right operation, respects the same authorization rules, and describes the result accurately.

Use a small, named evaluation set before switching. Include incomplete requests, unusual inputs, an unavailable tool, and a conversation resumed after a previous turn. The suggested set is an engineering procedure, not a benchmark published by TanStack. Its purpose is to make the team's own definition of success repeatable.

Diagram separating an application's shared interface and business rules from provider adapters and model behavior.

An adapter can preserve the connection contract. Application-specific evaluations establish whether the behavior on the other side remains acceptable.

Three projects expose different kinds of portability

Consider an existing customer-support application first. It already has accounts, permissions, and a conversation history. Adding streaming answers should fit that product rather than require replacing its navigation or data ownership. A shared AI layer is attractive when it lets the team keep those established structures and evaluate providers behind them.

In this illustrative project, start with read-only help retrieval. Check whether the answer cites the material the application supplied and whether cancellation leaves the conversation in a sensible state. Introduce actions only after the interface clearly distinguishes a proposal from a completed operation. Changing the model later should reuse those same checks.

A second scenario is an internal writing tool. A team wants people to select a paragraph, ask for a revision, and compare it with the original. The interface is an editor rather than a conventional chat window. Here, a headless integration is useful because the product needs to own where generated text appears and when a person accepts it.

For this application, provider portability should preserve the user's work. Do not overwrite a source paragraph merely because a stream completed. Keep the suggestion separate, let the person inspect it, and define how a stopped or failed generation is discarded. Those choices are application responsibilities regardless of which SDK supplies the stream.

A third scenario involves a team with an existing backend in another language. TanStack's official AG-UI example connects a React client to six possible backend languages through Server-Sent Events. The example's README explains that those servers speak the wire protocol without requiring TanStack packages on the server. Official polyglot example.

That example gives the portability claim a useful shape. A team can evaluate a browser interface without immediately rewriting a functioning backend. It must still implement the expected events correctly, protect the endpoint, and connect conversation state to its own users. A demonstration of a compatible protocol is a starting point for that work.

ProjectWhat a common layer can preserveWhat the application must evaluate
Support assistantConversation display and provider integration boundarySource accuracy, permitted tool actions, and error recovery
Writing interfaceStreaming mechanics inside an existing editorOriginal-text preservation, acceptance, cancellation, and revision quality
Existing non-JavaScript backendA client that consumes a shared event protocolCorrect event order, authentication, conversation ownership, and persistence

These scenarios explain why the choice is broader than a comparison between chat libraries. The relevant question is how much of a product remains coherent when one component changes. Different teams will care about different boundaries, even when they use the same model.

Stable core and experimental harness deserve separate decisions

The release makes the core 1.0 commitment explicit, while its new agent harness stays on experimental 0.x APIs. A team should record those as two different dependency choices. Installing both does not extend the core's stability commitment to the harness. October 23 release announcement.

For a bounded feature, the simpler lifecycle is often easier to reason about: a request arrives, the model works, and the application handles the result. A longer-lived agent introduces additional questions about concurrent messages, recovery, stored state, and actions that outlive a browser connection. The appeal of a harness is that it offers a place to organize those concerns.

The experimental designation is a maintenance fact, not a reason to avoid every experiment. Keep an evaluation isolated from the product's critical path, make ownership explicit, and budget for API changes. A prototype can teach a team whether the longer-lived interaction is useful before the team commits to operating it.

If the immediate goal is a streaming answer in an existing screen, start there. Add orchestration when the user workflow requires it. A richer abstraction should solve a concrete lifecycle problem rather than become a prerequisite for every small AI feature.

Start with a complete, small interaction

TanStack's current quick start connects a server route, provider credentials, and a framework-specific interface. Its React example uses a server-side model call and an SSE connection, with an explicit conversation identifier. The documentation also keeps the provider API key out of the browser. Quick start, checked October 27, 2026.

For an initial evaluation, use the following sequence in a separate development branch. The goal is one interaction that your team can inspect from request to result. There is no need to migrate unrelated application infrastructure to learn whether the integration fits.

  1. Choose one existing screen and one bounded task. A read-only question about supplied help material is easier to inspect than a workflow that immediately changes customer records.
  2. Install the stable packages for that interface together. For the documented React/OpenAI starting point, use npm i @tanstack/ai@^1 @tanstack/ai-react@^1 @tanstack/ai-openai@^1. Commit the resulting lockfile so the evaluated versions are identifiable.
  3. Implement the server boundary from the current quick start. Keep credentials in the server environment. Connect the request to an authenticated user and a conversation identifier owned by the application.
  4. Render streaming, completion, and cancellation visibly. A person should be able to tell whether the response is still arriving, finished, or interrupted. Preserve their input when a request fails.
  5. Exercise the same task with a second supported provider. Keep the source material and evaluation cases fixed. Record behavior differences separately from integration changes.
  6. Review the result as a product feature. Inspect what users see, what data is retained, and which failures require intervention before deciding whether to expand the integration.

The procedure is intentionally small enough to repeat. One successful answer is encouraging, but a failure that remains understandable is equally informative. A useful abstraction makes both paths easier to maintain.

An upgrade from 0.x includes data, not just imports

The migration guide removes APIs that were deprecated during 0.x and describes coordinated package updates. It also calls out saved chats, runs, and files as a separate migration concern. A passing type check therefore establishes only part of upgrade readiness. TanStack's 1.0 upgrade guide, checked October 27.

This is easy to miss in an application that looks healthy in a fresh browser session. A new conversation can succeed while an older conversation contains state the new client cannot resume. The migration must include representative persisted records, not only newly generated requests.

The guide distinguishes renaming a property from supplying its correct value. An explicit threadId needs a real ownership model; an automated edit cannot decide how your route or database identifies a conversation. Likewise, a similar-looking body option in another part of the API should not be changed by an indiscriminate text replacement.

Use the documented codemod in preview mode, inspect the diff, and upgrade the stable client and server packages together. Then follow the guide's saved-data steps in a test environment before deploying. Keep the experimental harness packages on their documented release track rather than assuming every related package has the same major version.

Diagram showing code migration, persisted-data checks, and repeated user-flow checks before an upgrade is accepted.

An upgrade is complete when existing conversations and the interface still work, as well as the newly compiled code.

Give the release check a user-visible definition. Open an existing conversation, continue it, cancel another response, and exercise an allowed tool flow plus a denied one. Confirm that a permission decision still belongs to the correct user. These checks make the migration's consequences reviewable without treating the SDK version as a quality score.

Portability is a maintained ability to change

TanStack AI 1.0 offers a useful direction for teams that want models and interfaces to remain deliberate choices. The strongest adoption case is an application with a clear boundary that the library can simplify. The weakest is an application expecting an adapter to erase all behavioral differences between providers.

The practical test is what happens on the second change: another provider, a resumed conversation, a revised tool contract, or an older record opened by a new client. Keep those changes observable, and portability becomes an operating capability rather than a promise in an architecture document.

Sources

A recommendation from Telli.sh

Keep the requests, source material, and decisions behind an AI integration in a searchable reference collection. Create a Telli.sh account to organize your project notes and review material.


← Back to Blog